Prezados,
Estou fazendo uma ferramenta aqui na empresa e pela primeira vez consegui convencer a equipe de TI a utilizar Java, mas estou tendo o seguinte problema logo no início. Tenho uma tela de login que submete os dados via jQuery (codigo abaixo) para a servlet fazer o processo de validação de usuário, mas no retorno apos a validação se eu executo o comando request.getRequestDispatcher("/index.jsp") para o caso de login OK, o que esta ocorrendo é que está é retornando a página index no retorno da variável data do ajax e não o redirecionamento da página, como posso resolver este problema.
Código Ajax
jQuery.ajax({
type: ‘post’,
url : ‘login’,
data: data,
async : async_p,
success: function(data, textStatus, XMLHttpRequest){
if(data){
alert(‘Login OK.’);
}
},
error: function(XMLHttpRequest, textStatus, errorThrown){
alert(‘Ocorreu uma falha no sistema, gentileza entrar em contato com o suporte.’);
}
});
Código do servlet
if (usuario.getIdusuario()>0){
RequestDispatcher rd = req.getRequestDispatcher("/index.jsp");
rd.forward(req, res);
}else{
System.out.println("Não ok");
}
Desde já agradeço a todos.
Quando for postar código, utilize a tag [code].
Você não conhece nada de ajax, pelo visto, não?
Isso só pode ser pelo fato de já ter começado usando o jQuery ou semelhante.
Ajax funciona de uma forma diferente do processo normal, como você deve saber, assíncronamente. Mas, como isso é possível?
Um evento dispara uma função que, a partir de um objeto XMLHttpRequest ou ActveXObject(“Microsoft.XMLHTTP”) irá disparar uma requisição ao servidor.
Este objeto possui alguns atributos e funções, dos quais, destacamos o onreadystatechanged, função executada a cada alteração do readyState (que pode variar entre 0, 1, 2, 3 e 4).
Além do onreadystatechanged, temos o open, que é o responsável por efetuar a requisição em si, seja ela GET ou POST.
Quando o objeto executa o método open, o readyState passa de 0 para 1. Quando a conexão com o servidor é estabelecida, o readyState vai de 1 para 2. Ao ter o processamento realizado, o readyState passa a 3 e, quando o processo é finalizado, o readyState = 4.
E o que isso tem a ver com servlet e jsp?
Ora, o getRequestDispatcher “empurra” a solicitação para que o alvo (parâmetro) seja renderizado. E é isso que será retornado como responseText do ajax e, por consequência, renderizado no local indicado pelo jQuery.
Para resolver o problema?
1 - Troque o “alvo” de “index.jsp” para aquele que deve ser apresentado ao logar.
2 - Reveja a necessidade de realizar isso através de jQuery.
3 - Estudar mais javascript puro e entender como funciona toda a mágica do ajax é essencial.
4 - Usar a tag [code] é tão fundamental quanto.
dsrmachado, agradeço desde já o retorno. Quanto ao uso do Ajax já trabalho com ele a muito tempo, mas aqui na empresa trabalhamos ele usando Python, ASP e ASP.NET, sei como fazer esta requisição em JavaScript puro, mas sempre que é possível utilizamos jQuery já que ele provê diversas facilidades que agilizam o processo de desenvolvimento. Quanto ao erro que estou tendo é que diferente de minhas outras aplicações quando eu faço um redirect o site vai para a página indicada, neste caso ele apenas esta retornando como dado de retorno do submit o código da página (verificado com FireBug). Desculpa se está confuso ou não estou expressando corretamente, mas meu conhecimento em Java ainda é bem acadêmico, mas tenho muito interesse em migrar para esta tecnologia e estou aproveitando este projeto para poder fazer meu aprendizado.