RequestDispatcher na classe Controladora

5 respostas
flavio-mendes

Pessoal boa noite, tudo bem?

Com intuito de aprimorar meus conhecimentos em Java para Web, estou fazendo um pente-fino nos desafios da apostila FJ21. Travei em uma situação que pode ser simples, mais que pode me ajudar futuramente no contexto Servlets-JSP. No caso, o exercício pede para que eu centralize na classe Controladora, a tarefa de redirecionar as páginas através do RequestDispatcher a partir de uma String vinda da classe de Lógica que especifica a qual JSP deve ser encaminhada. Veja o que eu fiz na tentativa de implementar a solução:

Trecho final de uma das minhas classes de Lógica que cria um atributo dentro do método de serviço (Removi a implementação do RequestDispatcher local que funciona sem problemas):

...
          String url = "/lista-contatos-elegante.jsp";
          request.setAttribute("url", url);
	}
}

Classe Controladora (Bloco do Instanciamento da Servlet conforme a Lógica e a tentativa de redirecionamento):

....
try {
			Class classe = Class.forName(nomeClasse);
			Logica logica = (Logica) classe.newInstance();
			logica.executa(request, response);
			
			String param = (String) request.getAttribute("url");
			RequestDispatcher rd = request.getRequestDispatcher(param);
			rd.forward(request, response);
			
		} catch (Exception e) {
			throw new ServletException("A lógica de negócios causou uma exceção!", e);
		}

Desta forma acima não estou conseguindo implementar essa lógica, pois retorna erro:

exception

javax.servlet.ServletException: A lógica de negócios causou uma exceção!
	br.com.caelum.agenda.servlet.ServletController.service(ServletController.java:27)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause

java.lang.NullPointerException
	br.com.caelum.agenda.servlet.ServletController.service(ServletController.java:24)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

Vocês poderiam me ajudar a resolver o meu problema?

Obrigado!

5 Respostas

Hebert_Coelho

Repare que o stack trace fala exatamente onde está acontecendo o erro.

Qual o código que está na linha abaixo?
br.com.caelum.agenda.servlet.ServletController.service(ServletController.java:24)

flavio-mendes

Opa, então jakefrog, segue a informação da linha 24 da classe ServletController:

rd.forward(request, response);
Hebert_Coelho

Seu rd ta null. Ele não deve estar encontrando o valor RequestDispatcher rd = request.getRequestDispatcher(param);
Tente fazer com que logica.executa retorne a url destino. Assim você pode utilizá-la no dispatcher.

flavio-mendes

Certo, mas desta forma

String url = "/lista-contatos-elegante.jsp";  
          request.setAttribute("url", url);

no qual este código está dentro do método logica.executa(), não deveria funcionar para que a servlet controladora enxergue esse atributo String do nome da pagina jsp? Isto eu já fiz.

Obrigado pela ajuda.

flavio-mendes

Bom pessoal, parece que consegui resolver meu problema conforme trechos de código abaixo:

Servlet Lógica:

String url = "/lista-contatos-elegante.jsp";
request.setAttribute("url", url);

Servlet Controladora:

String link = (String) request.getAttribute("url");
RequestDispatcher rd = request.getRequestDispatcher(link); 
rd.forward(request, response);

Caso tenham alguma outra sugestão mais tecnicamente correta, por favor me informem. Caso contrário, agradeço pela ajuda!

Criado 8 de junho de 2012
Ultima resposta 8 de jun. de 2012
Respostas 5
Participantes 2