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

questionAnswers(2)

yourAnswerToTheQuestion