RequestDispatcher("URL") 和response.sendRedirect("URL") 的比较
来源:互联网 发布:手机墨刀能做软件吗 编辑:程序博客网 时间:2024/05/21 21:34
我自己的:sendRedirect 不会传递 req,而forward 则会传递,因此 req.setAttribute(**,**)forward 之后可以继续拥有,而sendRedirect 则不会。
resonse.sendRedirect("URL")是立即跳转,也就是说执行到这一步是,会跳转直URL所在页,但resonse.sendRedirect("URL")后的语句会继续执行。
而RequestDispatcher rd=request.getRequestDispatcher("URL");不会立即执行,而是要到rd.forward(request, response);后再跳转。(个人感觉想JDBC中的PreparedStatement 以及PreparedStatement.excute())rd.forward(request,response);后的语句不会再继续执行
所以在有些受保护的页面中判断完SESSION中的属性后应该用RequestDispatcher而如果要用response.sendRedirect("URL")则要在IF后面加ELSE
另外:senddirect 简单的改变客户端浏览器的地址 实现跳转用户访问的url改变了
dispater 则保持地址不变 实质性的区别在于后者 是带request,和response 一起跳转的 ,把request和response委托拖到后继角色继续处理。用redirect重订向的话,传参数只能通过URL传。用dispater则还可以在request里保存参数,在下一个页面获取。
实例如下:jsp1.jsp用于选择显示jsp2.jsp及jsp3.jsp为两个不同的jsp但都显示SESSION中的infor属性。jumpaction.jsp和jumpaction2.jsp分别为两种不同的跳转方法.
//jsp1.jsp
<%session.invalidate();%>
<html>
<head>
<title>
jsp1
</title>
</head>
<body bgcolor="#ffffff">
<h1>
select
</h1>
<form action="jumpaction2.jsp"> <!--or action="jmpaction.jsp"-->
<input name="jumpsel" type="text"/>
<input type="submit"/>
</form>
</body>
</html>
//jsp2.jsp
<%@ page contentType="text/html; charset=GBK" %>
<html>
<head>
<title>
jsp2
</title>
</head>
<body bgcolor="#ffffff">
<h1>
JSP2
</h1>
<%=session.getAttribute("infor") %>
</body>
</html>
//jsp3.jsp
<%@ page contentType="text/html; charset=GBK" %>
<html>
<head>
<title>
jsp3
</title>
</head>
<body bgcolor="#ffffff">
<h1>
jsp3
</h1>
<%=session.getAttribute("infor") %>
</body>
</html>
//jumpaction.jsp
<%
if (request.getParameter("jumpsel").equals("1"))
response.sendRedirect("jsp2.jsp");
else {
response.sendRedirect("jsp3.jsp");
}
session.setAttribute("infor","the programme alreay run to here");
%>
//jumpaction2.jsp
RequestDispatcher rd=request.getRequestDispatcher("jsp1.jsp");
if (request.getParameter("jumpsel").equals("1"))
rd=request.getRequestDispatcher("jsp2.jsp");
else {
rd=request.getRequestDispatcher("jsp3.jsp");
}
rd.forward(request,response);
session.setAttribute("infor","the programme alreay run to here");
%>
1.RequestDispatcher.forward()
public void doPost(HttpServletRequest request,HttpServletResponse response)
2.response.sendRedirect()
这个方法将响应定向到参数location指定的、新的URL。location可以是一个绝对的URL,如response.sendRedirect ("http://java.sun.com") 也可以使用相对的URL。如果location以"/"开头,则容器认为相对于当前Web应用的根,否则,容器将解析为相对于当前请求的URL。这种重定 向的方法,将导致客户端浏览器的请求URL跳转。从浏览器中的地址栏中可以看到新的URL地址,作用类似于上面设置HTTP响应头信息的实现
有三种方法可以得到Request Dispatcher对象。
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>org. javaresearch.redirecttest.ServletOne</servlet-class>
</servlet>
<servlet>
<servlet-name>SecondServlet</servlet-name>
<servlet-class>org.javaresearch. redirecttest.ServletTwo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/servlet/firstservlet/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>SecondServlet</servlet-name>
<url-pattern>/servlet/secondservlet/</url-pattern>
</servlet-mapping>
</web-app>
rd.forward(request, response);
Dispatcher("/servlet/secondservlet");
rd.forward(request, response);
rd.forward(request, response);
JSP页面中的重定向
JSP在解析后编译为一个Servlet运行,所以在JSP中也可以使用上面的重定向代码,并且,JSP还提供了更便利的操作,如下:
- RequestDispatcher("URL") 和response.sendRedirect("URL") 的比较
- sendRedirect和RequestDispatcher(url).forward(request,response)的区别
- Servlet JSP 之间的跳转 response.sendRedirect()和RequestDispatcher().forward的比较
- response.sendRedirect(url)和request.getRequestDispatcher(url).forward(request,response)
- JSP编程,url中加斜杠和不加斜杠的区别(sendredirect,requestdispatcher,servlet,filter)
- JSP编程,url中加斜杠和不加斜杠的区别(sendredirect,requestdispatcher,servlet,filter)
- requestdispatcher.forward 和response的sendredirect的路径问题
- J2EE中RequestDispatcher.forward()和response.sendRedirect()的区别详谈
- 简述request.getRequestDispatcher(url)与response.sendRedirect(url)的区别
- 乱码问题:response.sendRedirect("url").
- requestDispatcher.forward()与response.sendRedirect()的区别
- response.sendRedirect 与 RequestDispatcher
- response.sendRedirect方式的转向与RequestDispatcher的forward方法的比较
- response.sendRedirect方式的转向与RequestDispatcher的forward方法的比较
- response.sendRedirect方式的转向与RequestDispatcher的forward方法的比较
- response.sendRedirect方式的转向与RequestDispatcher的forward方法的比较
- response.sendRedirect方式的转向与RequestDispatcher的forward方法的比较
- response.sendRedirect(url)参数过长和中文乱码问题。
- lucene 学习
- php七天入门教程第二天
- php七天入门教程第三天
- linux命令之chmod
- tomcat 配置数据源
- RequestDispatcher("URL") 和response.sendRedirect("URL") 的比较
- 什么是SAS
- php七天入门教程第四天
- jspsmartupload 的一些相关资料~
- Java学习推荐教材
- Explorer命令行参数
- 使用SC在C#中取得windows服务的启动类型
- php七天入门教程第五天
- php七天入门教程第六天