资源描述:
《servlet的两种重定向方法的区别及应用》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、servlet的两种重定向方法的区别及应用一问题: 在servlet/JSP编程学习中,发现有两种方法可以实现服务端输出重定向,一种是通过forward方法(例如JSP中的),另一种则是通过运用javax.servlet.http.HttpServletResponse接口的sendRedirect方法(例如response.sendRedirect(“OtherPage.jsp”);这两种方法有什么区别和联系呢?让我们看下面的分析。二分析:该
2、方法是利用服务器端先将数据输出到缓冲区的机制,在把缓冲区(buffer)的内容发送到客户端之前,原来的不发送,改为发送该页面的内容,如果在之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用,这一点应该特别注意.补充知识:输出缓冲区缺省情况下:服务端要输出到客户端的内容,不直接写到客户端,而是先写到一个输出缓冲区中.只有在下面三中情况下,才会把该缓冲区的内容输出到客户端上:1该JSP网页已完成信息的输出2输出缓冲区已满3JSP中调用了out.flush()或response.flus
3、hbuffer()输出缓冲区的大小可以用:<%@pagebuffer="none"
4、"nkb"%>或response.setBufferSize()设置,如下:1设置输出缓冲区的大小为1KB。<%@pagebuffer="1kb"%>或response.setBufferSize(1);2设置输出缓冲区的大小为0,即不缓冲。<%@pagebuffer="none"%>或response.setBufferSize(0);用response.getBufferSize()或out.getBufferSize()可取的输出缓冲区的大小,单位
5、为字节.用response.isCommitted()可检查看服务端是否已将数据输出到客户端.如果返回值是TRUE则已将数据输出到客户端,是FALSE则还没有。(2)response.sendRedirect(“OtherPage.jsp”)该方法通过修改HTTP协议的HEADER部分,对浏览器下达重定向指令的,让浏览器对在location中指定的URL提出请求,使浏览器显示重定向网页的内容。该方法可以接受绝对的或相对的URLs。如果传递到该方法的参数是一个相对的URL,那么Web container在将它发送到客户端前会把它转换成一个
6、绝对的URL。如果地址是相对的,没有一个’/’,那么Web container就认为它是相对于当前的请求URI的。因为这个方法是通过修改HTTP协议的HEADER实现的重定义功能,而下面的方法也能改变HTTPHEADER属性,他们的原理是一样的.<%response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);StringnewLocn="/index.html";response.setHeader("Location",newLocn);%>补充知识:HTTP应答头 Web
7、服务器响应浏览器或其他客户程序的请求时,其应答一般由以下几个部分组成:一个状态行,几个应答头,一个空行,内容文档。下面是一个最简单的应答:HTTP/1.1200OKContent-Type:text/plainHelloWorld 1设置状态信息状态行包含HTTP版本、状态代码、与状态代码对应的简短说明信息。在大多数情况下,除了Content-Type之外的所有应答头都是可选的。Servlet可以利用状态代码来实现许多功能。例如,可以把用户重定向到另一个网站,就像我们上边所看到的那个例子。下面我们就通过这个机会具体讨论各种状态代码的含义
8、以及利用这些代码可以做些什么。如前所述,HTTP应答状态行包含HTTP版本、状态代码和对应的状态信息。由于状态信息直接和状态代码相关,而HTTP版本又由服务器确定,因此需要Servlet设置的只有一个状态代码。先给出常见的HTTP1.1状态代码以及它们对应的状态信息和含义,具体的使用方法我们接下来再做详细的介绍。100Continue初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP1.1新)101SwitchingProtocols服务器将遵从客户的请求转换到另外一种协议(HTTP1.1新)200OK一切正常,对GET和P
9、OST请求的应答文档跟在后面。如果不用setStatus设置状态代码,Servlet默认使用202状态代码。201Created服务器已经创建了文档,Location头给出了它的URL。202Accepte