Ответ 1
Вы можете использовать RequestDispatcher
для пересылки вашего запроса следующим образом:
RequestDispatcher dispatcher = httpRequest.getRequestDispatcher(forwardingAddress);
// here you have the choice whether to use include(..) or forward(..) see below
if(useInclude)
dispatcher.include(httpRequest, httpResponse);
else
dispatcher.forward(httpRequest, httpResponse);
... где useInlcude
устанавливается по вашему выбору со следующими параметрами:
- включить
Это, вероятно, то, что вы хотите сделать: Загрузите содержимое изforwardingAdress
в свой ответ.- Это означает, что вы можете включить несколько целей в один ответ.
- Клиент даже не поймет, что этот процессуальный агент должен уметь видеть целевой документ.
- вперед
Отправьте запрос наforwardingAddress
. Это сообщит клиенту, чтобы он отправил новый запрос на указанный URL.- Если вы сделаете это в браузере с инструментами разработчика, вы увидите второй запрос.
- Клиент должен иметь возможность видеть и загружать целевой URL.
- Вы можете перенаправлять только одну цель.
Смотрите также следующие ссылки:
- RequestDispatcher javadoc, особенно для заметок:
- forward должен быть вызван до того, как ответ был передан клиенту (до того, как был удален поток тела ответа). Если ответ уже был зафиксирован, этот метод генерирует исключение IllegalStateException. Незафиксированный вывод в буфере ответа автоматически очищается перед форвардом.
- include: параметры запроса и ответа должны быть либо теми же объектами, которые были переданы вызывающему сервису сервлетов, либо быть подклассами классов ServletRequestWrapper или ServletResponseWrapper, которые их завершают.
- Пример URLRewriteFilter, хотя этот пример реализован с использованием
Filter
вместоServlet
, поведение одинаковое (Примечание: этот пример является частью из моей шахты и, следовательно, содержит некоторые накладные расходы в родительских классах. Просто посмотрите на соответствующий раздел...)