【问题标题】:How to get a form parameter in servlet? request.getAttribute does not work如何在 servlet 中获取表单参数? request.getAttribute 不起作用
【发布时间】:2010-02-18 21:18:41
【问题描述】:

是否可以让同一个 servlet 执行验证?似乎在这里可能不得不使用某种递归,但是当我在电子邮件框中输入内容并单击提交时,电子邮件参数仍然是空白的。 点击提交后,URL变为:http://localhost/servlet/EmailServlet?Email=test

页面显示Email: 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();        
    }
}

更新:正如接受的答案指出的那样,代码中存在错误。将 getAttribute 更改为 getParameter 解决了“问题”:)。

String email = (String) request.getAttributegetParameter("Email");

【问题讨论】:

    标签: servlets forms http-request-parameters


    【解决方案1】:

    要在您使用的 servlet 中获取表单参数:

      request.getParameter("Email");
    

    是的,您可以使用相同的 servlet,但使用两个不同的 servlet 会更容易。

    【讨论】:

    • @Vincent DOH!我不敢相信我做到了...感谢您指出我的错误,现在一切正常。
    【解决方案2】:

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

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

    【讨论】:

    • 不改变POST方式是否可以做到?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多