Estudando o livro Use a Cabeça (JSP e Servlets), me deparei com a seguinte questão (Pag. 141 do livro):
12 - Quais declarações sobre o RequestDispatcher são verdadeiras
( quando verdadeiras, considere que o RequestDispatcher não foi obtido via uma
chamada ao getNamedDispatcher())?
e dentre as respostas consideradas corretas, a seguinte também foi considerada correta pelo autor:
(E) O servlet para o qual uma solicitação é encaminhada pode acessar a query string original, chamando o
getAttribute(“javax.servlet.forward.query_string”) no ServletRequest.
No entanto até cheguei a tentar recuperar os dados de uma query string utilizando request.getAttribute(“foo”),
já imaginando que daria errado… e realmente não funcionou. Alguém poderia me ajudar a compreender melhor
esta questão?
Entao nesta outra servlet se vc fizer request. getAttribute(“javax.servlet.forward.query_string”) vc vai ter como retorno a queryString completa: cdEmpresa=1&cdCliente=2
digitando as variáveis na query string, os valores foram mesmo recuperados. Eu não recebia os valores pois estava
colocando os parâmetros na query string de forma dinâmica conforme as listagens abaixo:
Tenho um servlet principal (QSStart) que irá fazer um forward para (QSNext), a qual irá receber os parâmetros.
Principal:
[code]public class QSStart extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// o foo não será recuperado através do request.getAttribute("javax.servlet.forward.query_string")
RequestDispatcher next = request.getRequestDispatcher("Next.do?foo=bar");
next.forward(request, response);
}
}[/code]
Servlet que receberá os parâmetros:
[code]public class QSNext extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// recebendo o controle e tentando recuperar o query string
String ret = (String)request.getAttribute("javax.servlet.forward.query_string");
PrintWriter out = response.getWriter();
out.println("<html><body><br>query string via attribute (foo):" + ret + "</body></html>");
}
}[/code]
Da forma como está no código eu só consigo recuperar com