在进行请求的处理时,有两种方法进行页面转发,一种是用request.getRequestDispatcher().forward方法,另外一种方法是response.sendRedirect方法,这两种方法有什么不同呢,下面结合实例进行说明。
实例:
用户登录模块
login.jsp
loginServlet.java
loginOK.jsp
用户访问login.jsp,输入用户名和密码进行登录,请求到达loginServlet,loginServet中,在session中加入user属性,值为输入的用户名。接着loginServlet把请求转发给loginOK.jsp,loginOK.jsp显示用户名。
代码简单描述(注意颜色的对应):
login.jsp中:
username=ethen,password=pwd;
loginServlet.java中:
String user=request.getParameter("username");
session.setAttribute("user",user);
loginOK.jsp中:
显示request中的用户名 ${param["username"},
显示session中的用户名 ${sessionScope["user"]}。
第一种情况:
由loginServlet调用forward方法进行转发,首先观察浏览器的地址栏,发现了地址是形如http://.../login.do?username=..&..的样子的。页面中的request里的用户名和session的用户名都显示了出来。
第二种情况:
由loginServlet调用sendRedirect方法进行转发,还是观察地址栏,发现地址已经变成http://.../loginOK.jsp了,
页面中request里面的用户名没有显示出来,但是session里的用户名却显示了出来。
这是为什么呢?
原来,forward 是服务器端的跳转,也就是客户端根本不知道这个动作,也就是从一个java程序,转到了另一个java程序,所以此时request会被作为参数传递过去。
但是,sendRedirect 这个是客户端的跳转,服务器端会发送一个跳转的代码和url给浏览器,浏览器会重新请求指定的URL,所以此时,request已经无效了。当然,此时session还是生效的。
现在你明白了么?
分享到:
相关推荐
运用forward方法只能重定向到同一个Web应用程序中的一个资源。而sendRedirect方法可以让你重定向到任何URL。 表单form的action="/uu";sendRedirect("/uu");表示相对于服务器根路径。如http://localhost:8080/Test...
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()的区别 在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,...
- 示例代码:`request.getRequestDispatcher("/a/a.jsp").forward(request, response);` 2. 重定向(Redirect): - 使用`Response.sendRedirect()`方法实现。 - 重定向会导致浏览器发起一个新的HTTP请求,所以...
request.getRequestDispatcher("providerAddxiugai.jsp").forward(request, response); }else if(canshu.equals("xiugaiok")){ int gysid=Integer.parseInt(request.getParameter("gysid")); String ...
- `RequestDispatcher`提供了两个主要方法:`forward(ServletRequest request, ServletResponse response)`和`include(ServletRequest request, ServletResponse response)`。其中`forward()`用于请求转发,而`...
`request.getRequestDispatcher().forward()`和`response.sendRedirect()`是两种不同的请求处理方式。前者是服务器端的转发,它不会向客户端发送新的HTTP请求,而是直接在服务器内部处理请求的转发,地址栏的URL不会...
- **sendRedirect**:在JSP中,`response.sendRedirect()`的地址也是相对于服务器根目录的,如`response.sendRedirect("/rtccp/user/a.jsp")`。 - **客户端地址**: - HTML表单的`action`属性,JavaScript的URL...
RequestDispatcher 接口提供了两个方法:`void forward(ServletRequest request, ServletResponse response)` 和 `void include(ServletRequest request, ServletResponse response)`。这两个方法可以用来实现页面...
JSP 中有五种跳转方式,包括 RequestDispatcher.forward()、response.sendRedirect()、jsp:forward、RequestDispatcher.include() 和 HttpServletResponse.sendRedirect()。下面我们将详细介绍这五种跳转方式的区别...
rd.forward(request, response); %> ``` 2. response.sendRedirect 重定向 使用 response.sendRedirect 方法可以将请求重定向到另一个 JSP 页面。例如: ```jsp response.sendRedirect("test2.jsp"); %> ``` 3....
1. **多次提交响应**:在同一个请求处理过程中,调用了多次`response.sendRedirect()`、`request.getRequestDispatcher().forward()`或直接写入响应体。 2. **过滤器顺序不当**:如果一个过滤器在响应被提交后尝试...
- 调用`request.getRequestDispatcher(path).forward(request, response)`,其中`path`参数是一个相对于当前Servlet上下文的路径,用于指定要跳转的目标资源。 - 当使用`forward()`时,请求和响应对象会被传递到...
request.getRequestDispatcher("error.jsp").forward(request, response); } } } ``` 注册功能相对复杂,因为涉及新用户的创建和数据存储。同样,我们需要创建注册页面(register.html或register.jsp)让用户...
`<jsp:forward>`和`request.getRequestDispatcher().forward()`则适用于需要在服务器内部进行页面跳转且希望保持原有请求数据的情形。此外,还需注意在使用`<jsp:forward>`时避免缓冲区溢出等问题。
Servlet到JSP的传值技术也可以使用sendRedirect和forward两种方法,例如: 1. 使用sendRedirect方法:response.sendRedirect("http://localhost/Try/a.jsp?a=a") 2. 使用forward方法:ServletContext application =...
本文将详细介绍五种常用的JSP页面跳转方法:`RequestDispatcher.forward()`、`response.sendRedirect()`、`jsp:forward`、`request.getRequestDispatcher().include()`以及`<jsp:include>`。这些方法各有特点,适用...
本文将深入探讨`RequestDispatcher`和`sendRedirect()`之间的主要区别,并通过实例帮助理解如何在实际项目中正确使用这两种技术。 #### RequestDispatcher详解 `RequestDispatcher`接口提供了在服务器端进行请求...