JSP: RequestDispatcher.forward () não encaminhado quando o servlet é chamado via Ajax POST
Tenho um formulário de login (login.jsp) com dois campos de entrada, nome de usuário e senh
Estou usando o POST via Ajax para acessar o servlet de logi
Eu quero que o usuário efetue login e, se o login for bem-sucedido, seja redirecionado para outra página chamada 'search.jsp'. Se malsucedido, uma mensagem de 'falha no login' será retornada como o Ajax responseText a ser inserido em um parágrafo na página 'login.jsp'
Tenho tudo funcionando, meu servlet de login acessa o banco de dados por meio de um bean separado e um objeto desse bean é retornado com suas propriedades prontas para uso. Então, tudo está bem lá.
Mas, depois que o nome de usuário e a senha passarem para o banco de dados, estou usando o RequestDispatcher para encaminhar para a nova página de destino (search.jsp
Aqui está meu doPost ()
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username,password;
username = request.getParameter("p");
password = request.getParameter("q");
try {
LoginService ls = new LoginService(username,password);
User user = ls.getUserDetails();
if(user.getUsername()!=null && user.getPassword()!=null){
FormService filler = new FormService();
Form fields = filler.getFields();
request.setAttribute("user",user);
request.setAttribute("fields1",fields);
request.setAttribute("fields2",fields);
request.setAttribute("fields3",fields);
HttpSession session = request.getSession(true);
//set attribute for the session
session.setAttribute("user",user.getUsername());
//Now, the RequestDispatcher.forward() is not forwarding to the new page!
//The whole 'search.jsp' page is being stuffed back into the 'login.jsp' page
RequestDispatcher rd = request.getRequestDispatcher("search.jsp");
rd.forward(request,response);
return;
}
else{
PrintWriter out = response.getWriter();
out.println("login failed!");
return;
}
} catch (Exception e) {
e.printStackTrace();
}
}
Mas, em vez de encaminhar a solicitação e a resposta para a nova página jsp 'search.jsp', toda a página search.jsp está sendo inserida novamente na página login.jsp original - no elemento html que contém o Ajax responseText quando o login falha.
O método forward () no servlet funciona quando o servlet é chamado a partir do atributo action action, mas não quando o servlet é chamado de arquivo javascript que contém o código Aja