Можно ли изменить объект httpservletrequest - PullRequest
2 голосов
/ 07 февраля 2011


Можно ли изменить объект запроса сервлета при пересылке запроса от одного сервлета к другому? или обходной путь для достижения этого?

У меня есть 2 сервлета, Servlet1 и Servlet2, например, например. -

public class Servlet1 extends HttpServlet {
    doPost(HttpServletRequest rq, HttpServletResponse rs) {
       // do something meaningful, call other different web-apps/servlets

       InputStream is1 = rq.getInputStream();
       RequestDispatcher rd = getServletContext().getRequestDispatcher("/Servlet2");
       rd.forward(rq, rs);
    }
}

Если я напечатаю is1, это будет что-то вроде -

-----Part2_324<?xml version="1.0" encoding="utf-8"?><Head><Body><Text>This is the first File</Text></Body></Head>-------Part2_65623

Мне плевать на это о / п, когда позже запрос будет перенаправлен на Servlet2.

У меня есть файл xml file2.xml, содержимое -

<?xml version="1.0" encoding="utf-8"?><Head><Body><Top>Start</Top><Middle>Process</Middle><Bottom>End</Bottom></Body></Head>

Мне бы хотелось, чтобы это было содержимое запроса для Servlet2, поскольку оно не может обрабатывать содержимое is1, оно предназначено для обработки содержимого file2.xml.
Атрибутов / параметров практически не установлено.

Возможно ли этого добиться? Надеюсь, вопрос понятен.
Спасибо

1 Ответ

8 голосов
/ 07 февраля 2011

Спецификация сервлета запрещает замену одного запроса другим при пересылке.

Однако разрешает переадресацию HttpServletRequestWrapper, когда оболочка упаковывает исходный запрос. Поэтому попробуйте реализовать свою логику в качестве подкласса HttpServletRequestWrapper, оборачивая исходный запрос и переопределяя различные методы HttpServletRequest в зависимости от ситуации.

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