
已解决问题
谷歌abj778810用户在2013.01.16提交了关于“佣兵天下jsp 中怎么实现页面跳转”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-02-27T21:09:37。希望大家能够帮助她。详细问题描述及疑问:期待您的答案,希望你能感受到,我最真诚的谢意 !
详细问题描述及疑问:期待您的答案,希望你能感受到,我最真诚的谢意 !
"1.Reques
在服务器端起作用,当用forward()时,S
重定向后浏览器地址栏URL不变。
例:在servle
publi
throwsServletEx
response.set
Ser
RequestDispatcherrd=**ll;
rd=sc.getRequestDispatc
rd.forward(request,response);
}
通常在servlet中用,不在jsp中用。
2.respon
在用户的浏览器端工作,sendR
重定向后在浏览器地址栏上会出现重定向页面的URL。
例:在servlet中重定向
publicvoiddoPost(h**ttpServletRequestrequest,h**ttpServletResponseresponse)
throwsServletException,IOException{
response.setContentType("text/html;charset=gb2312");
response.sendRedirect("/index.jsp");
}
由于response是jsp页面的隐含对象,故在jsp页面中可用response.sendRedirect()直接实现重**。
注意:
(1)用response.sendRedirect时,前面不能有h**TML输出;
这并不是绝对的,不能有h**TML输出其实是指不能有h**TML被送到了浏览器。事实上目前的server都有cache机制,一般在8K(我是说JSP**RVER),这就意味着,除非你关掉了cache,或你用了out.flush()强制刷新,那么在用sendRedirect之前,有少量的h**TML输出也是允许的。
(2)response.sendRedirect之后,应当紧跟一句return。
我们已经知道response.sendRedirect是通过浏览器来做转向的,因此仅有在页面处理完成后,才会有实际的动作。既然你已经要做转向了,那么后的输出还有啥意义呢?并且有可能会由于后面的输出导致转向失败。
比较:
(1)Dispatcher.forward()是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;
(2)response.sendRedirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看见跳转后的链接地址。
前者更加高效,在前者可以满足要时,尽量用RequestDispatcher.forward()方法。
在有些情形下,例如,要跳转到1个其它服务器上的资源,则必须使h**ttpServletResponse.sendRequest()方法。
3.<jsp:forwardpage=""/>
它的底层部分是由RequestDispatcher来实现的,因此它带有RequestDispatcher.forward()方法的印记。
假如在之前有特别多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用,这一点应当特别注意。
注意:它不能改变浏览器地址,刷新的话会导致重复提交
4.修改h**TTPheader的Location属性来重定向
通过设置直接修改地址栏来实现页面的重定向。
jsp文件代码如下:
<%
response.setStatus(***.SC_MOVED_PERMANENTLY);
StringnewLocn="/newpath/jsa.jsp";
response.seth**eader("Location",newLocn);
%>
5.JSP中实目前某页面停留若干秒后,自动重定向到另一页面
在html文件中,下边的代码:
<metahttp-equiv="refresh"content="300;url=target.jsp">
它的含义:在5分钟之后正在浏览的页面将会自动变为target.html这一页。代码中300为刷新的延迟时间,以秒为单位。targer.html为你想转向的目标页,若为本页则为自动刷新本页。
由上可知,可以通过seth**eader来实现某页面停留若干秒后,自动重定向到另一页面。代码:
Stringcontent=stayTime+";URL="+URL;
response.seth**eader("REFRESh**",content);"