Сервлет включает ласточки HTTP заголовки в Tomcat - PullRequest
3 голосов
/ 01 октября 2010

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

Включенный сервлет устанавливает заголовки, которые я хотел бы прочитать в , включая сервлет.Поэтому я передаю пользовательский объект HTTPResponse в методе include (), который фиксирует всю обратную связь от сервлета.

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

Я полагаю, что Tomcat делает это, чтобы защитить клиента от неправильных заголовков.Самое смешное, что такой же подход работает так, как я ожидал в Jetty.

Прошло много времени с тех пор, как я серьезно занимался сервлетами, поэтому я немного борюсь здесь.Я пытаюсь выяснить, как читать заголовки ответа из сервлета, который вызывается через dispatcher.include ().

1 Ответ

4 голосов
/ 02 октября 2010

Из раздела спецификаций сервлета SRV.8.3:

Метод include интерфейса RequestDispatcher может быть вызван в любое время.Целевой сервлет метода include имеет доступ ко всем аспектам объекта запроса, но его использование объекта ответа более ограничено.

Он может только записывать информацию в ServletOutputStream или Writerобъекта ответа и зафиксируйте ответ, записав содержимое после конца буфера ответа, или явно вызвав метод flushBuffer интерфейса ServletResponse.метод, который влияет на заголовки ответа.Любая попытка сделать это должна игнорироваться .

Как насчет установки значений для вызывающего сервлета в области запроса с помощью request.setAttribute(...) и последующего чтенияэто оттуда, как только вы вернетесь?Может ли это сработать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...