<jsp:forward>、requestDispatcher和sendRedirect()的区别

1.会话信息保存在服务器内存上,可以断续访问,和cookie相比,其保存在服务器上。
2.男人就像蓝牙:只有在你接近时,他才会找上你。当你离开后,他便又去找其他的“设备”了。女人就像Wi-Fi:她能看到周围所有的“设备”,但只选择强壮的那个“接入”。
3.会话关闭:浏览器关闭,主动关闭,会话超时
4.会话底层实现:cookie和url重写(保存的是sessionID,就是调用response.encodeURL,那么自动加上id)
5.session里有创建时间和最后访问时间,不同于cookie(还得自己写),不过返回的是毫秒数,那么new Date(方法)
6.javabean的类必须是public的,否则不能访问的!!!一定要用public申明
7.BeanUtils主要提供了对于JavaBean进行各种操作。
8.forward是服务器转发,在servlet内部,而sendRedirect是重定向(通过浏览器)。

  1. forward转发是在容器内部实现的同一个Web应用程序的之间的转发,所以forward方法只能重定向到同一个Web应用程序中的一个资源,重定向后浏览器地址栏URL不变,而sendRedirect方法可以重定向到任何URL, 因为这种方法是修改http头来实现的,URL没什么限制,重定向后浏览器地址栏URL改变。
  2. forward重定向将原始的HTTP请求对象(request)从一个servlet实例传递到另一个实例,而采用sendRedirect方式两者不是同一个application。
  3. 基于第二点,参数的传递方式不一样。forward的form参数跟着传递,所以在第二个实例中可以取得HTTP请求的参数。sendRedirect只能通过链接传递参数,response.sendRedirect(“login.jsp?param1=a”)。 
  4. 使用forward重定向的过程,是浏览器先向目的Servlet发送一次Request请求,然后再服务器端由Servlet再将请求发送到目的url,再由服务器端Servlet返回Response到浏览器端。浏览器和服务器一次请求响应(3次操作)。使用sendRedirect转发的过程,浏览器先向目的Servlet发送一次请求,Servlet看到sendRedirect将目的url返回到浏览器,浏览器再去请求目的url,目的url再返回response到浏览器。浏览器和服务器两次请求响应(四次操作)。可以看出哪种方式稍快一些。

forward方法的调用者与被调用者之间共享Request和Response,sendRedirect方法由于两次浏览器服务器请求,所以有两个Request和Response。如果使用request.setAttribute传递一些属性就需要用forward,如果想要跳转到别的应用的资源,就需要用sendRedirect。 无论是forward方法还是sendRedirect方法调用前面都不能有PrintWriter输出到客户端。
   forward方法报错: java.lang.IllegalStateException: Cannot forward after response has been committed
   sendRedirect报错:java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:435)
        再来看一个具体例子!!!参考:http://zhaoyuqiang.blog.51cto.com/6328846/1132795


<html>
<head>
<title>web</title>
</head>
<body>
<h1>我的技术博客:http://zhaoyuqinag.blog.51cto.com</h1>
</body>
</html> 

<%@ page  language="java" contentType="text/html" pageEncoding="gbk" %>
<html>
<head>
<title>web</title>
</head>
<body>
<%
    System.out.println("====forward跳转之前=========");
%>
<jsp:forward page="turnAfter.html"/>
<%
    System.out.println("====forward跳转之后=========");
%>
</body>
</html> 

        运行一下,看浏览器的结果,的确是跳转了,但是地址栏并没有发生改变,更有趣的是看一下服务器的结果,如下图所示:

        根据结果显示,只有跳转之前,而没有跳转之后。我们再来看另一种跳转方式会怎么样。


<%@ page  language="java" contentType="text/html" pageEncoding="gbk" %>
<html>
<head>
<title>web</title>
</head>
<body>
<%
    System.out.println("====response跳转之前=========");
%>
   <% response.sendRedirect("turnAfter.html");%>
<%
    System.out.println("====response跳转之后 =========");
%>
</body>
</html> 

        运行一下,看一下服务器的结果如下:

           

        可以看出forward属于无条件的跳转。跳转之前的语句会执行,而跳转之后的语句将不会执行,那么如果现在在jsp中使用了JDBC的话,很明显必须子啊跳转之前进行数据库的关闭,否则数据库就再也无法关闭了;sendredirect跳转是在所有语句都执行完之后才完成的操作。

时间: 2024-10-14 10:52:27

<jsp:forward>、requestDispatcher和sendRedirect()的区别的相关文章

J2EE中RequestDispatcher.forward()和response.sendRedirect()的区别详谈

一.RequestDispatcher.forward() 在服务器端运行.采用采用请求转发,request对象始终存在,不会重新创建,前后页面共享同一个request.重定向后浏览器地址栏URL不变. public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { response.setContentType("text/html

jsp中forword和sendRedirect的区别

js|redirect|word|区别 1.RequestDispatcher.forward() 是在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet or JSP到另外一个Servlet,JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此时form提交的所有信息在 b.jsp都可以获得,参数自动传递. 但forward ()无法重定向至有frame的jsp文件,

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

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

JSP中forward()与sendRedirect()的区别

jsp的页面跳转有两种方法:RequestDispatcher.forward()方法和HttpServletResponse.sendRedirect()方法. 它们的区别是: RequestDispatcher.forward()方法仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址,他是不会改变Request的值,如果需要在下一个页面中能从中获 取新的信息的话,可以Request.setAttribute()来放置一些标志,这样从下一个页面中获取.其写法如下: try{

jsp跳转getRequestDispatcher()和sendRedirect()的区别_JSP编程

1.request.getRequestDispatcher()是请求转发,前后页面共享一个request ;response.sendRedirect()是重新定向,前后页面不是一个request. 2.RequestDispatcher.forward()是在服务器端运行;HttpServletResponse.sendRedirect()是通过向客户浏览器发送命令来完成.所以RequestDispatcher.forward()对于浏览器来说是"透明的":而HttpServlet

JSP forward用法分析实例代码分析_JSP编程

1.首页(填写姓名)(可选,表单post到time.jsp即可): 略 2.判断时间forward到不同页面: time.jsp: 复制代码 代码如下: <%-- Document : index Created on : 2009-10-3, 15:48:00 Author : lucifer --%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE H

澄清认识:JSP与Javascript有什么样的区别

javascript|js|区别 首先,javascript是netscape发明的,提交给ECMA组织进行标准化,JavaScript在不断的修订,从1.0到1.1.1.2.1.3.1.5,而ECMAScript也在不断的升级,有Edition 1.2.3,其中Edition 3相当于JavaScript 1.5.虽然MS后来参与了标准化,但还是以NS为主导的.目前正在制定的Edition 4也将以Netscape正在制定的JavaScript 2.0协同开发.顺便说一下,jscript的文档

JSP页面中 pageEncoding contentType的区别

pageEncoding是jsp文件本身的编码  contentType的charset是指服务器发送给客户端时的内容编码  JSP要经过两次的"编码",第一阶段会用pageEncoding,第二阶段会用utf-8至utf-8,第三阶段就是由Tomcat出来的网页, 用的是contentType.  第一阶段是jsp编译成.java,它会根据pageEncoding的设定读取jsp,结果是由指定的编码方案翻译成统一的UTF-8 JAVA源码(即.java),如果pageEncoding

jsp动态include与静态include区别

答:动态INCLUDE用jsp:include动作实现 <jsp:include page="included.jsp" flush="true" />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数  <%@ include file="included.htm" %> 静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面 1. 静态include的结果是把其他jsp