跳转至

Java Servlet HTTP 标头

原文: 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

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 RequestDispatcherJava servlet 复选框教程Java servlet 图像教程Servlet FreeMarker JdbcTemplate教程Spring Boot 中的服务图像文件Java 教程jQuery DatePicker教程Stripes 教程



回到顶部