Passar variavel pelo servlet

2 respostas
j_gff
Ja tentei passar o valor da variavel pelos servlet mas não deu resultado, então resolvi fazer com um servlet só, mas como ficaria as 2 questões abaixo juntas sendo verificadas pelo mesmo servlet?
public class validarResposta extends HttpServlet {

    int pontuacao;

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        String questao1 = request.getParameter("questao1");
        System.out.println(questao1);


        try {

            if (questao1.equals("op1")) {
                System.out.println("");
            } else if (questao1.equals("op2")) {
                System.out.println("");
            } else if (questao1.equals("op3")) {
                pontuacao = pontuacao + 1;

            }

        } finally {

            RequestDispatcher rd = null;
            rd = request.getRequestDispatcher("questao2.jsp?pontuacao=" + pontuacao);
            rd.forward(request, response);
            out.close();
        }
    }
}



public class validarResposta2 extends HttpServlet {

    int pontuacao;

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        String questao2 = request.getParameter("questao2");
        System.out.println(questao2);

        try {

            if (questao2.equals("r2")) {
                System.out.println("");
            } else if (questao2.equals("r3")) {
                System.out.println("");
            } else if (questao2.equals("r4")) {
                pontuacao = pontuacao + 1;
            }

        } finally {

            RequestDispatcher rd = null;
            rd = request.getRequestDispatcher("questao3.jsp?pontuacao=" + pontuacao);
            rd.forward(request, response);
            out.close();
        }
    }
}

 <form action="validarResposta" method="POST" name="form1" onsubmit="return validaForm()" >
            <h2>Bem vindo ao simulado on-line!</h2>
            Questão 1: Qual declaração é utilizada pelo HTML5?<br>
            <br><hr>
            <input type="radio" name="questao1" value="op1" id="questao1" /><strong><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"></strong><br><br>
            <input type="radio" name="questao1" value="op2" id="questao1"/><strong><!DOCTYPE HTML</strong>><br><br>
            <input type="radio" name="questao1" value="op3" id="questao1"/><strong><html> </strong><br><br>
            <hr>
            <input type="submit" value="Responder" />
          
        </form></td>


  <form action="validarResposta2" method="POST" name="form2" onsubmit="return validaForm()">
            <h2>Bem vindo ao simulado on-line!</h2>
            Questão 2: Qual das tags está presente na nova versão?<br>
            <br><hr>
            <input type="radio" name="questao2" value="r2" />title<br><br>
            <input type="radio" name="questao2" value="r3" />marquee<br><br>
            <input type="radio" name="questao2" value="r4" />canvas<br><br>
            <hr>
            <input type="submit" value="Responder" />
           
        </form>

2 Respostas

inacio.ferrarini

Olá,

Para “passar uma variável” entre Servlets, você tem várias possibilidades: Request, Session, Application, Cookies, etc; Porém, a depender do seu escopo e de sua necessidade, uma pode ser mais adequada e algumas podem não ser adequadas.

Não seria uma boa prática você colocar todo o código em uma Servlet só. O que você poderia fazer seria usar Front Controller, e, a partir dos parâmetros passados para a Servlet, ela obter o conteúdo que será exibido e pontuar as escolhas, porém, todo o código referente a obter conteúdo e pontuar escolhas estariam em outras classes.

Pode parecer chato/confuso a quantidade de classes que são criadas, mas, é para fins de organização e manutenabilidade do código.

No caso, se suas questões e respostas estão em um banco de dados, a Servlet se comunicaria com o provedor de questões, obteria a questão. A seguir, quando a resposta fosse enviada, a Servlet se comunicaria com o provedor de resultados e pediria que o provedor corrigisse a questão e o resultado enviado.

Uma possibilidade é você usar doGet para obter as questões e doPost para corrigir o resultado.

paulo1911

Olá j_ff,

O Amigo Inacio falo tudo!

É mais por questão de organização e manutenção que vc deve organizar um pouco melhor esse seu código,
vc poderia também criar esse Servlet front controler com um filtro declarado no seu wb.xml…ou seja são muitas possibilidades mas primeiro pense na forma como o amigo inacio citou, crie um serviço de perguntas e outro de respostas para ficar mais facil a pontuação e use o "request.getRequestDispatcher(“pagina.jsp”).forward(request,response); para encaminhar para outros servlets e jsp suas requisições…pode te ajudar bastante.

Essa é minha dica…

Fallow
Abraço

Criado 15 de março de 2011
Ultima resposta 15 de mar. de 2011
Respostas 2
Participantes 3