专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Java教程 » servlet重定向:有关JSP/Servlet中的重定向技术的综述 »正文

servlet重定向:有关JSP/Servlet中的重定向技术的综述

来源: 发布时间:星期六, 2009年2月21日 浏览:0次 评论:0
1.RequestDispatcher.forward
+q_%e3M+U7bD.v是在服务器端起作用,当使用forward时,Servlet engine传递HTTP请求从当前Servlet or JSP到另外个Servlet,JSP 或普通HTML文件,也即你form提交至a.jsp,在a.jsp用到了forward重定向至b.jsp,此时form提交所有信息在b.jsp都可以获得,参数自动传递. JAVA中文站社区门户5E0? ~J9Xkp
但forward无法重定向至有framejsp文件,可以重定向至有framehtml文件,同时forward无法在后面带参数传递,比如servlet?name=frank,这样不行,可以内通过response.Attribute("name",name)来传至下个页面. JAVA中文站社区门户K'JZHj5GO
重定向后浏览器地址栏URL不变.
x@RWqkij例:在servlet中进行重定向
"eu-v,y|v]
2\ Q8z1w7i I.@;Ypublic void doPost(HttpServletRequest request,HttpServletResponse response)
'L$e/W#V#e"u @hthrows ServletException,IOException
&v0Uw1Vr8Xj{
3Hc {2JA8L rresponse.ContentType("text/html; char=gb2312");
4ec j8^&ZBw(VZServletContext sc = getServletContext;JAVA中文站社区门户bF bH%~/F'`
RequestDispatcher rd = null;JAVA中文站社区门户*ab2o H&[`TeD
rd = sc.getRequestDispatcher("/index.jsp"); //定向页面
'jj9uSA*f"R4xwrd.forward(request, response);
:jk dB4[~z^o}
7g6Cs+v%R q\
m5z:m^ { iVj通常在servlet中使用不在jsp中使用 JAVA中文站社区门户k8`PG.I}
2.response.sendRedirect JAVA中文站社区门户 }z{^pm$I#_I
是在用户浏览器端工作,sendRedirect可以带参数传递,比如servlet?name=frank传至下个页面,同时它可以重定向至区别主机上,sendRedirect可以重定向有frame.jsp文件. JAVA中文站社区门户HN^9RW#gj
重定向后在浏览器地址栏上会出现重定向页面URL JAVA中文站社区门户4VK:cfM9fGp\ W#l"Q
例:在servlet中重定向 JAVA中文站社区门户Z!{P2l@x{4f6}
JAVA中文站社区门户/W"uV S c
public void doPost(HttpServletRequest request,HttpServletResponse response)
y$ma;tvOthrows ServletException,IOException
U.y*w9Q/I{
K'L"VM0M.Qresponse.ContentType("text/html; char=gb2312");JAVA中文站社区门户U9b&V3Yf8P,V
response.sendRedirect("/index.jsp");
)v @+Kso M_}
;hJ I6eVvc-BJAVA中文站社区门户X&RQv/\3[%v
由于response是jsp页面中隐含对象故在jsp页面中可以用response.sendRedirect直接实现重定位 JAVA中文站社区门户#G kJ^| a\.Y
注意: JAVA中文站社区门户 a"H%A _z Cb
(1).使用response.sendRedirect时前面不能有HTML输出
2j9E g@ P*}.V这并不是绝对不能有HTML输出其实是指不能有HTML被送到了浏览器事实上现在server都有cache机制般在8K(我是说JSP SERVER)这就意味着除非你关闭了cache或者你使用了out.flush强制刷新那么在使用sendRedirect的前有少量HTML输出也是允许 JAVA中文站社区门户7z9ve QJi
(2).response.sendRedirect的后应该紧跟;
+p%g7}VO我们已经知道response.sendRedirect是通过浏览器来做转向所以只有在页面处理完成后才会有实际动作既然你已经要做转向了那么后输出还有什么意义呢?而且有可能会后面输出导致转向失败 JAVA中文站社区门户"OHw]Q(JC
比较: JAVA中文站社区门户1mjO/Z4{g0t
(1).Request Dispatcher.forward是容器中控制权转向在客户端浏览器地址栏中不会显示出转向后地址;
B{za-d,MLK(~2i'e(2).response.sendRedirect则是完全跳转浏览器将会得到跳转地址并重新发送请求链接这样从浏览器地址栏中可以看到跳转后链接地址 JAVA中文站社区门户1W9_g i4Q])G
前者更加高效在前者可以满足需要时尽量使用RequestDispatcher.forward思路方法. JAVA中文站社区门户5[v&aK3b-] CK
注:在有些情况下比如需要跳转到个其它服务器上资源则必须使用HttpServletResponse.sendRequest思路方法 JAVA中文站社区门户A X3I:z2@6m
3. JAVA中文站社区门户]Qa L'Yb@

q&| [^ SuS<jsp:forward page="" />JAVA中文站社区门户(g@u v)R d}r
JAVA中文站社区门户j BxU6c
底层部分是由RequestDispatcher来实现因此它带有RequestDispatcher.forward思路方法印记 JAVA中文站社区门户 _H6K9t |6gw&~
如果在 jsp:forward 的前有很多输出,前面输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用,这点应该特别注意
/]{_Dan7dL另外要注意:它不能改变浏览器地址刷新话会导致重复提交
`*u\ pc.OU4.修改HTTP headerLocation属性来重定向
i{C;V&j!r MN通过设置直接修改地址栏来实现页面重定向 JAVA中文站社区门户|-[5[1kP)]#l
jsp文件代码如下: JAVA中文站社区门户%c)I-sC$X8^u

q}/V&hK;fT<%
,}#VLqQlUdW|z(M5@response.Status(HttpServletResponse.SC_MOVED_PERMANENTLY);
A vi_1jString Locn = "/path/jsa.jsp";JAVA中文站社区门户-Te1~/A)y,K }@
response.Header("Location",Locn);
S? |7KZ1w5s%>JAVA中文站社区门户kQYEV

9o:La @ Uo)\%X5.JSP中实现在某页面停留若干秒后,自动重定向到另页面
6NE1Jw A-i;]+~!X[H在html文件中下面代码: JAVA中文站社区门户"k0a K:v{"M&r)mL:o"D

6J#x)k,{/J<meta http-equiv="refresh" c>JAVA中文站社区门户Y KF(_)@U$a
JAVA中文站社区门户dBLd0h3\g
含义:在5分钟的后正在浏览页面将会自动变为target.html这代码中300为刷新延迟时间以秒为单位targer.html为你想转向目标页,若为本页则为自动刷新本页 JAVA中文站社区门户9^B;RW"P{c#cEK$dJ
由上可知可以通过Header来实现某页面停留若干秒后,自动重定向到另页面 JAVA中文站社区门户+`)c]3g)T_*SK S
关键代码: JAVA中文站社区门户A:g/N x_+yy#~d
String content=stayTime+";URL="+URL; JAVA中文站社区门户;|cR3e1~
response.Header("REFRESH",content);

TAG: JSP Jsp Servlet 技术
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: