Como obter um parâmetro de formulário no servlet? request.getAttribute não funciona
-
21-09-2019 - |
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");
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 ...