`
wangmored
  • 浏览: 164073 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

request 、response 跳转定向

    博客分类:
  • java
阅读更多
尽管HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法都可以让浏览器获得另外一个URL所指向的资源,但两者的内部运行机制有着很大的区别。下面是HttpServletResponse.sendRedirect方法实现的请求重定向与RequestDispatcher.forward方法实现的请求转发的总结比较:

(1)RequestDispatcher.forward方法只能将请求转发给同一个WEB应用中的组件;而HttpServletResponse.sendRedirect 方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。如果传递给HttpServletResponse.sendRedirect 方法的相对URL以“/”开头,它是相对于整个WEB站点的根目录;如果创建RequestDispatcher对象时指定的相对URL以“/”开头,它是相对于当前WEB应用程序的根目录。

(2)调用HttpServletResponse.sendRedirect方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;而调用RequestDispatcher.forward 方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。

(3)HttpServletResponse.sendRedirect方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求,这个过程好比有个绰号叫“浏览器”的人写信找张三借钱,张三回信说没有钱,让“浏览器”去找李四借,并将李四现在的通信地址告诉给了“浏览器”。于是,“浏览器”又按张三提供通信地址给李四写信借钱,李四收到信后就把钱汇给了“浏览器”。可见,“浏览器”一共发出了两封信和收到了两次回复,“浏览器”也知道他借到的钱出自李四之手。RequestDispatcher.forward方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。这个过程好比绰号叫“浏览器”的人写信找张三借钱,张三没有钱,于是张三找李四借了一些钱,甚至还可以加上自己的一些钱,然后再将这些钱汇给了“浏览器”。可见,“浏览器”只发出了一封信和收到了一次回复,他只知道从张三那里借到了钱,并不知道有一部分钱出自李四之手。

(4)RequestDispatcher.forward方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;而HttpServletResponse.sendRedirect方法调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。对于同一个WEB应用程序的内部资源之间的跳转,特别是跳转之前要对请求进行一些前期预处理,并要使用HttpServletRequest.setAttribute方法传递预处理结果,那就应该使用RequestDispatcher.forward方法。不同WEB应用程序之间的重定向,特别是要重定向到另外一个WEB站点上的资源的情况,都应该使用HttpServletResponse.sendRedirect方法。

(5)无论是RequestDispatcher.forward方法,还是HttpServletResponse.sendRedirect方法,在调用它们之前,都不能有内容已经被实际输出到了客户端。如果缓冲区中已经有了一些内容,这些内容将被从缓冲区中清除。


分享到:
评论

相关推荐

    JSP中5种跳转foward,request等等的详细区别

    JSP 中有五种跳转方式,包括 RequestDispatcher.forward()、response.sendRedirect()、jsp:forward、RequestDispatcher.include() 和 HttpServletResponse.sendRedirect()。下面我们将详细介绍这五种跳转方式的区别...

    jsp和servlet中实现页面跳转的方式实例总结.docx

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } ``` 2. sendRedirect 使用 sendRedirect 方法可以将...

    servlet实现的页面跳转

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RequestDispatcher dispatcher = request.getRequestDispatcher("newPage.jsp"); ...

    Jsp利用response.sendRedirect、cookie传参

    在上述示例中,不仅通过`response.sendRedirect`实现了页面跳转和参数传递,还通过Cookie机制实现了数据的跨页面持久化存储。`writeCookie.jsp`负责写入Cookie并重定向至`readCookie.jsp`,而`readCookie.jsp`则负责...

    vue 实现axios拦截、页面跳转和token 验证

    - 使用`response`拦截器,当后端返回401状态码(表示未授权)时,我们清除token并重定向到登录页面。 ```javascript axios.interceptors.request.use(config => { if (store.state.token) { config.headers....

    Asp.net response对象与request对象使用介绍

    1.Response:服务器发给客户端信息,或者说是服务器的向用户发送输出结果。 Redirect:让客户端重新定向到指定的 URL。 Write:写出指定字符串。 2.request:客户端发给服务器,或者说是从客户端取得信息。 form:从...

    Java Web中的页面跳转.pdf

    在Java Web中,主要有两种页面跳转方式:请求转发(Request Forward)和重定向(Redirect)。这两种方式有着不同的工作原理和适用场景。 **请求转发(Request Forward)** 请求转发是由服务器内部完成的,不会向...

    各种定向携带参数传值

    ### 各种定向携带参数传值 在动态页面开发中,参数传递是非常常见的需求之一,尤其是在需要跳转页面并保留某些关键数据时。本文将详细探讨几种常用的参数传递方法及其应用场景,帮助开发者更好地理解如何在不同场景...

    java servlet请求转发重定向

    request.getRequestDispatcher("targetResource").forward(request, response); ``` #### 三、重定向 重定向是一种让浏览器重新发起一个新请求的技术。它通过修改客户端的URL来实现页面跳转,通常用于实现跨域跳转...

    asp.net 2.0 根据客户端IP地址进行自动跳转(二级域名或子目录)

    1. **获取客户端IP地址**:在ASP.NET中,`HttpContext.Current.Request.UserHostAddress` 属性可以用来获取客户端的IP地址。但需要注意,如果应用托管在反向代理或负载均衡器后面,可能会获取到代理服务器的IP而非...

    Session过期后自动跳转到登录页面的实例代码

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; ...

    JSP网站登录记忆跳转实现的一种方法

    如果用户未登录,则需要记录用户当前试图访问的页面,并重定向至登录页面。 ```jsp (session.getAttribute("username") == null) { %> String url = myRedirect.dealurl(request); response.sendRedirect(...

    jsp实现登录验证的过滤器.docx

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; ...

    ASP_返回上一页的多种方法

    为了避免浏览器缓存导致的返回问题,可以禁用浏览器的缓存机制,并使用`Response.Redirect`方法直接跳转到上一个页面。 **示例代码** ```vbnet Response.Buffer = True Response.ExpiresAbsolute = Now() - 1 ...

    .net 一招解决页面回退问题

    为了进一步处理,我们可以利用Cookie或Session存储用户登录后的信息,当检测到用户尝试回退到未授权的页面时,强制跳转到登录页。 ```csharp if (!User.Identity.IsAuthenticated) { Response.Redirect("LoginPage...

    在Jsp Servlet中页面重新定向总汇

    在JSP和Servlet中进行页面重新定向是Web开发中常见的需求,它允许开发者根据用户的行为和应用程序的需要控制页面的跳转流程。页面重新定向主要分为两种方式:服务器端的转发(RequestDispatcher.forward())和客户端...

    ASP 编程中 20 个非常有用的例子

    当需要将当前页面的 QueryString 传递到另一个 ASP 页面时,可以使用 `Response.Redirect` 方法与 `Request.ServerVariables("QUERY_STRING")` 结合。例如: ```vb Response.Redirect("second.asp?" & Request....

    Ajax登陆使用Spring Security缓存跳转到登陆前的链接

    在本文中,通过Jackson将要跳转的URL封装为JSON格式,然后通过response对象输出。这个过程涉及到对ObjectMapper实例的使用, ObjectMapper类是Jackson库中进行数据绑定和序列化/反序列化的入口点。 7. **Maven依赖...

    Laravel 5.4重新登录实现跳转到登录前页面的原理和方法

    在Laravel 5.4中,当用户登录后有会话过期,系统需要能够将用户重新定向到他们登录之前的页面。这个功能是通过在用户过期后存储当前URL到session,然后在用户重新登录后读取并跳转至该URL来实现的。下面将详细解释...

    AisMVC.zip

    public void get(String s1,String s2,HttpServletRequest request, HttpServletResponse response, HttpSession session){ return; } /** * @author gaorui * @return String * 服务端跳转页面处理,默认 ...

Global site tag (gtag.js) - Google Analytics