Servlets 如何在servlet中获取表单参数?request.getAttribute不起作用

Servlets 如何在servlet中获取表单参数?request.getAttribute不起作用,servlets,forms,http-request-parameters,Servlets,Forms,Http Request Parameters,是否可以让同一个servlet执行验证?看起来这里可能需要使用某种递归,但当我在电子邮件框中键入某些内容并单击submit时,电子邮件参数仍然为空。 单击提交后,URL将更改为:http://localhost/servlet/EmailServlet?Email=test 页面显示了Email:null和文本框,但我希望它能通过验证功能(即不为null)。有可能实现这种递归行为吗 public class EmailServlet extends HttpServlet { publ

是否可以让同一个servlet执行验证?看起来这里可能需要使用某种递归,但当我在电子邮件框中键入某些内容并单击submit时,电子邮件参数仍然为空。 单击提交后,URL将更改为:
http://localhost/servlet/EmailServlet?Email=test

页面显示了
Email:null
和文本框,但我希望它能通过验证功能(即不为null)。有可能实现这种递归行为吗

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();        
    }
}
公共类EmailServlet扩展了HttpServlet{
公共无效数据集(HttpServletRequest请求,
HttpServletResponse响应)引发ServletException,IOException
{
response.setContentType(“text/html”);
PrintWriter out=response.getWriter();
串模板=
“\n

\n” +“\n”; String email=(String)request.getAttribute(“email”); //虚假电子邮件验证。。。 如果(电子邮件==null) { out.println(“电子邮件:“+Email+”\n“+theForm”); } else if(emailAddressNotBogous(电子邮件)) { out.println(“谢谢!”); } 其他的 { out.println(““无效输入。请重试:\n”+表单); } out.flush(); } }

更新:正如公认的答案所指出的,代码中存在错误。将getAttribute更改为getParameter可修复“问题”:


String email=(String)request.getAttributegetParameter(“email”);

您可以将表单的方法设置为POST,然后在servlet中实现doPost()方法。将调用doGet()来显示表单,并调用doPost()来处理表单提交


或者,您可以使用doGet()方法测试是否存在任何参数。如果没有,则只显示表单。如果有,则处理提交…

要在您使用的servlet中获取表单参数,请执行以下操作:

  request.getParameter("Email");

是的,您可以使用同一个servlet,但使用两个不同的servlet会更容易做到这一点。

在不将方法更改为POST的情况下是否可以做到这一点?@Vincent DOH!我不敢相信我做到了……感谢您指出我的错误,现在一切都正常了。