在本章中,我们将讨论jsp中的服务器响应。当web服务器响应http请求时,响应通常由状态行,一些响应头,空行和文档组成。典型的响应看起来如下 -
http/1.1 200 ok content-type: text/html header2: ... ... headern: ... (blank line) <!doctype ...> <html> <head>...</head> <body> ... </body> </html>
状态行由http版本(示例中为http/1.1),状态码(示例中为200)和与状态代码相对应的非常短的消息(示例中为“ok”)组成。
以下是从web服务器返回浏览器的最有用的http 1.1响应头的摘要。 这些头文件经常用于web编程 -
1 | allow | 此响应头指定服务器支持的请求方法(get,post等)。 |
2 | cache-control | 此响应头指定响应文档可以安全地缓存的情况。它的值可以是public,private或no-cache等等。public则表示文档是可缓存的,private则表示文档是针对单个用户,只能存储在私有(非共享)缓存中,而no-cache则表示文档不应该被缓存。 |
3 | connection | 此响应头指示浏览器是否使用持久http连接。close值指示浏览器不使用持久http连接,而keep-alive表示使用持久连接。 |
4 | content-disposition | 此响应头允许请求浏览器要求用户将响应保存到给定名称的文件中。 |
5 | content-encoding | 此响应头指定在传输期间页面被编码的方式。 |
6 | content-language | 此响应头表示文档写入的语言。例如,en,en-us,ru等 |
7 | content-length | 此响应头指示响应中的字节数。仅当浏览器使用持久(保持活动)http连接时,才需要此信息。 |
8 | content-type | 此响应头给出响应文档的mime(多用途internet邮件扩展)类型。 |
9 | expires | 此响应头指定内容应被视为过期的时间,因此不再被缓存。 |
10 | last-modified | 此响应头指示文档何时上次更改。客户端可以缓存文档,并在稍后的请求中通过if-modified-since请求头提供日期。 |
11 | location | 此响应头应该在300s内包含在状态代码的所有响应中。它通知浏览器文档地址。 浏览器自动重新连接到此位置并检索新文档。 |
12 | refresh | 此响应头指定浏览器应该要求更新页面的时间。可以指定时间,之后它将指定秒数刷新页面。 |
13 | retry-after | 此响应头可以与503(服务不可用)响应一起使用,以便告诉客户端可以多久重复其请求。 |
14 | set-cookie | 此响应头指定与该页面相关联的cookie。 |
httpservletresponse对象
response对象是javax.servlet.http.httpservletresponse对象的一个实例。就像服务器创建请求对象一样,它还创建一个对象来表示对客户端的响应。
response对象还定义了处理创建新http头的接口。通过此对象,jsp程序员可以添加新的cookie或日期戳,http状态代码等。
可以使用以下方法在servlet程序中设置http响应头。这些方法可用于httpservletresponse对象。此对象表示服务器响应。
1 | string encoderedirecturl(string url) | 对指定的url进行编码,以在sendredirect()方法中使用,或者如果不需要编码,则返回url。 |
2 | string encodeurl(string url) | 通过在其中包含会话id来对指定的url进行编码,或者如果不需要编码,则不会更改url。 |
3 | boolean containsheader(string name) | 返回一个布尔值,表示是否已经设置了命名的响应头。 |
4 | boolean iscommitted() | 返回一个布尔值,表示响应是否已提交。 |
5 | void addcookie(cookie cookie) | 将指定的cookie添加到响应。 |
6 | void adddateheader(string name, long date) | 添加具有给定名称和日期值的响应头。 |
7 | void addheader(string name, string value) | 添加具有给定名称和值的响应头。 |
8 | void addintheader(string name, int value) | 添加具有给定名称和整数值的响应头。 |
9 | void flushbuffer() | 强制将缓冲区中的所有内容写入客户端。 |
10 | void reset() | 清除缓冲区中存在的所有数据以及状态代码和标头。 |
11 | void resetbuffer() | 在响应中清除底层缓冲区的内容,而不清除标头或状态代码。 |
12 | void senderror(int sc) | 使用指定的状态代码向客户端发送错误响应并清除缓冲区。 |
13 | void senderror(int sc, string msg) | 使用指定的状态向客户端发送错误响应。 |
14 | void sendredirect(string location) | 使用指定的重定向位置url向客户端发送临时重定向响应。 |
15 | void setbuffersize(int size) | 设置响应正文的首选缓冲区大小。 |
16 | void setcharacterencoding(string charset) | 设置发送给客户端的响应的字符编码(mime字符集),例如:utf-8,gb2312。 |
17 | void setcontentlength(int len) | 设置响应中内容正文的长度在http servlet中; 此方法还可以设置http content-length头。 |
18 | void setcontenttype(string type) | 如果尚未提交响应,请设置要发送给客户端的响应的内容类型。 |
19 | void setdateheader(string name, long date) | 设置具有给定名称和日期值的响应头。 |
20 | void setheader(string name, string value) | 设置具有给定名称和值的响应头。 |
21 | void setintheader(string name, int value) | 设置具有给定名称和整数值的响应头。 |
22 | void setlocale(locale loc) | 如果响应尚未提交,则设置响应的区域设置。 |
23 | void setstatus(int sc) | 设置此响应的状态代码。 |
http头响应示例
打开eclipse创建一个动态web项目:serverresponse,其项目结构如下所示 -
以下示例将使用setintheader()方法设置refresh头来模拟数字时钟,请参考以下代码实现。
文件:index.jsp -
<%@ page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8"%> <%@ page import = "java.io.*,java.util.*" %> <!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>服务器响应示例</title> </head> <body> <div style="margin: auto; width: 80%;"> <h2>自动刷新http标头示例</h2> <% // set refresh, autoload time as 5 seconds response.setintheader("refresh", 3); // get current time calendar calendar = new gregoriancalendar(); string am_pm; int hour = calendar.get(calendar.hour); int minute = calendar.get(calendar.minute); int second = calendar.get(calendar.second); if (calendar.get(calendar.am_pm) == 0) am_pm = "am"; else am_pm = "pm"; string ct = hour + ":" + minute + ":" + second + " " + am_pm; out.println("current time is: " + ct + "n"); %> </div> </body> </html>
在上面代码编写完成后,部署这个web项目,打开浏览器访问url: http://localhost:8080/serverresponse/ , 每3秒钟显示当前系统时间,如下所示 -
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!