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

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

JSP 服务器响应

  • 当请求被处理后,Web 服务器会生成响应。响应由状态行、响应头、空白行和文档组成。
  • 它是HTTPServletResponse类的对象,即响应对象。
  • 状态行是 HTML 的一个版本。

JSP 中的响应标头

JSP 中的响应头如下:

标题 描述
它指定服务器正在请求的请求方法,例如 GET、POST
缓存控制 响应文档可以缓存。可以是公共、私有或无缓存。无缓存指定文档不应缓存
连接升级包 它指示浏览器是否应使用 savedHTTPConnections。Close 值表示浏览器不应在 HTTPConnections 中使用持久连接,“keep-alive” 表示使用持久连接
内容配置 询问用户是否将响应保存到磁盘
内容编码 页面在传输过程中必须进行编码
内容长度 响应中的字节数
内容类型 它指定响应的 MIME 类型
到期日期 指定内容应被视为过期且不应缓存的时间
最后修改 它指示文档的最后修改时间
地址 它应该包含在所有具有状态代码 300 的响应中
刷新 它指定如何找到更新的页面。
重试 它可以与 503 响应一起使用,告诉客户端多久可以重复请求
设置cookie 规定与页面关联的 cookie

JSP 中的 HTTP 响应标头方法

以下是 JSP 中使用响应对象的方法:

  1. 字符串 encodeRedirectURL(字符串 URL) – 使用 redirectURL 方法对 URL 进行编码。
  2. 字符串 encodeURL(字符串 URL) – 通过包含会话 ID 对 URL 进行编码。
  3. 布尔值 containsHeader(字符串名称) – 它在 JSP 中是否包含标头。
  4. 布尔值 isCommited() – 响应是否已被提交。
  5. Void addCookie(Cookie cookie) – 将 cookie 添加到响应中
  6. Void addDateHeader(字符串名称,字符串值) – 添加响应头日期名称和值
  7. Void addHeader(字符串名称,字符串值) – 添加带有名称和值的响应标头
  8. Void addIntHeader(字符串名称,int 值) – 添加带有名称和整数值的响应标头
  9. 虚空冲洗Buffer()– 强制将缓冲区中的内容输出至客户端。
  10. 无效重置() – 清除缓冲区中的数据。
  11. 无效重置Buffer – 清除响应中的内容缓冲区而不清除状态代码。
  12. 无效 sendError(intsc,Stringmsg) – 使用状态代码向客户端发送错误响应。
  13. 无效 sendRedirect(字符串位置) – 向客户端发送临时重定向响应。
  14. 虚空套装Buffer大小(int 大小) – 设置主体的缓冲区大小
  15. 无效设置字符编码(字符串字符集) – 设置字符编码
  16. 无效 setContentType(字符串类型) – 设置响应的内容类型
  17. 无效的setContentLength(intlen) – 设置响应的内容长度
  18. 无效 setLocale(Locale lcl) – 设置响应的区域类型
  19. 无效 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

执行上述代码时,您将获得以下输出:

JSP 服务器响应

输出:

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

  1. 公共无效设置状态(intstatusCode): 它设置我们想要在该 JSP 页面中设置的状态代码。这将向我们提供已设置的状态代码的消息
  2. 公共无效sendRedirect(字符串URL): 它生成 302 响应以及位置标头,给出新文档的 URL
  3. 公共无效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 状态代码

输出:

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

总结

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