JSP 客户端请求

⚡ 智能摘要

JSP客户端请求和服务器响应使用JSP操作元素来控制Servlet引擎。浏览器通过HTTP头部发送信息,服务器返回状态行和头部信息,HTTP状态码报告每个请求的结果。

  • 📨 客户要求: 浏览器通过 HTTP 请求头将数据发送到服务器,服务器通过 HttpServletRequest 读取数据。
  • 🧾 请求标头: Accept、Accept-language、Connection、Cookie、Host 和 User-agent 描述客户端。
  • 📤 服务器响应: HttpServletResponse 返回状态行、响应标头和文档。
  • 🔧 响应方法: addHeader()、sendRedirect()、sendError() 和 setStatus() 用于设置响应。
  • 🔢 状态 Codes: 分组为 100–599;常见分组包括 200、301、404 和 500。
  • 🧪 例子: 工作中的 JSP 页面读取标头,设置刷新间隔,并发送 404 错误。

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. HttpSession getSession() – 返回与请求相关的当前会话,如果没有会话,那么它将创建一个新的会话。
  6. 区域设置 getLocale() – 返回客户端将接受内容的首选语言环境。它已分配给响应。默认情况下,该值将是服务器的默认语言环境。
  7. 对象 getAttribute(字符串名称) – 将命名属性的值作为对象返回。
  8. ServletInputStream getInputStream() – 以二进制数据形式检索请求体。
  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() – 返回部分 URL调用 JSP 的请求的 s
  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>");
    }

%>

代码说明:

Code 线17: 使用请求对象,我们获取该特定会话的会话对象,并获取该会话的对象值

Code 线19: 通过请求对象,我们可以获取该特定会话的区域设置,即该 JSP 的区域设置是 en_US。

Code 线21: 我们使用请求对象获取该 JSP 的路径信息。在本例中,由于没有该 JSP 的路径,因此路径信息为空。 URL 提及。

Code 线23: 使用请求对象,我们获取上下文路径,即根路径

Code 线25: 使用请求对象,我们获取服务器名称。

Code 线27: 使用请求对象,我们获取服务器端口。

Code 第 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. 字符串编码重定向URL(细绳 URL) - 编码 URL 重定向URL 方法。
  2. 字符串编码URL(细绳 URL) - 编码 URL 通过包含会话 ID。
  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. void sendError(int sc,String msg) – 使用状态代码向客户端发送错误响应。
  13. 无效 sendRedirect(字符串位置) – 向客户端发送临时重定向响应。
  14. 虚空套装Buffer大小(int 大小) – 设置主体的缓冲区大小
  15. 无效设置字符编码(字符串字符集) – 设置字符编码
  16. 无效 setContentType(字符串类型) – 设置响应的内容类型
  17. void setContentLength(int len) – 设置响应的内容长度
  18. 无效 setLocale(Locale lcl) – 设置响应的区域类型
  19. void setStatus(int sc) – 设置响应的状态代码

计费示例:

在这个例子中,我们将介绍不同的方法,包括 getLocale、flushbuffer 和 get。Writer, 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>

代码说明:

Code 线13: 使用响应对象,我们获取此 JSP 会话的区域设置对象

Code 线15: 使用响应对象,使用 flushbuffer 将缓冲区内容强制写入客户端

Code 线16: 使用响应对象,我们得到在输出流中输出的写入器对象

Code 线18: 使用响应对象,我们获取响应对象的内容类型,即 MIME 类型

Code 线21: 使用响应对象,它用于每 5 秒自动加载一次,因为第二个参数设置为 5

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

JSP 服务器响应

输出:

  • 这里我们从 get 函数的 writer 对象中获取输出。Writer这样我们就得到了一个对象,我们可以将其输出到输出流中。
  • 我们将语言环境设置为 en_us,将内容类型设置为 text/html
  • 我们得到的字符集是 ISO 8859
  • 今天的日期作为当前日期。

JSP HTTP 状态 Codes

  • 当请求被处理时,就会生成响应。响应状态行由 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 版本不受支持

HTTP 状态 Code JSP中的方法

JSP 中的一些状态码方法如下:

  1. public void setStatus(int status)Code): 它设置我们想要在该 JSP 页面中设置的状态代码。这将向我们提供已设置的状态代码的消息
  2. public void sendRedirect(String URL): 它会生成 302 响应以及位置标头,提供 URL 新文件
  3. public void sendError(int code,String msg): 它将状态代码与短消息一起发送,并在 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>

代码说明:

Code 线10: 使用响应对象我们将错误发送到带有两个参数的页面。

  1. 状态代码 – 可以是以上任何一种。在本例中,我们将其描述为 404
  2. 消息 – 可以是我们想要显示错误的任何特定消息

如果你执行上述代码,你会得到以下输出:

JSP HTTP 状态 Codes

输出:

这里我们收到错误代码 404,该错误代码由代码发送,并且还显示“Guru 输出中显示“页面未找到”消息。

常见问题

HttpServletRequest 承载客户端发送到服务器的数据,例如请求头和参数。HttpServletResponse 承载服务器返回的数据,包括状态码、响应头和文档内容。

状态码 404 表示服务器上找不到请求的资源。在 JSP 中,您可以使用 `response.sendError(404, “message”)` 显式发送此错误,以显示自定义的“未找到”页面。

使用请求对象:`getHeaderNames()` 返回一个标头名称枚举,`getHeader(name)` 返回每个标头的值。遍历这些名称即可读取客户端发送的每个标头。

AI可以解析头部日志,标记缺失或配置错误的头部,检测安全问题(例如缺少缓存控制),并汇总流量模式,帮助ping 开发人员可以更快地调试和优化请求和响应处理。

是的。人工智能可以根据纯文本描述生成 JSP 脚本片段,读取请求参数和标头、设置响应标头并发送状态代码,然后由开发人员审查其正确性和安全性。

总结一下这篇文章: