在本教程中,我们讨论 HTTP 标头,并展示如何在 Java Servlet 和 JSP 文件中显示 HTTP 标头。
HTTP 标头字段是超文本传输协议(HTTP)中请求和响应消息的标头部分的组成部分。 它们定义 HTTP 事务的操作参数。
HTTP 标头允许客户端和服务器将附加信息与请求或响应一起传递。 它们用于各种任务,例如身份验证,cookie,缓存,连接管理或内容协商。
例如,User-Agent
指定用户 aget(发出请求的客户端应用,例如浏览器),Date
指定消息生成的日期和时间。
标头有几种类型:
- 常规标头-适用于请求和响应,但与最终在正文中传输的数据无关。
- 请求标头-包含有关要获取的资源或客户端本身的更多信息。
- 响应标头-包含有关响应的其他信息,例如响应的位置或服务器本身(名称和版本等)。
- 实体标头-包含有关实体主体的更多信息,例如其内容长度或 MIME 类型。
使用 Java Servlet 显示标头字段
在第一个示例中,我们在 servlet 中显示 HTTP 标头。
ShowHeaders.java
package com.zetcode.web;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "ShowHeaders", urlPatterns = {"/ShowHeaders"})
public class ShowHeaders extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try (PrintWriter out = response.getWriter()) {
response.setContentType("text/html");
out.println("<!DOCTYPE html>");
out.println("<html lang=\"en\">");
out.println("<head>");
out.println("<title>HTTP headers</title>");
out.println("<body>");
out.println("<p>Headers</p>");
Enumeration<String> headerNames = request.getHeaderNames();
out.println("<ol>");
while (headerNames.hasMoreElements()) {
out.print("<li>");
String headerName = headerNames.nextElement();
out.print(headerName + " = ");
String headerValue = request.getHeader(headerName);
out.print(headerValue);
out.println("</li>");
}
out.println("</ol>");
out.println("</body>");
out.println("</html>");
}
}
}
ShowHeaders
servlet 找出客户端发送的 HTTP 标头,并将它们发送回 HTML 文件中。
PrintWriter out = response.getWriter()
我们直接写到PrintWriter
。 请注意,虽然可以直接写,但现代 Java Web 应用使用 Thymeleaf,FreeMarker 或 JSP 之类的模板来创建 HTML 页面。
response.setContentType("text/html");
响应的内容类型设置为text/html
。
Enumeration<String> headerNames = request.getHeaderNames();
我们使用getHeaderNames()
方法获得标题名称。 它返回字符串的枚举。
String headerName = headerNames.nextElement();
我们使用nextElement()
方法从枚举中获取下一个标头名称。
String headerValue = request.getHeader(headerName);
使用getHeader()
,我们获得标头值。
在 JSP 文件中显示标头字段
在第二个示例中,我们在 JSP 文件中显示 HTTP 标头。 我们还使用 JSTL 库。
showHeaders.jsp
<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core' %>
<!DOCTYPE html>
<html lang="en">
<head>
<title>HTTP headers</title>
</head>
<body>
<p>HTTP headers:</p>
<ol>
<c:forEach var="nextHeader" items="{header}">
<li><c:out value="{nextHeader.key}" /> = <c:out value="${nextHeader.value}" /></li>
</c:forEach>
</ol>
</body>
</html>
JSP 文件具有header
隐式对象,该对象是标头名称及其值的映射。
<c:forEach var="nextHeader" items="{header}">
<li><c:out value="{nextHeader.key}" /> = <c:out value="${nextHeader.value}" /></li>
</c:forEach>
使用 JSTL 的forEach
标记,我们遍历地图并显示标头名称及其值。
在本教程中,我们使用了 HTTP 标头字段。
您可能也对以下相关教程感兴趣:Java servlet 复选框教程, Java servlet 图像教程, Servlet FreeMarker JdbcTemplate 教程,Java 教程。