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 标头

  1. Cookie[] getCookies() – 返回一个包含客户端发送的 Cookie 对象的数组
  2. Enumeration getAttributeNames() – 包含请求属性名称的枚举
  3. Enumeration getHeaderNames() – 包含标头名称的枚举。
  4. Enumeration getParameterNames() – 包含请求中获取参数名称的枚举。
  5. HttpSessiongetSession() – 返回与请求关联的当前会话,如果不存在会话,则创建一个新会话。
  6. Locale getLocale() – 返回客户端接受内容的首选区域设置。已分配给响应。默认情况下,值将是服务器的默认区域设置。
  7. Object getAttribute(String name) – 以对象形式返回命名属性的值。
  8. ServletInputStream getInputStream() – 以二进制数据形式检索请求正文。
  9. String getAuthType() – 返回用于保护 servlet 的身份验证方案的名称
  10. String getCharacterEncoding() – 返回请求正文中使用的字符编码的名称。
  11. String getContentType() – 返回请求正文的 MIME 类型。
  12. String getContextPath() – 返回指示 URI 上下文路径的请求 URI 的部分
  13. String getHeader(String name) – 以字符串形式返回请求标头
  14. String getMethod() – 返回 HTTP 方法的名称,例如 GET、POST
  15. String getParameter(String name) – 以字符串形式返回请求的参数。
  16. String getPathInfo() – 返回与 URL 关联的路径信息
  17. String getQueryString() – 返回与请求 URL 关联的查询字符串
  18. String getServletPath() – 返回调用 JSP 的请求的 URL 的一部分
  19. 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 Client Request

输出:

我们获取一系列值,如会话名称、区域设置名称、路径名称、服务器名称、端口名称、主机、上下文路径以及该 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 中使用响应对象的方法

  1. String encodeRedirectURL(String URL) – 对 redirectURL 方法中的 URL 进行编码。
  2. String encodeURL(String URL) – 通过包含会话 ID 来编码 URL。
  3. Boolean containsHeader(String name) – 它在 JSP 中是否包含一个标头。
  4. Boolean isCommited() – 响应是否已提交。
  5. Void addCookie(Cookie cookie) – 将 cookie 添加到响应
  6. Void addDateHeader(String name, String value) – 添加响应标头日期名称和值
  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(intsc,Stringmsg) – 使用状态码向客户端发送错误响应。
  13. Void sendRedirect(String location) – 向客户端发送临时重定向响应。
  14. Void setBufferSize(int size) – 设置正文的缓冲区大小
  15. Void setCharacterEncoding(String charset) – 设置字符编码
  16. Void setContentType(String type) – 设置响应的内容类型
  17. Void setContentLength(intlen) – 设置响应的内容长度
  18. Void setLocale(Locale lcl) – 设置响应的区域设置类型
  19. 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 被设置为第二个参数

当您执行上述代码时,您会得到以下输出

JSP Server Response

输出

  • 在这里,我们得到输出,因为这是来自 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 中的一些状态码方法

  1. Public void setStatus(intstatusCode): 它设置我们想在该 JSP 页面中设置的状态码。这将为我们提供已设置状态码的消息
  2. Public void sendRedirect(String URL): 它生成 302 响应以及 location 标头,提供新文档的 URL
  3. 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:使用响应对象,我们向页面发送错误,包含两个参数。

  1. 状态码 – 它可以是以上任何一个。在此情况下,我们描述为 404
  2. 消息 – 它可以是我们想要显示的任何特定错误消息

如果执行上述代码,您将获得以下输出

JSP HTTP Status Codes

输出

在这里,我们得到错误代码 404,这是从代码发送的,并且还在输出中显示了“Guru 页面未找到”消息。

摘要

  • 在本文中,我们学习了客户端请求和服务器响应,了解了请求是如何被拦截的以及响应是如何被处理的。
  • JSP 操作使用 XML 语法中的构造来控制 servlet 引擎的行为。
  • 当请求网页时,它会将信息通过 HTTP 标头发送到 Web 服务器。
  • 当处理请求然后由 Web 服务器生成响应时。它包含状态行、响应标头、一个空行和文档。
  • 当处理请求时,响应会被生成。响应状态行包含 HTTP 版本、状态码和关联的消息。