No contexto de um Servlet é possível definir um objeto que recebe as solicitações do cliente e envia-os para qualquer recurso (como um outro servlet, arquivo HTML ou arquivo JSP) no servidor. O container do servlet cria o objeto RequestDispatcher, que é usado como um wrapper em torno de um recurso de servidor localizado em um determinado caminho ou dado por um nome particular. Este método permite que um servlet faça o processamento preliminar de um pedido e outro recurso gere a resposta.
Passando Parâmetros Entre um Servlet e Duas Paginas JSP
Crie uma aplicação Web dinâmica chamada DaWeb002 e uma pagina JSP chamada index.jsp e outra chamada resultado.jsp. Crie um Servlet com o método service chamado MeuResultado, utilize o código abaixo para completar cada respectivo arquivo.
1 – A pagina inicial da aplicação oferece duas combinações na qual você pode selecionar, as opções pertencem umas as outras e o Servlet processa a camada de negocio, avalia os resultados e os envia para a pagina de resultado:
2 – O Servlet envia três parâmetros para a pagina JSP, dois são os parâmetros que você escolheu, somente a nível de descrição, pois o processamento já foi efetuado no servlet, o terceiro parâmetro é o resultado da combinação escolhida é uma variável criada no próprio servlet e enviada para a pagina de resultado para que a mensagem possa ser corretamente exibida para o usuário utilizando ainda um código Java através de um Scriptlet:
Exemplo:
Neste exemplo criamos duas paginas JSP e um Servlet no qual processa um resultado para uma seleção do usuário e o exibe através de parâmetros processados na pagina de resultado por meio de Scriptlet.
JSP – index.jsp
<?xml version="1.0" encoding="ISO-8859-1" ?> <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <title>Desenvolvimento Aberto</title> </head> <body> <p> <!-- Este é o modo de escrever código Java em uma pagina html --> <!-- utilize a marcação abaixo: --> <% out.println("Desenvolvimento Aberto - Usando Servlets"); %> </p> <br /> <form action="MeuResultado"> <fieldset> <legend>Escolha o vocalista da banda correspondente:</legend> <br /> Vocalistas: <br /> <select name="vocalistas"> <option value="Eddie Vedder">Eddie Vedder</option> <option value="Kurt Cobain">Kurt Cobain</option> <option value="Scott Weiland" selected>Scott Weiland</option> <option value="Layne Staley">Layne Staley </option> </select> <br> <br /> Bandas: <br /> <select name="bandas"> <option value="Stone Temple Pilots">Stone Temple Pilots</option> <option value="Alice in Chains">Alice in Chains</option> <option value="Nirvana" selected>Nirvana</option> <option value="Pearl Jam">Pearl Jam</option> </select> <br></br> <input type="submit" value="Enviar"> </fieldset> </form> </body> </html>
JSP – resultado.jsp
<?xml version="1.0" encoding="ISO-8859-1" ?> <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <title>Desenvolvimento Aberto - Resultado</title> </head> <body> <!-- Imprime Resultado --> <h2>Desenvolvimento Aberto - Resultado</h2> <% boolean valida = (boolean) request.getAttribute("valida"); String nome = (String) request.getAttribute("vocalistas"); String banda = (String) request.getAttribute("bandas"); if (valida == true) { out.println("Você acertou!!!"); out.println("O vocalista: " + nome + " pertence a banda: " + banda); } else { out.println("Você errou!!!"); out.println("O vocalista: " + nome + " não pertence banda: " + banda); } %> </body> </html>
Java – MeuResultado.java
package org.desenvolvimento.aberto; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/MeuResultado") public class MeuResultado extends HttpServlet { private static final long serialVersionUID = 1L; public MeuResultado() { super(); } protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Validador do resultado boolean valida = false; // Recupera parametros String nome = request.getParameter("vocalistas"); String banda = request.getParameter("bandas"); // Se nome e banda são iguais OK ou proxima tentativa senão falso if ((nome.equals("Eddie Vedder") && banda.equals("Pearl Jam")) || (nome.equals("Kurt Cobain") && banda.equals("Nirvana")) || (nome.equals("Scott Weiland") && banda.equals("Stone Temple Pilots")) || (nome.equals("Layne Staley") && banda.equals("Alice in Chains"))) { valida = true; } // Verifica saida no console System.out.println(nome); System.out.println(banda); System.out.println(valida); // Define parametros para a sessão request.setAttribute("vocalistas", nome); request.setAttribute("bandas", banda); request.setAttribute("valida", valida); // Chama pagina de resposta getServletContext().getRequestDispatcher("/resultado.jsp").forward(request, response); } }
Aí, valeu! Foi de grande ajuda. Só tenho uma observação, troque a variável boolean no
boolean valida = (boolean) request.getAttribute(“valida”); na pagina resultado.jsp,
boolean valida = (Boolean) request.getAttribute(“valida”). A variável boolean em letra minuscula não estava armazenando o valor do request e deu um erros aqui. Talvez seja porque eu usei o glassfish como servidor. Mas o Boolean em letra maiúscula foi feita exatamente para isso.