Pergunta

É possível fazer com que o mesmo servlet execute validação? Parece que se pode ter que utilizar algum tipo de recursão aqui, mas quando eu digito algo na caixa de email e clique em enviar o parâmetro de email ainda está em branco. Depois de clicar em enviar, o URL muda para: http://localhost/servlet/EmailServlet?Email=test

A página mostra Email: null e a caixa de texto, mas eu esperava que ela passasse pela função de validação (ou seja, não fosse nula). É possível alcançar esse tipo de comportamento recursivo?

public class EmailServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, 
            HttpServletResponse response) throws ServletException, IOException 
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        String theForm =
            "<FORM METHOD=\"GET\" ACTION=\"EmailServlet\">\n<INPUT TYPE=\"TEXT\" NAME=\"Email\"><P>\n" 
            + "<INPUT TYPE=\"SUBMIT\">\n</FORM>";
        String email = (String) request.getAttribute("Email");

        // Bogus email validation...
        if( email == null )
        {
            out.println("Email: " + email + "\n" + theForm);
        }
        else if(emailAddressNotBogous(email))
        {
            out.println("Thank you!");
        }
        else
        {
            out.println("“Invalid input. Please try again:\n" + theForm);
        }
        out.flush();        
    }
}

ATUALIZAÇÃO: Como a resposta aceita apontou, houve um erro no código. Alterar o getAttribute para o getParameter corrige o "problema" :).

String email = (Corda) solicitar.getattributegetParameter ("email");

Foi útil?

Solução

Para obter um parâmetro de formulário em um servlet que você usa:

  request.getParameter("Email");

E sim, você pode usar o mesmo servlet, mas seria muito mais fácil usar dois servlets diferentes para fazer isso.

Outras dicas

Você pode ter o método do formulário definido para postar e, em seguida, implementar um método doPost () em seu servlet. O DOGET () será chamado para exibir o formulário e o DoPost () será chamado para processar o envio do formulário.

Como alternativa, você pode fazer o teste do método doget () para a presença de qualquer parâmetros. Se não houver, basta exibir o formulário. Se houver, processe o envio ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top