重新认识 :转发与重定向 forward and Redirect
来源:互联网 发布:游戏源码论坛 编辑:程序博客网 时间:2024/05/18 03:56
/ 代表的是http://127.0.0.0/
<%response.sendRedirect();%>
<form action="/test/ServletToJSP">
<a href="/test/ServletToJSP">test</a>
/ 代表的是 http://127.0.0.1/test
this.getServletContext().getRequestDispatcher
("/servlet_jsp/ServletUseJSP.jsp").forward
(req,resp); 并且只能以 / 开头
ITeye sendRedirect和forward原理及区别总结
ITeye forward与sendRedirect区别
CSDN forward和sendRedirect的区别
HttpServletResponse.sendRedirect与RequestDispatcher.forward方法都可以实现获取相应URL资源。
sendRedirect实现请求重定向,forward实现的是请求转发。
在web服务器内部的处理机制也是不一样的。
1.forward方法只能转发给同一个web站点的资源,而sendRedirect方法还可以定位到同一个web站点的其他应用,甚至可以通过传入绝对路径定位到别的web站点,这事forward的方法所不能比拟的优势。
可以看到这两种方法的用法,如果传给RequestDispatcher 的参数以"/"开头,则访问的是当前web应用的根目录
加入当前web的根目录是myweb。如果传给sendRedirect方法以"/"开头,访问的是整个web站点的根目录。
- RequestDispatcher rd = request.getRequestDispatcher("/index.jsp");
- rd.forward(request, response);
- response.sendRedirect("/index.jsp");
2.forward重定向后,浏览器url地址不变,sendRedirect转发后,浏览器url地址变为目的url地址。
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)
----------------------------------------------------------------------------------------------------------------------------------------------
SendRedirect() 与 Forward() 区别
Respose.sendRedirect()
Request.getRequestDispacher().forward()
sendRedirece() Forward()
属于不同的请求 属于同一请求
重定向后地址栏发生变化 重定向后地址栏不变
重定向可转到本WEB程序以外 重定向只能在本WEB程序内
“/”:表示服务器根目录 “/”:web程序根目录
网路摘录:
1.sendRedirect 和forward的区别
简而言之,sendRedirect()相当于做一次客户端跳转,而forward则是服务端跳转。
sendRedirect是由浏览器来做的事情。当调用sendRedirect,服务端返回一个response,里面包含了跳转的内容,由浏览器获得后,进行跳转,我们可以看到浏览器中的URL是改变的。而forward则是在服务端直接做的事情,浏览器并不知道,这也就是为什么forward后浏览器的URL还是保持不变的原因。
2.实现页面跳转的方法
方式1: <jsp:forward>
jsp:forward 是一种JSP动作,使用语法如下:
CODESTYLE:<jsp:forward page="Relative URL">
在使用此动作时,主页不可以有任何的输出,它所起到的作用与SERVLET中使用的RequestDispatcher方法的作用是一致的.这种跳转是由服务器执行的,因此跳转的页面可以放在WEB-INF目录中,提高程序的安全性.
方式2 response.sendRedirect()
用此方法做跳转其实是向浏览器发送一个特殊的HEADER,然后又浏览器来做转向,装到指定的页面.所以用此方法时,浏览器上的地址栏里可以明显看到地址的变化.这与方式1动作不同,它是由服务器来做转向的.因此,使用sendRedirect做转向时,转向的页面不能放在WEB-INF下.
方式3 使用页面自动刷新
代码如下: CODESTYLE:<meta http-equiv="Refresh" content="秒数";url="跳转的文件或者地址">
方式4 请求转发与重定向
jsp:forword 是转发请求,所以在转发过程中,请求作用域的参数在转发页面是有效的response.sendRedirect 和页面刷新实际上都是重定向,所以请求作用域的参数在转到下一页面时回失效.
- 重新认识 :转发与重定向 forward and Redirect
- forward(转发)与redirect(重定向)
- forward转发&redirect重定向
- forward与redirect!转发和重定向 解析
- 重定向redirect与转发forward的区别
- 重定向redirect与转发forward的区别?
- forward(转发)与redirect(重定向)的区别
- forward(转发)与redirect(重定向)的区别
- forward转发和redirect重定向详解
- forward转发和redirect重定向详解
- spring forward 转发 redirect 重定向
- forward和redirect的区别,rorward,redirect,转发与重定向
- Servlet API中redirect(重定向)与forward(转发)/include(包含)的区别
- 转发/重定向/包含(forward/redirect/include)
- 转发(forward)和重定向(redirect)的区别
- 重定向(redirect)和转发(forward)区别
- Servlet中forward(请求转发)和redirect( 重定向)总结
- 转发(forward)和重定向(redirect)的对比
- Skia深入分析6——skia中图像编解码代码概述
- Java实例3 - 三角数字
- Cocos2d-x 3.0-Vector&map&value
- Java实例4 - 快速计算二进制数中1的个数(Fast Bit Counting)
- c语言基础查漏补缺
- 重新认识 :转发与重定向 forward and Redirect
- Cocos2d-x 3.0-新的Label-Cocos2d-x官方文档
- Java实例5 - 考拉兹猜想 Collatz Conjecture
- Cocos2d-x 3.0-win7+vs2012+adt+ndk环境搭建
- Python 学习经历(二) :Ubuntu 上快速安装及配置 virtualenvwrapper 虚拟环境
- 二维数组的认识及其表示元素的两种方式
- 四边形不等式优化DP
- Cocos2d-x 3.0-《微信飞机大战》实现
- Express.js实战(1)—— 项目初始化