多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# Java Servlet HTTP 标头 > 原文: [http://zetcode.com/articles/javaservlethttpheaders/](http://zetcode.com/articles/javaservlethttpheaders/) 在本教程中,我们讨论 HTTP 标头,并展示如何在 Java Servlet 和 JSP 文件中显示 HTTP 标头。 HTTP 标头字段是超文本传输​​协议(HTTP)中请求和响应消息的标头部分的组成部分。 它们定义 HTTP 事务的操作参数。 HTTP 标头允许客户端和服务器将附加信息与请求或响应一起传递。 它们用于各种任务,例如认证,cookie,缓存,连接管理或内容协商。 例如,`User-Agent`指定用户 aget(发出请求的客户端应用,例如浏览器),`Date`指定消息生成的日期和时间。 标头有几种类型: * 常规标头 - 适用于请求和响应,但与最终在正文中传输的数据无关。 * 请求标头 - 包含有关要获取的资源或客户端本身的更多信息。 * 响应标头 - 包含有关响应的其他信息,例如响应的位置或服务器本身(名称和版本等)。 * 实体标头 - 包含有关实体主体的更多信息,例如其内容长度或 MIME 类型。 ## 使用 Java Servlet 显示标头字段 在第一个示例中,我们在 servlet 中显示 HTTP 标头。 `ShowHeaders.java` ```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 文件中。 ```java PrintWriter out = response.getWriter() ``` 我们直接写到`PrintWriter`。 请注意,虽然可以直接写,但现代 Java Web 应用使用 Thymeleaf,FreeMarker 或 JSP 之类的模板来创建 HTML 页面。 ```java response.setContentType("text/html"); ``` 响应的内容类型设置为`text/html`。 ```java Enumeration<String> headerNames = request.getHeaderNames(); ``` 我们使用`getHeaderNames()`方法获得标题名称。 它返回字符串的枚举。 ```java String headerName = headerNames.nextElement(); ``` 我们使用`nextElement()`方法从枚举中获取下一个标头名称。 ```java String headerValue = request.getHeader(headerName); ``` 使用`getHeader()`,我们获得标头值。 ## 在 JSP 文件中显示标头字段 在第二个示例中,我们在 JSP 文件中显示 HTTP 标头。 我们还使用 JSTL 库。 `showHeaders.jsp` ```java <%@ 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`隐式对象,该对象是标头名称及其值的映射。 ```java <c:forEach var="nextHeader" items="${header}"> <li><c:out value="${nextHeader.key}" /> = <c:out value="${nextHeader.value}" /></li> </c:forEach> ``` 使用 JSTL 的`forEach`标记,我们遍历映射并显示标头名称及其值。 在本教程中,我们使用了 HTTP 标头字段。 您可能也对以下相关教程感兴趣: [Java `RequestDispatcher`](/java/requestdispatcher/) , [Java servlet 复选框教程](/articles/javaservletcheckbox/), [Java servlet 图像教程](/articles/javaservletimage/), [Servlet FreeMarker `JdbcTemplate`教程](/articles/servletfreemarker/) , [Spring Boot 中的服务图像文件](/articles/springbootserveimage/), [Java 教程](/lang/java/), [jQuery DatePicker教程](/articles/jquerydatepicker/)或 [Stripes 教程](/java/stripes/)。