JSP 客户端请求
JSP 操作使用 XML 语法中的构造来控制 servlet 引擎的行为。我们将更详细地了解各种 JSP 操作元素,例如客户端请求、服务器响应、HTTP 状态码。
JSP 客户端请求
- 当请求网页时,它会将信息通过 HTTP 标头发送到 Web 服务器。
- 我们可以使用 HTTPServletRequest 对象来使用此信息。
- 浏览器发送的信息存储在 HTTP 请求的请求标头中。
- 我们使用不同的标头将信息发送到请求对象。
JSP 中的标头
JSP 中的不同标头描述如下
标头 | 描述 | 示例 |
---|---|---|
Accept | 它指定浏览器或其他客户端可以处理的 MIME 类型 | Image/png 或 image/jpeg |
Accept-charset | 它使用浏览器显示的字符集来显示信息 | ISO-8859-1 |
Accept-Encoding | 它指定浏览器处理的编码类型 | Gzip 或 compress |
Accept-language | 它指定客户端指定的语言 | En,en_us |
授权 | 客户端尝试访问密码保护网页时使用的标头 | |
连接 | 它指示客户端是否可以处理持久 HTTP 连接(浏览器可以检索多个文件) | Keep-alive |
Content-length | 适用于 POST 请求。它以字节为单位给出 POST 数据的大小 | |
Cookie | 将 Cookie 返回到服务器(之前发送给浏览器的 Cookie) | |
Host | 指定原始 URL 的主机和端口 | |
If modified since | 它表示仅当页面已更改或修改时才需要该页面 | |
If unmodified since | 它表示仅当页面未更改或修改时才需要该页面 | |
Referrer | 指示引用 URL 页面的 URL | |
User-agent | 标识发出请求的浏览器或客户端 |
JSP 中的 HTTP 标头方法
以下方法用于读取 JSP 页面中的 HTTP 标头
- Cookie[] getCookies() – 返回一个包含客户端发送的 Cookie 对象的数组
- Enumeration getAttributeNames() – 包含请求属性名称的枚举
- Enumeration getHeaderNames() – 包含标头名称的枚举。
- Enumeration getParameterNames() – 包含请求中获取参数名称的枚举。
- HttpSessiongetSession() – 返回与请求关联的当前会话,如果不存在会话,则创建一个新会话。
- Locale getLocale() – 返回客户端接受内容的首选区域设置。已分配给响应。默认情况下,值将是服务器的默认区域设置。
- Object getAttribute(String name) – 以对象形式返回命名属性的值。
- ServletInputStream getInputStream() – 以二进制数据形式检索请求正文。
- String getAuthType() – 返回用于保护 servlet 的身份验证方案的名称
- String getCharacterEncoding() – 返回请求正文中使用的字符编码的名称。
- String getContentType() – 返回请求正文的 MIME 类型。
- String getContextPath() – 返回指示 URI 上下文路径的请求 URI 的部分
- String getHeader(String name) – 以字符串形式返回请求标头
- String getMethod() – 返回 HTTP 方法的名称,例如 GET、POST
- String getParameter(String name) – 以字符串形式返回请求的参数。
- String getPathInfo() – 返回与 URL 关联的路径信息
- String getQueryString() – 返回与请求 URL 关联的查询字符串
- String getServletPath() – 返回调用 JSP 的请求的 URL 的一部分
- String[] getParameterValues(String name) – 返回一个包含请求参数值的字符串对象数组
示例
在下面的示例中,我们使用了请求对象的不同方法
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ 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=ISO-8859-1"> <title>Client Request Guru JSP</title> </head> <body> <h2>Client Request Guru JSP</h2> <table border="1"> <tr> <th>guru header</th><th>guru header Value(s)</th> </tr> <% HttpSession gurusession = request.getSession(); out.print("<tr><td>Session Name is </td><td>" +gurusession+ "</td.></tr>"); Locale gurulocale = request.getLocale (); out.print("<tr><td>Locale Name is</td><td>" +gurulocale + "</td></tr>"); String path = request.getPathInfo(); out.print("<tr><td>Path Name is</td><td>" +path+ "</td></tr>"); String lpath = request.get(); out.print("<tr><td>Context path is</td><td>" +lipath + "</td></tr>"); String servername = request.getServerName(); out.print("<tr><td>Server Name is </td><td>" +servername+ "</td></tr>"); int portname = request.getServerPort(); out.print("<tr><td>Server Port is </td><td>" +portname+ "</td></tr>"); Enumeration hnames = request.getHeaderNames(); while(hnames.hasMoreElements()) { String paramName = (String)hnames.nextElement(); out.print ("<tr><td>" + paramName + "</td>" ); String paramValue = request.getHeader(paramName); out.println("<td> " + paramValue + "</td></tr>"); } %>
代码解释
代码行 17:使用请求对象,我们获取该特定会话的会话对象,并获取该会话的对象值
代码行 19:使用请求对象,我们获取该特定会话的区域设置,即该 JSP 的 en_US 区域设置。
代码行 21:使用请求对象,我们获取该 JSP 的路径信息。在此情况下,它是 null,因为 URL 中没有提及路径。
代码行 23:使用请求对象,我们获取上下文路径,即根路径
代码行 25:使用请求对象,我们获取服务器名称。
代码行 27:使用请求对象,我们获取服务器端口。
代码行 29-35:使用请求对象,我们获取标头名称,它们会作为枚举返回,因此我们可以在标头名称中获取所有标头值。
在此,我们获取所有标头值,如 Cookie、host、connection、accept language、accept encoding。
当您执行上述代码时,您会得到以下输出
输出:
我们获取一系列值,如会话名称、区域设置名称、路径名称、服务器名称、端口名称、主机、上下文路径以及该 JSP 的所有标头值。
JSP 服务器响应
- 当处理请求然后由 Web 服务器生成响应时。它包含状态行、响应标头、一个空行和文档。
- 它是 HTTPServletResponse 类的对象,这是一个响应对象。
- 状态行是 HTML 的版本。
JSP 中的响应标头
JSP 中的响应标头如下
标头 | 描述 |
---|---|
Allow | 它指定服务器请求的请求方法,如 GET、POST |
Cache-control | 响应文档可以被缓存。它可以是 public、private 和 no cache。No cache 指定不应缓存文档 |
连接 | 它指示浏览器是否应使用保存的 HTTP 连接。Close 值表示浏览器不应在 HTTP 连接中使用持久连接,而 “keep-alive” 意味着使用持久连接 |
Content-disposition | 询问用户是否将响应保存到磁盘 |
Content-encoding | 页面在传输过程中需要编码 |
Content-length | 响应中的字节数 |
Content type | 它指定响应的 MIME 类型 |
Expires | 指定内容应在何时被视为过期且不应缓存 |
Last modified | 它指示文档最后修改的时间 |
地点 | 它应包含在所有状态代码为 300 的响应中 |
Refresh | 它指定如何查找更新的页面。 |
Retry-after | 它可以与 503 响应一起使用,告知客户端可以何时重复请求 |
Set-cookie | 指定与页面关联的 Cookie |
JSP 中的 HTTP 响应标头方法
以下是 JSP 中使用响应对象的方法
- String encodeRedirectURL(String URL) – 对 redirectURL 方法中的 URL 进行编码。
- String encodeURL(String URL) – 通过包含会话 ID 来编码 URL。
- Boolean containsHeader(String name) – 它在 JSP 中是否包含一个标头。
- Boolean isCommited() – 响应是否已提交。
- Void addCookie(Cookie cookie) – 将 cookie 添加到响应
- Void addDateHeader(String name, String value) – 添加响应标头日期名称和值
- Void addHeader(String name, String value) – 添加带名称和值的响应标头
- Void addIntHeader(String name,int value) – 添加带名称和整数值的响应标头
- Void flushBuffer() – 将缓冲区中的内容强制输出到客户端。
- Void reset() – 清除缓冲区中的数据。
- Void resetBuffer – 清除响应中的内容缓冲区,而不清除状态码。
- Void sendError(intsc,Stringmsg) – 使用状态码向客户端发送错误响应。
- Void sendRedirect(String location) – 向客户端发送临时重定向响应。
- Void setBufferSize(int size) – 设置正文的缓冲区大小
- Void setCharacterEncoding(String charset) – 设置字符编码
- Void setContentType(String type) – 设置响应的内容类型
- Void setContentLength(intlen) – 设置响应的内容长度
- Void setLocale(Locale lcl) – 设置响应的区域设置类型
- Void setStatus(intsc) – 设置响应的状态码
示例
在此示例中,我们涵盖了不同的方法 getLocale、flushbuffer、getWriter、getContentType、setIntHeader。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ 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=ISO-8859-1"> <title>Guru Action Response</title> </head> <body> <center> <h2>Guru Response</h2> <% Locale lcl = response.getLocale(); out.println("Locale is : " + lcl + "\n"); response.flushBuffer(); PrintWriter output = response.getWriter(); output.println("This is from writer object"); String type = response.getContentType(); out.println("The content type : " + type + "\n"); // Set refresh,autoload time as 5 seconds response.setIntHeader("Refresh", 5); //Get current time Date dt = new Date(); out.println("Today's date is : " +dt.toString() + "\n"); %> </center> </body> </html>
代码解释
代码行 13:使用响应对象,我们获取此 JSP 会话的区域设置对象
代码行 15:使用响应对象,flushbuffer 用于将缓冲区内容强制推送到客户端
代码行 16:使用响应对象,我们获取 writer 对象,该对象将输出写入输出流
代码行 18:使用响应对象,我们获取响应对象的 content type,即 MIME 类型
代码行 21:使用响应对象,它用于每 5 秒自动加载一次,因为 5 被设置为第二个参数
当您执行上述代码时,您会得到以下输出
输出
- 在这里,我们得到输出,因为这是来自 getWriter 的 writer 对象,它为我们提供了对象,我们可以在输出流中输出。
- 我们得到区域设置为 en_us,内容类型为 text/html
- 我们得到字符集为 ISO 8859
- 今天的日期作为当前日期。
JSP HTTP 状态码
- 当处理请求时,响应会被生成。响应状态行包含 HTTP 版本、状态码和关联的消息。
- 消息直接与状态码和 HTTP 版本相关联,并由服务器确定。
- 默认情况下,JSP 中将 200 设置为状态码,因此我们无需显式设置。
- 我们可以使用 response.setStatus() 方法进行设置
代码分为以下 5 类
- 100-199 – 这里客户端表示应响应某些操作
- 200-299 – 表示请求成功
- 300-399 – 用于已移动的文件,通常包含指示新地址的 location 标头
- 400-499 – 表示客户端错误
- 500-599 – 表示服务器错误
一些常见的状态码如下
- 200 – 表示一切正常
- 301 – 已永久移动
- 304 – 自上次更改以来未修改
- 400 – 错误请求
- 404 – 未找到
- 405 – 未找到方法
- 500 – 内部服务器错误
- 503 – 服务不可用
- 505 – 不支持 HTTP 版本
JSP 中的 HTTP 状态码方法
以下是 JSP 中的一些状态码方法
- Public void setStatus(intstatusCode): 它设置我们想在该 JSP 页面中设置的状态码。这将为我们提供已设置状态码的消息
- Public void sendRedirect(String URL): 它生成 302 响应以及 location 标头,提供新文档的 URL
- Public void sendError(intcode,Stringmsg): 它发送状态码以及简短消息,并将其格式化在 HTML 文档中。
示例
在此示例中,我们显式发送错误到 JSP 页面。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!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=ISO-8859-1"> <title>Guru Status Code</title> </head> <body> <% response.sendError(404,"Guru Page Not Found"); %> </body> </html>
代码解释
代码行 10:使用响应对象,我们向页面发送错误,包含两个参数。
- 状态码 – 它可以是以上任何一个。在此情况下,我们描述为 404
- 消息 – 它可以是我们想要显示的任何特定错误消息
如果执行上述代码,您将获得以下输出
输出
在这里,我们得到错误代码 404,这是从代码发送的,并且还在输出中显示了“Guru 页面未找到”消息。
摘要
- 在本文中,我们学习了客户端请求和服务器响应,了解了请求是如何被拦截的以及响应是如何被处理的。
- JSP 操作使用 XML 语法中的构造来控制 servlet 引擎的行为。
- 当请求网页时,它会将信息通过 HTTP 标头发送到 Web 服务器。
- 当处理请求然后由 Web 服务器生成响应时。它包含状态行、响应标头、一个空行和文档。
- 当处理请求时,响应会被生成。响应状态行包含 HTTP 版本、状态码和关联的消息。