zoukankan      html  css  js  c++  java
  • 重定向(Redirect)相关的几个问题

    转载自:http://hi.baidu.com/fboosjgvuvckore/item/405a1cd7be2c36e3795daa8b


    此次挂接用户中心,交互大都通过重定向(Redirect)实现。期间也遇到了一些问题,总结如下。

     

    Redirect原理及使用

    1. 重定向原理
    重定向方式是在客户端作的重定向处理。该方法通过修改HTTP协议的HEADER部分,对浏览器下达重定向指令的,让浏览器对在location中指定的URL提出请求,使浏览器显示重定向网页的内容。
    该方法可以接受绝对的或相对的URLs。如果传递到该方法的参数是一个相对的URL,那么Web container在将它发送到客户端前会把它转换成一个绝对的URL。

    2. sendRedirect可以将页面跳转到任何页面,不一定局限于本web应用中。用法如下:

    response.sendRedirect("/login.jsp");

    response.sendRedirect("http://union.baidu.com");

    3. 跳转后浏览器地址栏变化。

    4. 这种方式要传值出去的话,只能在url中带parameter或者放在session中,无法使用request.setAttribute来传递。

     

    Redirect vs Forward

    1. Forward重定向是在容器内部实现的同一个Web应用程序的重定向,所以forward方法只能重定向到同一个Web应用程序中的一个资源,重定向后浏览器地址栏URL不变,而sendRedirect方法可以重定向到任何URL,因为这种方法是修改http头来实现的,URL没什么限制,重定向后浏览器地址栏URL改变。

    2. forward重定向将原始的HTTP请求对象(request)从一个servlet实例传递到另一个实例,而采用sendRedirect方式两者不是同一个application。

    3. 基于第二点,参数的传递方式不一样。forward的form参数跟着传递,所以在第二个实例中可以取得HTTP请求的参数。sendRedirect只能通过链接传递参数,response.sendRedirect(“login.jsp?param1=a”)。

     

    Ajax请求处理重定向

    对于Ajax请求,客户端不会处理该302的重定向请求,即页面无响应。

    当我们请求发生在服务器session失效下,服务器自动302到登录页面,那我们异步获取的是登录页面的数据。事实上,并没有发生失败事件,浏览器会再发一次ajax请求到302的地址,如果还是发生302,一直请求,直到完成请求或者请求跨域失败为止。对于js来说,301 302这种跳转是透明的,无法处理。

    那到底如何当ajax正确处理302呢,这是浏览器级别的问题,也就是说没有浏览器能正确处理302。

    对于我们前端来说,正确的验证ajax回来的数据,并给出提示,那也不友好(比如服务器端希望我们去登录页面)。更友好的处理是当服务器端发生302,那ajax就当"错误"处理,也做302跳转。

    后一种修改方式(某产品线目前所采用的方案)即向ajax中添加对302的处理。这需要修改common.js中Ajax类,以及dwr源代码,添加对302重定向的处理(跳转到登陆页)。

    xml.onreadystatechange = function() {

    。。。

    else if(xml.status == 302 && success) {

           location.href="/××/login.jsp";

    } else if

    。。。

    }


  • 相关阅读:
    ZOJ Problem Set–2417 Lowest Bit
    ZOJ Problem Set–1402 Magnificent Meatballs
    ZOJ Problem Set–1292 Integer Inquiry
    ZOJ Problem Set–1109 Language of FatMouse
    ZOJ Problem Set–1295 Reverse Text
    ZOJ Problem Set–1712 Skew Binary
    ZOJ Problem Set–1151 Word Reversal
    ZOJ Problem Set–1494 Climbing Worm
    ZOJ Problem Set–1251 Box of Bricks
    ZOJ Problem Set–1205 Martian Addition
  • 原文地址:https://www.cnblogs.com/ycpanda/p/3637148.html
Copyright © 2011-2022 走看看