`
jife123
  • 浏览: 89998 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

forward和sendRedirect重定向的区别

 
阅读更多
JSP的重定向有两种:forward和sendRedirect,它们的原理以及区别是什么呢?
它们在使用上的区别有很多,那些都是表面现象,在理解了它们各自的原理以后,使用上的区别那就能容易掌握了。

一、 原理.
1、 Forward
这种方式是在服务器 端作的重定向。服务器client发送数据的过程是这样的:服务器 在向客户端发送数据之前,是先将数据输出到缓冲区,然后将缓冲区中数据发送给client端。什么时候将缓冲区里的数据发送给client端呢?(1)当对来自client的request处理完,并把所有数据输出到缓冲区,(2)当缓冲区满,(3)在程序中调用缓冲区的输出方法out.flush()或 response.flushbuffer(),web container才将缓冲区中的数据发送给client。
这种重定向方式是利用服务器 端的缓冲区机制,在把缓冲区的数据发送到客户端之前,原来的数据不发送,将执行转向重定向页面,发送重定向页面的数据,重定向调用页的数据将被清除。如果在<JSP:FORWORD>之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么这种重定向方式将不起作用,这一点应该特别注意。
Java代码 复制代码
  1. publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException
  2. {
  3. response.setContentType("text/html;charset=UTF-8");
  4. ServletContextsc=getServletContext();
  5. RequestDispatcherrd=null;
  6. rd=sc.getRequestDispatcher("/index.jsp");
  7. rd.forward(request,response);
  8. }
2、 sendRedirect这种方式是在客户端作的重定向处理。该方法通过修改HTTP协议的HEADER部分,对浏览器下达重定向指令的,让浏览器对在location中指定的URL 提出请求,使浏览器显示重定向网页的内容。该方法可以接受绝对的或相对的URLs。如果传递到该方法的参数是一个相对的URL,那么Webcontainer在将它发送到客户端前会把它转换成一个绝对的URL。
Java代码 复制代码
  1. publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException
  2. {
  3. response.setContentType("text/html;charset=UTF-8");
  4. response.sendRedirect("/index.jsp");
  5. }
二、区别.
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、sendRedirect能够处理相对URL,自动把它们转换成绝对URL,如果地址是相对的,没有一个‘/’,那么Webcontainer就认为它是相对于当前的请求URI 的。比如,如果为response.sendRedirect("login.jsp"),则会从当前servlet 的URL 路径下找login.jsp: http://10.1.18.8:8081/dms/servlet/Servlet 重定向的URL: http://10.1.18.8:8081/dms/servlet/login.jsp ,如果为response.sendRedirect("/login.jsp")则会从当前应用径下查找url:http://10.1.18.8:8081/login.jsp 。而forward不能这样处理相对路径。


又一篇:HTML meta content-language 定义页面语言
refresh 属性值 -- 刷新与跳转(重定向)页面
  • refresh 用于刷新与跳转(重定向)页面
  • refresh出现在http-equiv 属性中,使用content 属性表示刷新或跳转的开始时间与跳转的网址
  • 引用网址:http://www.dreamdu.com/xhtml/refresh/

refresh示例

5秒之后刷新本页面:

Html代码 复制代码
  1. <metahttp-equiv="refresh"content="5"/>

5秒之后转到梦之都首页:

Html代码 复制代码
  1. <metahttp-equiv="refresh"content="5;url=http://www.dreamdu.com/"/>
分享到:
评论

相关推荐

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

    转发和重定向的区别 forward和redirect的区别 request.getRequestDispatcher()..forward(request,response);和 response.sendRedirect();的区别详解

    response_sendRedirect和request_getRequestDispatcher()_forward的区别.

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

    转发与重定向区别

    尽管HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法都可以让浏览器获得另外一个URL所指向的资源,但两者的内部运行机制有着很大的区别。下面是HttpServletResponse.sendRedirect方法实现的...

    java中dispcter和forward的区别

    RequestDispatcher.forward()方法和HttpServletResponse.sendRedirect()方法的区别是:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址,他是不会改变Request的值,如果你需要在下一个...

    JSP与Servlet 技术总结

    9. 重定向(forward与sendRedirect)区别 6 10. JSP和Servlet的区别 7 11. Cookie学习 7 12. Session学习 9 Servlet技术总结 9 1. Servlet生命周期 9 2. Servlet的方法说明: 10 3. Servlet 在web.xml中的配置 10 ...

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

    本文实例总结了jsp和servlet中实现页面跳转的方式。分享给大家供大家参考,具体如下: 假设要求从test1.jsp 跳转到test2.jsp ...2. response.sendRedirect 重定向 &lt;&#37; response.sendRedire

    jsp servlet

    注意事项:a标签和重定向差不多 通过a标签进行跳转时也是调用doGet()方法 //从地址栏上方进入网页也是调用的servlet的get方法 //在使用doGet()方法时还要做验证 看用户是否已经登录 -----转发---------------------...

    JSP和Servlet面试题

    7.Jsp的重定向和转发的流程有什么区别 重定向是客户端行为,转发是服务器端行为 重定向时服务器产生两次请求,转发产生一次请求,重定向时可以转发到项目以外的任何网址,转发只能在当前项目里转发 重定向会导致...

    jsp跳转的五种方式

    name=frank传至下个页面,同时它可以重定向至不同的主机上,sendRedirect()可以重定向有frame.的jsp文件.  重定向后在浏览器地址栏上会出现重定向页面的URL  例:在servlet中重定向 public void doPost...

    C-ATM.zip jsp+servlet 项目【练手/总结/巩固】

    4. 使用重定向时,可以使用`response.sendRedirect()`方法指定重定向的URL地址。 5. 使用转发时,需要使用`RequestDispatcher`对象获取转发器,并使用`forward()`方法执行转发操作。 6. 根据具体的业务需求,选择...

    jsp页面跳转

    五种JSP页面跳转方法详解 1. RequestDispatcher....2. response.sendRedirect() 3. <jsp:forward page="" /> 4. 修改HTTP header的Location属性来重定向 5. JSP中实现在某页面停留若干秒后,自动重定向到另一页面

    JSP100选择题 JSP100选择题 适合考前练习

    3.在Servlet里,能实现重定向的方法有()。(选择两项) A.运用javax.servlet.http.HttpServletRequest接口的sendRedirect方法 B.运用javax.servlet.http.HttpServletResponse接口的sendRedirect方法 C.运用javax....

    JSP页面的跳转方式汇总

    JSP页面的跳转方式汇总:1、使用超级链接跳转,2、使用表单提交的方式跳转页面,3、修改HTTP header的Location属性来重定向,4、JSP中实现在某页面停留若干秒后,自动重定向到另一页面,5、jsp标签跳转:<jsp:forward ...

    JSP 程序设计从入门到精通 PDF 教程

     4.3 JSP/Servlet的重定向技术综述 72  4.3.1 RequestDispatcher.forward() 72  4.3.2 response.sendRedirect() 73  4.4 理解会话 74  4.4.1 会话状态跟踪API 75  4.4.2 在会话对象中保存数据 76  ...

Global site tag (gtag.js) - Google Analytics