服务器端验证表单 小结

来源:互联网 发布:小说美利坚仓储淘宝王 编辑:程序博客网 时间:2024/05/16 14:15

  Form 中action ="formservlet" 此servlet给出验证的方式,类似客户端验证的js代码段。首先要处理的就是如何从form中获取参数的问题。Servlet 继承HttpServlet接口,有response对象和request对象。这样可以通过response对象的getparameter()方法获取某一个name值,如文本框的值。而按钮可通过getparameterValues()方法获得并存入字符串数组,再计算数组长度就可以得知有没有点击性别按钮。而多选框如兴趣选项,可以计算字符串的长度得知。

     接下来就是如何显示结果的问题。有重定向方法和转发两种方式,可以直接转到一个servlet或者jsp。HttpServletResponse 类的重定向方法response对象的 SendRedirect() 和request对象的RequestDistpacher类的转发方法forward(),实现机制不同,查看地址栏显示时不同。

     在显示结果的jsp页面中,仍要处理怎么从servlet获取参数。request对象的getAttribute()和setAttribute()方法成对出现,解决客户端信息和服务器端信息的传递。request对象的getParameter()可以直接获取客户端信息。当得到参数后,该是展示jsp 的html特色的时候了。

遇到问题:

1.servlet 中判断文本框是否有值代码为:if(username == null || "".equals(username))  ,因为此username是request对象的getParameter("username")方法获得。一种可能是此对象没有成功获取,即对象不存在;另一种可能是此对象存在,但是值为空。

2.protected void doPost(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {} 把doPost改成dopost出现405错误

3.formservlet中的list不通过request对象的setAttribute是不能传给JSP页面的。

public String getParameter(String name)返回由name指定的请求参数值,如果指定参数不存在,则返回null值。若指定参数存在,则返回空字符串。使用该方法必须保证指定的参数值只有一个。

public String[] getParameterValues(String name)返回由指定参数name所包含的所有值,返回值是一个String数组。如果指定的参数不存在,则返回null。该方法适用于参数有多个值的情况。如果参数只有一个值,则返回的数组长度为一。

public Enumeration getParameterNames()返回一个Enumeration对象,它包含请求中所有的请求参数名,元素是String类型的。如果没有请求参数,则返回一个空的Enumeration对象。可以在enumeration对象上迭代得到每个请求参数名,然后再调用请求对象的getParameter()或getParameterValues()方法得到每个参数值。

4.RequestDispatcher对象是一个web资源的包装器,可以用来把当前的请求转发到该资源。这种转发时服务器端控制权的转向,客户端发来的请求将交由新的页面来处理。使用响应对象的sendRedirect()方法实际是服务器向浏览器发送一个特殊的响应头。它命令浏览器连接到新的位置。重定向是作为不同请求来看待的。因此所有请求作用域的参数在重定向到下一个页面时都会失效。另外,使用sendRedirect()方法重定向时,资源不能位于web-inf中。在调用sendRedirect()方法之前,主页面不能有内容输出。在调用sendRedirect()之后应该有一个return语句。所以在此servlet不能采用重定向方法,也不能使用getParameterValues()获取参数。

附上代码:

formservlet.java

public class formservlet extends HttpServlet {
    
protected void dopost(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
    String username = req.getParameter("username");
    String password = req.getParameter("password");
    String gender =  req.getParameter("gender");
    String[] interest = req.getParameterValues("interest");
    String address = req.getParameter("address");
    String instruction = req.getParameter("instruction");
    username = new String(username.getBytes("iso-8859-1"),"utf-8");
    password = new String(password.getBytes("iso-8859-1"),"utf-8");
    
    
    address = new String(address.getBytes("iso-8859-1"),"utf-8");
    gender = new String(gender.getBytes("iso-8859-1"),"utf-8");
    instruction = new String(instruction.getBytes("iso-8859-1"),"utf-8");

    
    List<String> list = new ArrayList<String>();
    if(username == null || "".equals(username)){
        list.add("username is blank 空!");
    }
    
    else if(username.length() < 4 ){
        list.add("the length of username is short!");
        
    }
    else if(username.length() > 10){
        list.add("the length of username is long!");
        
    }
    if(password == null || "".equals("password")){
        list.add("password is blank!");
    }
    else if(password.length() < 4 ){
        list.add("the length of password is short!");
    }
    else if( password.length() > 10){
        list.add("the length of password is long!");
    }
    if(gender == null ){
        list.add("gender is blank!");
    }
    if(interest == null){
        list.add("the length of interest is blank!");
    }    
    else if(interest.length > 3){
        list.add("the length of interest is blank!");
    }
    
    if(instruction == null || "".equals("instruction")){
        list.add("you should have some description!");
            
    }

    if(list.isEmpty()){
        req.setAttribute("username", username);
        req.setAttribute("password", password);
        req.setAttribute("gender", gender);
        req.setAttribute("interest", interest);
        req.setAttribute("address", address);
        req.setAttribute("instruction", instruction);
        req.getRequestDispatcher("success.jsp").forward(req, resp);
        }
    else {
        req.setAttribute("error", list);
        req.getRequestDispatcher("error.jsp").forward(req,resp);
    }
    }

}

error.jsp:

<body>提交表单失败!<br>
   <% List<String> list = (List<String> )request.getAttribute("error");
   for(String str: list){
   %>
   <ul>
   <li><font color="#ff0000"> </font>
   <%=str %>
   </li>
   </ul>
   <%} %>
 
  </body>

succes.jsp:

<body>提交表单成功!<br>
    用户名 <%= request.getAttribute("username") %><br>
    密码<%= request.getAttribute("password") %><br>
    性别<%= request.getAttribute("gender") %><br>
    兴趣<% String[] interest = (String[])request.getAttribute("interest");
    for(String str : interest){
    %>
    <%= str %>&nbsp;&nbsp;
    <%} %>
    <br>
    地址<%= request.getAttribute("address") %><br>
    说明<%= request.getAttribute("instruction") %>
     
  </body>