JSP - 服务器响应( Server Response)
在本章中,我们将讨论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 in the example) ,状态代码(200 in the example) ,以及与状态代码对应的非常短的消息(OK in the example) 。
以下是从Web服务器返回浏览器的最有用的HTTP 1.1响应标头的摘要。 这些标题经常用于Web编程 -
S.No. | 标题和说明 |
---|---|
1 | Allow 此标头指定服务器支持的请求方法( GET, POST等)。 |
2 | Cache-Control 此标头指定可以安全地缓存响应文档的环境。 它可以具有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 ( Multipurpose Internet Mail Extension )类型。 |
9 | Expires 此标头指定内容应被视为过期的时间,因此不再被缓存。 |
10 | Last-Modified 此标头指示文档上次更改的时间。 然后,客户端可以缓存文档,并在以后的请求中通过If-Modified-Since请求标头提供日期。 |
11 | Location 此标头应包含在状态代码为300s的所有响应中。 这会通知浏览器文档地址。 浏览器会自动重新连接到此位置并检索新文档。 |
12 | Refresh 此标头指定浏览器应该多久要求更新的页面。 您可以指定刷新页面的时间(以秒为单位)。 |
13 | Retry-After 此标头可与503 (Service Unavailable)响应结合使用,以告知客户端可以多快重复其请求。 |
14 | Set-Cookie 此标头指定与页面关联的cookie。 |
HttpServletResponse对象
响应对象是javax.servlet.http.HttpServletResponse object一个实例。 就像服务器创建请求对象一样,它也会创建一个对象来表示对客户端的响应。
响应对象还定义了处理创建新HTTP标头的接口。 通过这个对象,JSP程序员可以添加新的cookie或日期戳,HTTP状态代码等。
可以使用以下方法在servlet程序中设置HTTP响应头。 这些方法可用于HttpServletResponse对象。 此对象表示服务器响应。
S.No. | 方法和描述 |
---|---|
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。 |
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标头响应示例
以下示例将使用setIntHeader()方法设置Refresh标头以模拟数字时钟 -
<%@ page import = "java.io.*,java.util.*" %>
<html>
<head>
<title>Auto Refresh Header Example</title>
</head>
<body>
<center>
<h2>Auto Refresh Header Example</h2>
<%
// Set refresh, autoload time as 5 seconds
response.setIntHeader("Refresh", 5);
// 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");
%>
</center>
</body>
</html>
现在将上面的代码放在main.jsp并尝试访问它。 这将显示每5秒后的当前系统时间,如下所示。 运行JSP。 您将收到以下输出: -
<center>
<h2 align="center">Auto Refresh Header Example</h2>
Current Time is: 9:44:50 PM
</center>
您可以尝试以类似的方式研究其他方法。