`
sjsky
  • 浏览: 923725 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

回顾getRequestDispatcher()和sendRedirect()的区别

    博客分类:
  • Java
阅读更多
    blog迁移至:http://www.micmiu.com

1.getRequestDispatcher(url)是请求转发,前后页面共享一个request
   RequestDispatcher 对象从客户端获取请求request,并把它们传递给服务器上的servlet,html或jsp。
   它有两个方法:forward()include()具体如下
  • void forward(ServletRequest request,ServletResponse response) 用来传递request的,可以一个Servlet接收request请求,另一个Servlet用这个request请求来产生response。request传递的请求,response是客户端返回的信息。forward要在response到达客户端之前调用,也就是 before response body output has been flushed。如果不是的话,它会报出异常。
  • void include(ServletRequest request,ServletResponse response) 用来记录保留request和 response,以后不能再修改response里表示状态的信息。
    request.getRequestDispatcher(url).forward(request,response)是直接将请求转发到指定URL,所以该请求能够直接获得上一个请求的数据,request对象始终存在,不会重新创建。
     forward 发生在服务器内部, 在浏览器完全不知情的情况下发给了浏览器另外一个页面的response. 这时页面收到的request不是从浏览器直接发来了,可能己经放了数据。
     请求转发时如果要传递参数可以这样用:
     request.setAttribute("name","Michael");
     request.getAttribute("name");


2.sendRedirect(url)重定向到指定URL,会新建request对象。
  这是因为 redirect 会首先发一个response给浏览器, 然后浏览器收到这个response后再发一个requeset给服务器,
  然后服务器发新的response给浏览器,这时页面收到的request是从浏览器新发来的,所以上一个request的数据会丢失。
  如果要传递参数只有在url后加参数的方式,比如url?type=test才能实现。

3.ServletContext.getRequestDispatcher(String url)中的url只能使用绝对路径; 而ServletRequest.getRequestDispatcher(String url)中的url可以使用相对路径。h这是因为ServletRequest具有相对路径的概念;而ServletContext对象无此概念。

PS:如果需要把请求转移到另外一个WebApp中的某个地址,可以按下面的步骤做法:
  • 获得另外一个WebApp的ServletConext对象(currentServletContext.getContext(uripath)).
  • 调用ServletContext.getRequestDispatcher(String url)方法。


分享到:
评论

相关推荐

    jsp跳转getRequestDispatcher()和sendRedirect()的区别.docx

    ### jsp跳转getRequestDispatcher()和sendRedirect()的区别 在Java Web开发中,经常会遇到页面间的跳转操作,其中两种常见的方法是`getRequestDispatcher()`和`sendRedirect()`。这两种方式虽然都能实现页面跳转,...

    jsp跳转getRequestDispatcher()和sendRedirect()的区别

    1. 请求转发和重定向的本质区别: - `RequestDispatcher.forward()`方法的转发是在服务器端进行的。服务器从一个资源接收客户端请求,然后调用另一个资源来处理该请求。在这个过程中,客户端不知道服务器内部转发了...

    response_sendRedirect和request_getRequestDispatcher()_forward的区别.

    而sendRedirect方法可以让你重定向到任何URL。 表单form的action="/uu";sendRedirect("/uu");表示相对于服务器根路径。如http://localhost:8080/Test应用(则提交至http://localhost:8080/uu); Forward代码中的"/uu...

    Servlet跳转方式sendReDirect

    在Servlet中,有两种主要的跳转方式:`RequestDispatcher.forward()`和`ServletResponse.sendRedirect()`。这两种方法在处理客户端请求时有不同的行为和应用场景。 1. `RequestDispatcher.forward()` - `forward()...

    forward-sendRedirect

    在Java Web开发中,"forward-sendRedirect"是一个关键的概念,主要涉及到Servlet和JSP之间的页面跳转技术。这里我们将深入探讨这两个方法的工作原理及其在实际应用中的差异。 首先,我们来了解一下`forward()`方法...

    jsp中页面之间的跳转forward与sendRedirect的区别

    页面之间的跳转可以通过两种方式实现:forward和sendRedirect。 forward:可以在JSP页面中使用,可以在Servlet中实现。 在JSP页面中使用”目标文件”/>,例如要跳转到userlist.jsp,可以写: 代码如下: ”userlist...

    数据库测试test.sql

    request.getRequestDispatcher("/admin/register.jsp").forward(request,response); return; } //2.调用业务层完成注册操作并返回结果 User user = new User(userId,realName,pwd,age, Arrays.toString...

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

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

    java web知识集锦2.doc

    ### Java Web知识集锦:RequestDispatcher与sendRedirect的区别详解 #### 概述 在Java Web开发中,控制页面之间的流转是非常重要的技术之一。通常我们有两种常用的方法:`RequestDispatcher`和`sendRedirect`。这...

    转发和重定向的区别 forward和redirect的区别

    它们的主要区别在于请求处理流程、URL改变以及数据共享方式。 1. 转发(Forward): - 使用`RequestDispatcher.forward()`方法实现。 - 请求转发是在服务器内部完成的,客户端浏览器并不知情。这意味着,浏览器的...

    java web知识集锦.doc

    本文将深入探讨`RequestDispatcher`和`sendRedirect()`之间的主要区别,并通过实例帮助理解如何在实际项目中正确使用这两种技术。 #### RequestDispatcher详解 `RequestDispatcher`接口提供了在服务器端进行请求...

    直接请求转发(Forward)和间接请求转发(Redirect)两种区别.docx

    直接请求转发和间接请求转发的主要区别在于请求处理的方式和用户感知。直接转发在服务器内部进行,不改变URL,保留请求状态;而间接转发通过浏览器重新发起请求,URL变化,请求状态丢失。在设计Web应用时,需要根据...

    JSP_页面跳转,JSP_页面跳转

    理解并掌握这两种跳转方式的区别和适用场景,对于提升个人开发技能及项目质量具有不可忽视的作用。在未来的学习和实践中,持续探索和优化页面跳转的策略,将有助于我们在复杂多变的Web环境中,为用户提供更加顺畅和...

    javaServlet请求转发和重定向.pdf

    * forward() 方法的调用者与被调用者之间共享相同的 request 对象和 response 对象,而 sendRedirect() 方法调用者和被调用者使用各自的 request 对象和 response 对象,它们属于两个独立的请求和响应过程。...

    JSP与Servlet传值技术总结

    Servlet到JSP的传值技术也可以使用sendRedirect和forward两种方法,例如: 1. 使用sendRedirect方法:response.sendRedirect("http://localhost/Try/a.jsp?a=a") 2. 使用forward方法:ServletContext application =...

    请求重定向个请求分派

    sendRedirect() 方法将生成 302 响应码和 Location 响应头,从而通知客户端去重新访问 Location 响应头中指定的 URL。 sendRedirect() 方法的定义语法如下: public void sendRedirect(String location) throws ...

    JSP面试容易问到的问题

    总之,了解`forward`与`sendRedirect`的区别以及`<%@ include %>`与`<jsp:include>`的用法对于掌握JSP和Servlet的基本原理非常重要。同时,深入理解JSP与Servlet的工作机制有助于开发者更好地设计和实现复杂的应用...

    请求转发和重定向的区别共1页.pdf.zip

    本篇文章将详细解析请求转发与重定向的区别。 一、请求转发(Request Forwarding) 1. 定义:请求转发是在服务器端完成的内部操作,它不涉及客户端浏览器的任何更改。当服务器接收到一个请求后,可以决定将该请求...

Global site tag (gtag.js) - Google Analytics