2010-02-18 48 views
3

是否可以让相同的servlet执行验证?看起来,这里可能需要使用某种递归,但是当我在电子邮件框中输入某些内容并单击提交时,电子邮件参数仍为空。 当我点击提交后,URL更改为:http://localhost/servlet/EmailServlet?Email=test如何在servlet中获取表单参数? request.getAttribute不起作用

该页面显示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) 请求。 getAttribute getParameter(“Email”);

回答

3

要获得一个servlet表格参数的使用:

request.getParameter("Email"); 

是的,你可以使用同一个servlet,但它会比较容易的方式使用两个不同servlets来做到这一点。

+0

@Vincent DOH!我不能相信我这么做......谢谢指出我的错误,现在一切正常。 – Kiril 2010-02-18 21:32:08

1

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

或者您可以通过doGet()方法测试任何参数的存在。如果没有任何显示,则只显示表单。如果有那么处理提交...

+0

是否可以在不更改POST方法的情况下执行此操作? – Kiril 2010-02-18 21:27:16