JSP 客户端请求
JSP 操作使用 XML 语法构造来控制 servlet 引擎的行为。我们将详细了解各种 JSP 操作元素,如客户端请求、服务器响应、HTTP 状态代码。
JSP 客户端请求
- 当请求网页时,它会在 HTTP 标头中将信息发送到 Web 服务器。
- 我们可以使用 HTTPServletRequest 对象使用此信息。
- 浏览器发送的信息保存在HTTP请求的请求头中。
- 我们使用不同的标题向请求对象发送信息。
JSP 中的标头
JSP 中的不同标头如下所述:
标题 | 描述 | 例如: |
---|---|---|
接受 | 它指定浏览器或其他客户端可以处理的 MIME 类型 | Image/png 或 image/jpeg |
接受字符集 | 它使用浏览器使用的字符集来显示信息 | ISO 8859 1 |
接受编码 | 它指定浏览器处理的编码类型 | Gzip 或者压缩 |
接受语言 | 它指定客户指定的语言 | En,en_us |
授权 | 客户端尝试访问受密码保护的网页时使用的标头 | |
连接升级包 | 它表明客户端是否可以处理持久的 HTTP 连接(浏览器可以检索多个文件) | 活着 |
内容长度 | 适用于发布请求。它给出发布数据的大小(以字节为单位) | |
利用Cookies的 | 将 cookie 返回给服务器(之前发送给浏览器的 cookie) | |
主办方 | 指定原始 URL 的主机和端口 | |
如果自 | 它表示如果它已被更改或修改,则只需要一个页面 | |
如果未修改 | 表示仅当页面未发生改变或修改时才需要该页面 | |
推荐人 | 表示引用 URL 页面的 URL | |
用户代理 | 识别发出请求的浏览器或客户端 |
JSP 中的 HTTP 标头方法
以下方法用于读取JSP页面中的HTTP标头:
- Cookie[] getCookies() – 返回包含客户端发送的 cookie 对象的数组
- 枚举 getAttributeNames() – 包含请求属性名称的枚举
- 枚举 getHeaderNames() – 包含标题名称的枚举。
- 枚举 getParameterNames() – 包含请求中获取参数名称的枚举。
- HttpSessiongetSession() – 返回与请求相关的当前会话,如果没有会话,那么它将创建一个新的会话。
- 区域设置 getLocale() – 返回客户端将接受内容的首选语言环境。它已分配给响应。默认情况下,该值将是服务器的默认语言环境。
- 对象 getAttribute(字符串名称) – 将命名属性的值作为对象返回。
- ServletInputStreamgetInputStream() – 以二进制数据形式检索请求主体。
- 字符串 getAuthType() – 返回用于保护 servlet 的身份验证方案的名称
- 字符串 getCharacterEncoding() – 返回请求主体中使用的字符编码名称。
- 字符串 getContentType() – 返回请求主体的 MIME 类型。
- 字符串 getContextPath() – 返回请求 URI 的一部分,表示 URI 的上下文路径
- 字符串 getHeader(字符串名称) – 以字符串形式返回请求标头
- 字符串 getMethod() – 返回 HTTP 方法的名称,如 GET、POST
- 字符串 getParameter(字符串名称) – 以字符串形式返回请求的参数。
- 字符串 getPathInfo() – 返回与 URL 关联的路径信息
- 字符串 getQueryString() – 返回与请求 URL 关联的查询字符串
- 字符串 getServletPath() – 返回调用 JSP 的请求的 URL 部分
- String[] getParameterValues(字符串名称) – 返回包含请求参数值的字符串对象数组
示例:
在下面的例子中,我们使用请求对象的不同方法
<%@ 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 的 US 语言环境。
代码行21: 使用请求对象,我们获取该 JSP 的路径信息。在本例中,它为空,因为没有提及 URL 的路径。
代码行23: 使用请求对象,我们获取上下文路径,即根路径
代码行25: 使用请求对象,我们获取服务器名称。
代码行27: 使用请求对象,我们获取服务器端口。
代码行29-35: 使用请求对象,我们获得以枚举形式出现的标头名称,因此我们获得标头名称中的所有标头值。
在此,我们将所有标题值作为 利用Cookies的、主机、连接、接受语言、接受编码。
执行上述代码时,您将获得以下输出:
输出:
我们获取了一系列值,例如会话名称、语言环境名称、路径名、服务器名称、端口名、主机、上下文路径以及所有标头值 JSP.
JSP 服务器响应
- 当请求被处理后,Web 服务器会生成响应。响应由状态行、响应头、空白行和文档组成。
- 它是HTTPServletResponse类的对象,即响应对象。
- 状态行是 HTML 的一个版本。
JSP 中的响应标头
JSP 中的响应头如下:
标题 | 描述 |
---|---|
让 | 它指定服务器正在请求的请求方法,例如 GET、POST |
缓存控制 | 响应文档可以缓存。可以是公共、私有或无缓存。无缓存指定文档不应缓存 |
连接升级包 | 它指示浏览器是否应使用 savedHTTPConnections。Close 值表示浏览器不应在 HTTPConnections 中使用持久连接,“keep-alive” 表示使用持久连接 |
内容配置 | 询问用户是否将响应保存到磁盘 |
内容编码 | 页面在传输过程中必须进行编码 |
内容长度 | 响应中的字节数 |
内容类型 | 它指定响应的 MIME 类型 |
到期日期 | 指定内容应被视为过期且不应缓存的时间 |
最后修改 | 它指示文档的最后修改时间 |
地址 | 它应该包含在所有具有状态代码 300 的响应中 |
刷新 | 它指定如何找到更新的页面。 |
重试 | 它可以与 503 响应一起使用,告诉客户端多久可以重复请求 |
设置cookie | 规定与页面关联的 cookie |
JSP 中的 HTTP 响应标头方法
以下是 JSP 中使用响应对象的方法:
- 字符串 encodeRedirectURL(字符串 URL) – 使用 redirectURL 方法对 URL 进行编码。
- 字符串 encodeURL(字符串 URL) – 通过包含会话 ID 对 URL 进行编码。
- 布尔值 containsHeader(字符串名称) – 它在 JSP 中是否包含标头。
- 布尔值 isCommited() – 响应是否已被提交。
- Void addCookie(Cookie cookie) – 将 cookie 添加到响应中
- Void addDateHeader(字符串名称,字符串值) – 添加响应头日期名称和值
- Void addHeader(字符串名称,字符串值) – 添加带有名称和值的响应标头
- Void addIntHeader(字符串名称,int 值) – 添加带有名称和整数值的响应标头
- 虚空冲洗Buffer()– 强制将缓冲区中的内容输出至客户端。
- 无效重置() – 清除缓冲区中的数据。
- 无效重置Buffer – 清除响应中的内容缓冲区而不清除状态代码。
- 无效 sendError(intsc,Stringmsg) – 使用状态代码向客户端发送错误响应。
- 无效 sendRedirect(字符串位置) – 向客户端发送临时重定向响应。
- 虚空套装Buffer大小(int 大小) – 设置主体的缓冲区大小
- 无效设置字符编码(字符串字符集) – 设置字符编码
- 无效 setContentType(字符串类型) – 设置响应的内容类型
- 无效的setContentLength(intlen) – 设置响应的内容长度
- 无效 setLocale(Locale lcl) – 设置响应的区域类型
- 无效 setStatus(intsc) – 设置响应的状态代码
示例:
在这个例子中,我们介绍了不同的方法 getLocale、flushbuffer、getWriter、get ContentType 和 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: 使用响应对象,我们得到在输出流中输出的写入器对象
代码行18: 使用响应对象,我们获取响应对象的内容类型,即 MIME 类型
代码行21: 使用响应对象,它用于每 5 秒自动加载一次,因为第二个参数设置为 5
执行上述代码时,您将获得以下输出:
输出:
- 在这里我们得到输出,因为这是来自 getWriter 的 writer 对象,它为我们提供了对象,我们可以在输出流中输出。
- 我们将语言环境设置为 en_us,将内容类型设置为 text/html
- 我们得到的字符集是 ISO 8859
- 今天的日期作为当前日期。
JSP HTTP 状态代码
- 当请求被处理时,就会生成响应。响应状态行由 HTTP 版本、状态代码和相关消息组成。
- 该消息与状态码、HTTP版本直接相关,由服务器决定。
- 默认情况下,200 被设置为 JSP 中的状态代码,因此我们不需要明确设置。
- 我们可以设置为 response.setStatus() 方法
代码分为以下 5 类:
- 100-199 – 客户端在此表示它应该采取一些行动
- 200-299 – 表示请求成功
- 300-399 – 它们用于已移动的文件,通常包含指示新地址的位置标头
- 400-499 – 表示客户端错误
- 500-599 – 表示服务器错误
一些常见的状态代码如下:
- 200 – 表示一切正常
- 301 – 已永久移动
- 304 – 自上次更改后未修改
- 400 –错误的要求
- 404 – 未找到
- 405 – 未找到方法
- 500 - 内部服务器错误
- 503服务不可用
- 505——HTTP 版本不受支持
JSP 中的 HTTP 状态代码方法
JSP 中的一些状态码方法如下:
- 公共无效设置状态(intstatusCode): 它设置我们想要在该 JSP 页面中设置的状态代码。这将向我们提供已设置的状态代码的消息
- 公共无效sendRedirect(字符串URL): 它生成 302 响应以及位置标头,给出新文档的 URL
- 公共无效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 Page”消息。
总结
- 在本文中,我们了解了客户端请求和服务器响应,以及如何拦截请求以及如何操纵响应。
- JSP 操作 它使用 XML 语法构造来控制 servlet 引擎的行为。
- 当请求网页时,它会在 HTTP 标头中将信息发送到 Web 服务器。
- 当请求被处理后,Web 服务器会生成响应。响应由状态行、响应头、空白行和文档组成。
- 当请求被处理时,就会生成响应。响应状态行由 HTTP 版本、状态代码和相关消息组成。