`

request.getRequestDispatcher().forward() 和response.sendRedirect()区别

阅读更多
在进行请求的处理时,有两种方法进行页面转发,一种是用request.getRequestDispatcher().forward(request,response)方法,另外一种方法是response.sendRedirect方法,这两种方法有什么不同呢,下面结合实例进行简单说明。
实例:

用户登录模块
login.jsp
loginServlet.java
loginOK.jsp

用户访问login.jsp,输入用户名和密码进行登录,请求到达loginServlet,loginServet中,在session中加入user属性,值为输入的用户名。接着loginServlet把请求转发给loginOK.jsp,loginOK.jsp显示用户名。

代码简单描述
login.jsp中:
username=aaa,password=123;


loginServlet.java中:
String username=request.getParameter("username");
session.setAttribute("username",username);

loginOK.jsp中:

显示request中的用户名 ${username},

显示session中的用户名 ${username},

第一种情况:

由loginServlet调用forward方法进行转发,首先观察浏览器的地址栏,发现了地址是形如http://.../login.do?username=..&..的样子的。页面中的request里的用户名和session的用户名都显示了出来。

第二种情况:

由loginServlet调用sendRedirect方法进行转发,还是观察地址栏,发现地址已经变成http://.../loginOK.jsp了,

页面中request里面的用户名没有显示出来,但是session里的用户名却显示了出来。

这是为什么呢?

原来,forward 是服务器端的跳转,也就是客户端根本不知道这个动作,从一个java程序转到了另一个java程序,所以此时request会被作为参数传递过去。
但是,sendRedirect 这个是客户端的跳转,服务器端会发送一个跳转的代码和url给浏览器,浏览器会重新请求指定的URL,所以此时,request已经无效了。当然,此时session还是生效的。

现在你明白了么?
分享到:
评论

相关推荐

    response_sendRedirect和request_getRequestDispatcher()_forward的区别.

    运用forward方法只能重定向到同一个Web应用程序中的一个资源。而sendRedirect方法可以让你重定向到任何URL。 表单form的action="/uu";sendRedirect("/uu");表示相对于服务器根路径。如http://localhost:8080/Test...

    数据库测试test.sql

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

    很经典的登录回选。

    if (session.getAttribute("person") == null) { if (null != request.getQueryString()){ // session.setAttribute("redirectUrl", ... request.getRequestDispatcher("fall.jsp").forward(request, response); }

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

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

    计算机基础课程教学平台+毕业设计+源代码

    //request.getRequestDispatcher("student.jsp").forward(request, response); response.sendRedirect("student.jsp"); } else if (uc == 2) { //request.getRequestDispatcher("teacher.jsp").forward(request,...

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

    - 示例代码:`request.getRequestDispatcher("/a/a.jsp").forward(request, response);` 2. 重定向(Redirect): - 使用`Response.sendRedirect()`方法实现。 - 重定向会导致浏览器发起一个新的HTTP请求,所以...

    北大青鸟U2项目完全版

    request.getRequestDispatcher("providerAddxiugai.jsp").forward(request, response); }else if(canshu.equals("xiugaiok")){ int gysid=Integer.parseInt(request.getParameter("gysid")); String ...

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

    - `RequestDispatcher`提供了两个主要方法:`forward(ServletRequest request, ServletResponse response)`和`include(ServletRequest request, ServletResponse response)`。其中`forward()`用于请求转发,而`...

    JSP request.setAttribute()详解及实例

    `request.getRequestDispatcher().forward()`和`response.sendRedirect()`是两种不同的请求处理方式。前者是服务器端的转发,它不会向客户端发送新的HTTP请求,而是直接在服务器内部处理请求的转发,地址栏的URL不会...

    java中相对路径,绝对路径问题总结.doc

    - **sendRedirect**:在JSP中,`response.sendRedirect()`的地址也是相对于服务器根目录的,如`response.sendRedirect("/rtccp/user/a.jsp")`。 - **客户端地址**: - HTML表单的`action`属性,JavaScript的URL...

    response 对象:页面跳转.pptx

    RequestDispatcher 接口提供了两个方法:`void forward(ServletRequest request, ServletResponse response)` 和 `void include(ServletRequest request, ServletResponse response)`。这两个方法可以用来实现页面...

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

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

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

    rd.forward(request, response); %> ``` 2. response.sendRedirect 重定向 使用 response.sendRedirect 方法可以将请求重定向到另一个 JSP 页面。例如: ```jsp response.sendRedirect("test2.jsp"); %> ``` 3....

    Cannot forward after response has been committed

    1. **多次提交响应**:在同一个请求处理过程中,调用了多次`response.sendRedirect()`、`request.getRequestDispatcher().forward()`或直接写入响应体。 2. **过滤器顺序不当**:如果一个过滤器在响应被提交后尝试...

    Servlet跳转方式sendReDirect

    - 调用`request.getRequestDispatcher(path).forward(request, response)`,其中`path`参数是一个相对于当前Servlet上下文的路径,用于指定要跳转的目标资源。 - 当使用`forward()`时,请求和响应对象会被传递到...

    J2EE——MyEclipse实现网页的登录和注册

    request.getRequestDispatcher("error.jsp").forward(request, response); } } } ``` 注册功能相对复杂,因为涉及新用户的创建和数据存储。同样,我们需要创建注册页面(register.html或register.jsp)让用户...

    小结jsp页面跳转问题

    `<jsp:forward>`和`request.getRequestDispatcher().forward()`则适用于需要在服务器内部进行页面跳转且希望保持原有请求数据的情形。此外,还需注意在使用`<jsp:forward>`时避免缓冲区溢出等问题。

    JSP与Servlet传值技术总结

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

    jsp页面跳转的五中方法

    本文将详细介绍五种常用的JSP页面跳转方法:`RequestDispatcher.forward()`、`response.sendRedirect()`、`jsp:forward`、`request.getRequestDispatcher().include()`以及`<jsp:include>`。这些方法各有特点,适用...

    java web知识集锦.doc

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

Global site tag (gtag.js) - Google Analytics