Solicitar atributos não disponíveis na página jsp ao usar o sendRedirect de um servlet
Eu sou novo em jsp e servlet. Meu cenário é o seguinte
Eu tenho uma página jsp que tem um formulário nela. com dois campos. O snipet de código da página jsp é o seguinte.
Arquivo MyFirstJSP.jsp
<body>
<h1> This is my first jsp and servlet project</h1>
<%
//System.out.println(request.getAttribute("fname"));
if(request.getAttribute("fname")!=null){
System.out.println(request.getAttribute("fname"));
}else{
System.out.println("No request ");
}
%>
<form action="MyFirstServlet" method="get">
First Name<input type="text" name="fname" value= ${fname}><br>
Last Name<input type="text" name="lname" value= ${lname}>
<input type="submit" value="Send">
</form>
</body>
Quando envio este formulário, o MyFirstServlet é chamado, que verifica o primeiro nome digitado pelo usuário. Se o primeiro nome for igual a "abc", o servlet define o atributo para solicitar o objeto e enviá-lo para a página jsp chamada, ou seja, acima da página. Que obterá o valor do objeto de solicitação e o preencherá no respectivo campo do formulário. Eu tenho a linguagem Java Expression também para o mesmo efeito.
Aqui está o meu snipet de código do arquivo de servlet MyFirstServlet.java
/**
* Servlet implementation class MyFirstServlet
*/
public class MyFirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public MyFirstServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub
String firstname=request.getParameter("fname");
if(firstname.equalsIgnoreCase("abc")){
System.out.println("Setting attributes");
request.setAttribute("fname",firstname);
request.setAttribute("lname",request.getParameter("lname"));
response.sendRedirect("MyFirstJSP.jsp");
}else{
System.out.Println("No problem");
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
PrintWriter p=response.getWriter();
p.println("Success!");
doGet(request,response);
}
}
Mas quando executo o código, o servlet redireciona para a página jsp, mas não preenche os campos do formulário com os respectivos valores. Quanto a encontrar a causa, adicionei o bloco if-else-block para saber a causa e descobri que o atributo de objetos request não está disponível aqui.
Se eu usar o dispatcher de solicitação nesse caso, os valores serão disponibilizados e o formulário será preenchido com os valores, mas o URL na barra de endereço não mudará e sempre mostrará o URL para o servlet.
Então minha consulta é
** 1) Por que o objeto request não está disponível para a página jsp usando sendRedirect.
2) Há alguma outra forma de mostrar meu formulário na página jsp preenchida com os valores inseridos pelo usuário se o servlet for redirecionado para o jsp de chamada para que o usuário não precise reinserir os dados no formulário. **
Por favor me guie amigos neste problema Obrigado!