sendRedirect() 和forward()的区别

HttpServletResponse.sendRedirect与RequestDispatcher.forward方法都可以实现获取相应URL资源。
 
sendRedirect实现请求重定向,forward实现的是请求转发。
 
在web服务器内部的处理机制也是不一样的。
 
 
 
1. 跳转方式 
 运用forward方法只能重定向到同一个Web应用程序中的一个资源。而sendRedirect方法可以让你重定向到任何URL。  
 表单form的action= "/uu ";sendRedirect( "/uu ");表示相对于服务器根路径。
 如http://localhost:8080/Test应用(则提交至http://localhost:8080/uu);  
 Forward代码中的 "/uu "则代表相对与WEB应用的路径。如http://localhost:8080/Test应用(则提交至http://localhost:8080/Test/uu);
 
 
 
2.forward重定向后,浏览器url地址不变,sendRedirect转发后,浏览器url地址变为目的url地址。
forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件, 同时forward()无法在后面带参数传递,
比如servlet?name=frank,这样不行,可以程序内通过response.setAttribute( "name ",name)来传至下一个页面. 
 
 
 
3. 使用forward重定向的过程,是浏览器先向目的Servlet发送一次Request请求,然后在服务器端由Servlet再将请求发送到目的url,再由服务器端Servlet返回Response到浏览器端。浏览器和服务器一次请求响应。
 
使用sendRedirect转发的过程,浏览器先向目的Servlet发送一次请求,Servlet看到sendRedirect将目的url返回到浏览器,浏览器再去请求目的url,目的url再返回response到浏览器。浏览器和服务器两次请求响应。
 
 
 
4. forward方法的调用者与被调用者之间共享Request和Response
 
sendRedirect方法由于两次浏览器服务器请求,所以有两个Request和Response。
 
如果使用request.setAttribute传递一些属性就需要用forward,如果想要跳转到别的应用的资源,就需要用sendRedirect。
 
 
 
5.无论是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)

最新文章

  1. web前后端框架整理
  2. WinCE下读取注册表获得SD路径
  3. [linux] is not in the sudoers file
  4. Odoo 仓库调拨移动过程中 单位不允许错误的分析及解决方案
  5. cocos2d 艺术标签没有显示
  6. 【超详细教程】使用Windows Live Writer 2012和Office Word 2013 发布
  7. windows下配置lamp环境(5)---配置MySQL5.6
  8. PowerManager.WakeLock
  9. PhysicsBasedAnimation学习记录
  10. bind9的一些配置
  11. jquery自定义进度条与h5原生进度条
  12. SignalR第一节-在5分钟内完成通信连接和消息发送
  13. 在Linux上部署Web项目
  14. python批量提取eml附件
  15. jdk1.8新特性总结
  16. Python-常见面试题-持续更新
  17. 使用mpvue开发小程序
  18. 涂抹mysql笔记-mysql字符集
  19. 主机性能监控之wmi 获取系统信息及内存性能信息
  20. html5-相对定位

热门文章

  1. CF848A From Y to Y
  2. LDA主题模型(理解篇)
  3. (转) 淘淘商城系列——Redis的安装
  4. jmeter 常见问题一(url重定向)
  5. vue城市三级联动组件 vue-area-linkage
  6. [转载] Linux Futex的设计与实现
  7. C#读取文件-古文观止(总结一下)
  8. DBDA
  9. css--小白入门篇2
  10. linux网络编程——域名转换 gethostbyname与gethostbyaddr