查了一下API,
forward:
有两个接口带有RequestDispatcher getRequestDispatcher(String path)方法
javax.servlet.ServletContext.getRequestDispatcher(String path)
javax.servlet.ServletRequest.getRequestDispatcher(String path)
javax.servlet.RequestDispatcher有两个方法:
void include(ServletRequest request, ServletResponse response)
其中这里的path必须开始为"/",即这里的path必须相对于context的root.
void forward(ServletRequest request, ServletResponse response)
这里的path可以为相对路径,如果path开始为"/",则也认为是从context的root开始的
redirect
javax.servlet.http.HttpServletResponse.sendRedirect(String location)
Sends a temporary redirect response to the client using the specified redirect location URL.
区别:
1、forward与include访问获取Request范围内的对象,而sendRedirect只能获取URL后面带的参数,不能获取Request范围其它的对象(例如bean),因为forward是这样传递参数的:
<jsp:useBean id="ub" class="UserBean" scope="request"/>
<jsp:setProperty name="ub" property="UserName" value="sa"/>
<jsp:setProperty name="ub" property="Password" value="123"/>
<jsp:forward page="index.jsp">
</jsp:forward>
当然,如果Bean的作用域是Session的话,用sendRedirect也能取到的。
2、forward与include只能访问应用(站点)内的资源,而sendRedirect可以访问内部和外部的资源;貌似forward与include比sendRedirect更安全一些;
3、forward到下一个页面时,客户端不清楚,保留原来的request;而使用sendRedirect时,客户端要再发送一个request来,这样sendRedirect会导致服务器端要处理两个request,效率有点差;但如果是表单提交,完成之后使用forward,就会导致页面内容虽然变了,但浏览器上地址栏地址没有变,再一刷新的话,会有重复的数据产生;
综上:
1、需要使用上一个页面的request的时候,使用forward比较好;而一个业务处理完成,那么使用sendRedirect比较好;
2、当两个页面之间没什么关系,或者需要降低耦合的时候,建议使用sendRedirect,还有就是sendRedirect能够防止刷新和方便用户将页面加入收藏夹,这也是为什么sendRedirect比较流行使用的原因
3、每个方法都有其适用的范围和环境,需求不同时应该使用不同的方法。
分享到:
相关推荐
1、forward与include共亨Request范围内的对象,而redirect则不行,即:如果一个javabean被声明为request范围的话,则被forward到的资源也可以访问这个javabean,而redriect则不行。2、forward与include基本上都是转发...
2.jsp有哪些动作 3.forward 和redirect的区别 4.JSP中动态INCLUDE与静态INCLUDE的区别 5.两种跳转方式分别是什么 6.J
1、jsp有哪些内置对象?作用分别是什么? 2、jsp有哪些动作?作用分别是什么?...7、JAVA SERVLET API中forward() 与redirect()的区别? 8、Servlet的基本架构 。。。。。。。。。。。。。。。。。。。。。。
JavaWeb重点叙述里包括 jsp部分 servlet的生命周期 简述forward和redirect的区别 理解jsp的运行原理 jsp include指令和include动作的区别 创建servlet的步骤 了解Tomcat jsp的九个内置对象和四大作用域等
30、<c:redirect> 的用法 31、单选型列表框 32、jsp文件中定义类 3 3、取得 JSP Container 版本 34、javax.servlet.jsp.JspWriter - out 对象 35、page 隐含对象 36、application 对象 37、PageContext 对象 38、...
30、<c:redirect> 的用法 31、单选型列表框 32、jsp文件中定义类 33、取得 JSP Container 版本 34、javax.servlet.jsp.JspWriter - out 对象 35、page 隐含对象 36、application 对象 37、PageContext 对象 38、Page...
forward和redirect的区别? 答:forward是转发,浏览器跳转后不显示新的地址。 redirect是重定向,浏览器跳转后显示新的地址。 对比之下forward更加高效,并且它有助于隐藏实际地址,但是有些情况则必须使用...
<include name="**/*.java" /> ${conf.struts}"> ${src}" includes="**/*.java" /> ${conf.struts}" mergeDir="${conf-merge.struts}" /> 像@hibernate.clas、@hibernate....
187、JAVA SERVLET API中forward() 与redirect()的区别? 44 189、Can a Java Thread be started from Servlet class, and what will be the implications? 45 190、What is ...
187、JAVA SERVLET API中forward() 与redirect()的区别? 44 189、Can a Java Thread be started from Servlet class, and what will be the implications? 45 190、What is ...
22、forward 和redirect的区别 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址...
19、forward 和redirect的区别 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏...
10、servlet中怎么定义forward 和redirect 35 11、过滤器有哪些作用? 35 12、JSP的常用指令? 35 13、JSP和Servlet中的请求转发分别如何实现? 35 14、JSP乱码如何解决? 36 15、session 和 application的区别? 36...
6、SERVLET API中forward() 与redirect()的区别? 86 7、什么情况下调用doGet()和doPost()? 86 8、Request对象的主要方法: 87 9、forward 和redirect的区别 87 10、request.getAttribute() 和 request....
6、SERVLET API中forward() 与redirect()的区别? 86 7、什么情况下调用doGet()和doPost()? 86 8、Request对象的主要方法: 87 9、forward 和redirect的区别 87 10、request.getAttribute() 和 request....
6、SERVLET API中forward() 与redirect()的区别? 86 7、什么情况下调用doGet()和doPost()? 8、Request对象的主要方法: 87 9、forward 和redirect的区别 10、request.getAttribute() 和 request.getParameter() ...
6、SERVLET API中forward() 与redirect()的区别? 86 7、什么情况下调用doGet()和doPost()? 86 8、Request对象的主要方法: 87 9、forward 和redirect的区别 87 10、request.getAttribute() 和 request....