【问题标题】:reading custom headers in servlets读取 servlet 中的自定义标头
【发布时间】:2012-03-23 05:55:36
【问题描述】:

我需要在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”。为什么会这样?如何在需要时读取响应设置的自定义标头?

【问题讨论】:

  • 没有办法解决吗???!!!

标签: java http servlets


【解决方案1】:

来自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"));

【讨论】:

  • 是的。我知道属性。但我的问题是如何设置自定义 http 标头并在需要时读取它们?
猜你喜欢
  • 2020-04-01
  • 1970-01-01
  • 2011-04-15
  • 2016-03-30
  • 2017-12-10
  • 2020-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多