чтение пользовательских заголовков в сервлетах - PullRequest
1 голос
/ 23 марта 2012

У меня есть требование установить пользовательские заголовки в 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 Ответ

2 голосов
/ 23 марта 2012

Из RequestDipatcher включает метод API doc :

[...] У объекта ServletResponse есть элементы пути и параметры остаются без изменений от звонящего. Включенный сервлет не может изменить код статуса ответа или установленные заголовки; любая попытка внести изменения игнорируются. [...]

Итак, если вы посмотрите на свой код, вы устанавливаете заголовок объекта ответа, но пытаетесь получить его из запроса. Поскольку они остаются неизменными, это не сработает.

Наиболее распространенный способ передачи значений из сервлета другому в перенаправлении или включении перенаправления - это передача его в качестве атрибута запроса:

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"));
...