选择显示字体大小

jsp/servlet的重定向技术综述

  由于response是jsp页面中的隐含对象,故在jsp页面中可以用response.sendredirect()直接实现重定位。

  注意:

  (1).使用response.sendredirect时,前面不能有html输出。

  这并不是绝对的,不能有html输出其实是指不能有html被送到了浏览器。事实上现在的server都有cache机制,一般在8k(我是说jsp server),这就意味着,除非你关闭了cache,或者你使用了out.flush()强制刷新,那么在使用sendredirect之前,有少量的html输出也是允许的。

  (2).response.sendredirect之后,应该紧跟一句return;

  我们已经知道response.sendredirect是通过浏览器来做转向的,所以只有在页面处理完成后,才会有实际的动作。既然你已经要做转向了,那么后的输出还有什么意义呢?而且有可能会因为后面的输出导致转向失败。

  补充

  1.requestdispatcher.forward()

  是在服务器端起作用,当使用forward()时,servlet engine传递http请求从当前的servlet or jsp到另外一个servlet,jsp 或普通html文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此时form提交的所有信息在b.jsp都可以获得,参数自动传递.

  但forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,同时forward()无法在后面带参数传递,比如servlet?name=frank,这样不行,可以程序内通过response.setattribute("name",name)来传至下一个页面.

  重定向后浏览器地址栏url不变.

  例:在servlet中进行重定向

public void dopost(httpservletrequest request,httpservletresponse response)
throws servletexception,ioexception
{
 response.setcontenttype("text/html; charset=gb2312");
 servletcontext sc = getservletcontext();
 requestdispatcher rd = null;
 rd = sc.getrequestdispatcher("/index.jsp"); //定向的页面
 rd.forward(request, response);
}

  通常在servlet中使用,不在jsp中使用。

  2.response.sendredirect()

  是在用户的浏览器端工作,sendredirect()可以带参数传递,比如servlet?name=frank传至下个页面,同时它可以重定向至不同的主机上,sendredirect()可以重定向有frame.的jsp文件.

  重定向后在浏览器地址栏上会出现重定向页面的url

  例:在servlet中重定向

public void dopost(httpservletrequest request,httpservletresponse response)
throws servletexception,ioexception
{
 response.setcontenttype("text/html; charset=gb2312");
 response.sendredirect("/index.jsp");
}

  由于response是jsp页面中的隐含对象,故在jsp页面中可以用response.sendredirect()直接实现重定位。

  注意:

  (1).使用response.sendredirect时,前面不能有html输出

  这并不是绝对的,不能有html输出其实是指不能有html被送到了浏览器。事实上现在的server都有cache机制,一般在8k(我是说jsp server),这就意味着,除非你关闭了cache,或者你使用了out.flush()强制刷新,那么在使用sendredirect之前,有少量的html输出也是允许的。

  (2).response.sendredirect之后,应该紧跟一句return;

  我们已经知道response.sendredirect是通过浏览器来做转向的,所以只有在页面处理完成后,才会有实际的动作。既然你已经要做转向了,那么后的输出还有什么意义呢?而且有可能会因为后面的输出导致转向失败。

  比较:

  (1).request dispatcher.forward()是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;

  (2).response.sendredirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。

  前者更加高效,在前者可以满足需要时,尽量使用requestdispatcher.forward()方法.

  注:在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用httpservletresponse.sendrequest()方法。

  3.<jsp:forward page="" />

  它的底层部分是由requestdispatcher来实现的,因此它带有requestdispatcher.forward()方法的印记。

  如果在<jsp:forward>之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用,这一点应该特别注意。

  另外要注意:它不能改变浏览器地址,刷新的话会导致重复提交

  4.修改http header的location属性来重定向

  通过设置直接修改地址栏来实现页面的重定向。

  jsp文件代码如下:

<%
response.setstatus(httpservletresponse.sc_moved_permanently);
string newlocn = "/newpath/jsa.jsp";
response.setheader("location",newlocn);
%>

  5.jsp中实现在某页面停留若干秒后,自动重定向到另一页面

  在html文件中,下面的代码:

<meta http-equiv="refresh" content="300; url=target.jsp">

  它的含义:在5分钟之后正在浏览的页面将会自动变为target.html这一页。代码中300为刷新的延迟时间,以秒为单位。targer.html为你想转向的目标页,若为本页则为自动刷新本页。

  由上可知,可以通过setheader来实现某页面停留若干秒后,自动重定向到另一页面。

  关键代码:

string content=staytime+";url="+url;
response.setheader("refresh",content);

  如果总结得不够全面,请各位发表自己的意见或经验。

  


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons