- JSP 基础教程
- JSP - 主页
- JSP - 概述
- JSP - 环境设置
- JSP-架构
- JSP-生命周期
- JSP - 语法
- JSP - 指令
- JSP - 操作
- JSP - 隐式对象
- JSP - 客户请求
- JSP——服务器响应
- JSP - HTTP 状态代码
- JSP - 表单处理
- JSP - 编写过滤器
- JSP - Cookie 处理
- JSP - 会话跟踪
- JSP-文件上传
- JSP - 处理日期
- JSP - 页面重定向
- JSP - 点击计数器
- JSP - 自动刷新
- JSP - 发送电子邮件
- 高级 JSP 教程
- JSP - 标准标签库
- JSP - 数据库访问
- JSP - XML 数据
- JSP-Java Bean
- JSP - 自定义标签
- JSP——表达式语言
- JSP——异常处理
- JSP-调试
- JSP-安全性
- JSP-国际化
- JSP 有用资源
- JSP - 问题与解答
- JSP - 快速指南
- JSP - 有用的资源
- JSP - 讨论
JSP——服务器响应
在本章中,我们将讨论 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 响应标头的摘要。这些标头在网络编程中经常使用 -
编号 | 标题和描述 |
---|---|
1 | 允许 该标头指定服务器支持的请求方法(GET 、 POST等)。 |
2 | 缓存控制 该标头指定可以安全地缓存响应文档的环境。它可以具有公共、私有或无缓存等值。公共意味着文档是可缓存的,私有意味着文档是针对单个用户的并且只能存储在私有(非共享)缓存中,而无缓存意味着文档永远不应该被缓存。 |
3 | 联系 该标头指示浏览器是否使用持久 HTTP 连接。close值指示浏览器不使用持久 HTTP 连接,而keep-alive表示使用持久连接。 |
4 | 内容处置 通过此标头,您可以请求浏览器要求用户将响应保存到磁盘上给定名称的文件中。 |
5 | 内容编码 该标头指定了传输期间页面的编码方式。 |
6 | 内容语言 该标题表示编写文档所用的语言。例如,en、en-us、ru等。 |
7 | 内容长度 该标头指示响应中的字节数。仅当浏览器使用持久(保持活动)HTTP 连接时才需要此信息。 |
8 | 内容类型 此标头给出响应文档的MIME(多用途 Internet 邮件扩展)类型。 |
9 | 过期 此标头指定内容应被视为过时并因此不再被缓存的时间。 |
10 | 上一次更改 此标头指示文档上次更改的时间。然后,客户端可以缓存该文档,并在以后的请求中通过If-Modified-Since请求标头提供日期。 |
11 | 地点 此标头应包含在状态代码在 300 秒内的所有响应中。这会通知浏览器文档地址。浏览器会自动重新连接到该位置并检索新文档。 |
12 | 刷新 此标头指定浏览器应多长时间请求更新页面。您可以指定刷新页面的时间(以秒为单位)。 |
13 | 之后重试 此标头可以与503(服务不可用)响应结合使用,告诉客户端多久可以重复其请求。 |
14 | 设置Cookie 该标头指定与该页面关联的 cookie。 |
HttpServletResponse 对象
响应对象是javax.servlet.http.HttpServletResponse 对象的实例。正如服务器创建请求对象一样,它也创建一个对象来表示对客户端的响应。
响应对象还定义了处理创建新 HTTP 标头的接口。通过这个对象,JSP 程序员可以添加新的 cookie 或日期戳、HTTP 状态代码等。
以下方法可用于在 servlet 程序中设置 HTTP 响应标头。这些方法可通过HttpServletResponse对象使用。该对象代表服务器响应。
编号 | 方法及说明 |
---|---|
1 | 字符串encodeRedirectURL(字符串url) 对指定的 URL 进行编码以在sendRedirect方法中使用,或者如果不需要编码,则返回未更改的 URL。 |
2 | 字符串编码URL(字符串url) 通过在其中包含会话 ID 来对指定的 URL 进行编码,或者,如果不需要编码,则返回原样的 URL。 |
3 | 布尔包含标题(字符串名称) 返回一个布尔值,指示指定的响应标头是否已设置。 |
4 | 布尔值 isCommited() 返回一个布尔值,指示响应是否已提交。 |
5 | 无效addCookie(Cookie cookie) 将指定的 cookie 添加到响应中。 |
6 | void addDateHeader(字符串名称,长日期) 添加具有给定名称和日期值的响应标头。 |
7 | void addHeader(字符串名称,字符串值) 添加具有给定名称和值的响应标头。 |
8 | void addIntHeader(字符串名称, int 值) 添加具有给定名称和整数值的响应标头。 |
9 | 无效的flushBuffer() 强制将缓冲区中的任何内容写入客户端。 |
10 | 无效重置() 清除缓冲区中存在的所有数据以及状态代码和标头。 |
11 | 无效重置缓冲区() 清除响应中底层缓冲区的内容,而不清除标头或状态代码。 |
12 | 无效发送错误(int sc) 使用指定的状态代码向客户端发送错误响应并清除缓冲区。 |
13 | 无效sendError(int sc,字符串消息) 使用指定的状态向客户端发送错误响应。 |
14 | 无效sendRedirect(字符串位置) 使用指定的重定向位置 URL 向客户端发送临时重定向响应。 |
15 | 无效setBufferSize(int大小) 设置响应正文的首选缓冲区大小。 |
16 | 无效setCharacterEncoding(字符串字符集) 设置发送到客户端的响应的字符编码(MIME 字符集),例如,设置为 UTF-8。 |
17 号 | 无效设置内容长度(int len) 设置 HTTP servlet 中响应中内容主体的长度;此方法还设置 HTTP Content-Length 标头。 |
18 | void setContentType(字符串类型) 如果响应尚未提交,则设置发送到客户端的响应的内容类型。 |
19 | void setDateHeader(字符串名称,长日期) 设置具有给定名称和日期值的响应标头。 |
20 | void setHeader(字符串名称,字符串值) 设置具有给定名称和值的响应标头。 |
21 | void setIntHeader(字符串名称, int 值) 设置具有给定名称和整数值的响应标头。 |
22 | void setLocale(区域设置 loc) 如果响应尚未提交,则设置响应的区域设置。 |
23 | 无效 setStatus(int sc) 设置此响应的状态代码。 |
HTTP 标头响应示例
以下示例将使用setIntHeader()方法设置刷新标头以模拟数字时钟 -
<%@ 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。您将收到以下输出: -
Auto Refresh Header Example
Current Time is: 9:44:50 PM
您可以尝试以类似的方式锻炼其他方法。