2011-02-07 7 views
1


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

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

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.
Атрибутов/параметров не существует.

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

ответ

7

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

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

+0

То есть, это в значительной степени то, что мне нужно. Большое спасибо. –

Смежные вопросы