在servlet中读取自定义标头

时间:2012-03-23 05:55:36

标签: java http servlets

我需要在http response中设置自定义标头,并在需要时阅读它们。我使用以下代码来读取标题。

servlet1:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  response.addHeader("cust-header", "cust-value");
  RequestDispatcher rd = request.getRequestDispatcher("servlet2");
  rd.include(request, response);
}

servlet2:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  System.out.println(request.getHeader("cust-header"));
}

当我尝试读取自定义标头值时,我在控制台中得到“null”。为什么会这样?如何在必要时阅读设置的自定义标头?

1 个答案:

答案 0 :(得分:2)

来自RequestDipatcher include method API doc

  

[...]   ServletResponse对象的路径元素和参数保留   与来电者保持不变。包含的servlet无法更改   响应状态代码或设置标题;任何改变的尝试都是   忽略。   [...]

因此,如果您查看代码,则在响应对象上设置标头,但尝试从请求中获取它。 由于它们保持不变,因此不起作用。

在转发或包含重定向中将值从servlet传递到另一个的最常用方法是将其作为请求属性传递:

servlet1:

//set a request attribute
request.setAttribute("cust-header", "cust-value");
RequestDispatcher rd = request.getRequestDispatcher("servlet2");
rd.include(request, response);

servlet2:

System.out.println(request.getAttribute("cust-header"));