表单的验证:客户端验证和服务器端验证



表单的验证:客户端验证和服务器端验证


表单的确认

客户端确认:

减少服务器负载

缩短用户等待时间

兼容性难

服务器端确认:

统一确认

兼容性强

服务器负载重


客户端验证例子

首先建立一个表单,在其提交时用JavaScript方法进行验证,若该方法返回true,则进行表单的提交,若返回false,则表单不提交。


​​​​

<!-- 表单提交时执行JavaScript方法validate(),如果该方法返回false,那么表单是不会提交的 -->     <form onsubmit="return validate()" action="servlet/ValidateServlet">     username:<input type="text" name="username" id="username1"><br>     password:<input type="password" name="password" id="password1"><br>     re-password:<input type="password" name="repassword" id="repassword1"><br>     <input type="submit" value="submit">     </form>

​​​​


其中用于验证的JavaScript方法如下:

​​​​

<script type="text/javascript">         function validate()         {             //第一种方式:通过ID获取元素             // var username = document.getElementById("username1");             // var password = document.getElementById("password1");             // var repassword = document.getElementById("repassword1");                          //第二种方式:通过名字获取             var username = document.getElementsByName("username")[0];//因为允许名字重复             var password = document.getElementsByName("password")[0];             var repassword = document.getElementsByName("repassword")[0];                          //判断用户名是否为空             if("" == username.value)             {                 //判断语句也可以写: username.value.length == 0                 alert("username can't be blank!");                 return false;                              }                          //密码和重复密码内容一样,长度在6到10之间                          //先验证密码长度             if(password.value.length < 6 || password.value.length > 10)             {                 alert("length of password is invalid!");                 return false;             }             if(repassword.value.length < 6 || repassword.value.length > 10)             {                 alert("length of repassword is invalid!");                 return false;             }                          //再验证重复密码和密码是否相同             if(password != repassword)             {                 alert("password and repassword don't match!");                 return false;                               }                          //通过重重考验后返回true,进行表单提交             return true;                  }     </script>

​​​​

在验证有误的时候,弹出对话框提示,并且返回false,不提交表单。

完整的login.jsp如下(在客户端验证的时候可以先不管转向的Servlet):

表单的验证:客户端验证和服务器端验证_javascript ​​​​​

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html>   <head>     <script type="text/javascript">         function validate()         {             //第一种方式:通过ID获取元素             // var username = document.getElementById("username1");             // var password = document.getElementById("password1");             // var repassword = document.getElementById("repassword1");                          //第二种方式:通过名字获取             var username = document.getElementsByName("username")[0];//因为允许名字重复             var password = document.getElementsByName("password")[0];             var repassword = document.getElementsByName("repassword")[0];                          //判断用户名是否为空             if("" == username.value)             {                 //判断语句也可以写: username.value.length == 0                 alert("username can't be blank!");                 return false;                              }                          //密码和重复密码内容一样,长度在6到10之间                          //先验证密码长度             if(password.value.length < 6 || password.value.length > 10)             {                 alert("length of password is invalid!");                 return false;             }             if(repassword.value.length < 6 || repassword.value.length > 10)             {                 alert("length of repassword is invalid!");                 return false;             }                          //再验证重复密码和密码是否相同             if(password != repassword)             {                 alert("password and repassword don't match!");                 return false;                               }                          //通过重重考验后返回true,进行表单提交             return true;                  }     </script>    </head>      <body>       <!-- 表单提交时执行JavaScript方法validate(),如果该方法返回false,那么表单是不会提交的 -->     <form onsubmit="return validate()" action="servlet/ValidateServlet">     username:<input type="text" name="username" id="username1"><br>     password:<input type="password" name="password" id="password1"><br>     re-password:<input type="password" name="repassword" id="repassword1"><br>     <input type="submit" value="submit">     </form>   </body> </html>

​​​​


但是客户端的验证是不可靠的,用户可以查看源代码,找到表单action的Servlet,然后转向这个地址,将参数用?连接在地址之后,这时候参数是没有经过客户端校验的


服务器端验证例子

从表单中获得参数:JSP通过request内置对象获取表单信息,用不同的方法获取不同种类的信息。

服务器端验证程序,先将客户端验证部分去掉,即去掉 表单中的:onsubmit="return validate()"

那么用户在表单中提交的数据将直接传到服务器端,服务器端Servlet对其进行验证:

方式如下:有错误时将错误信息放在一个String类型的List中,最后判断这个List是否为空,如果为空,转向验证成功页面;如果List不为空,则转向失败页面,显示错误信息。


​​​​

package com.shengqishiwind.servlet;  import java.io.IOException; import java.util.ArrayList; import java.util.List;  import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;    public class ValidateServlet extends HttpServlet {     @Override     protected void doGet(HttpServletRequest req, HttpServletResponse resp)             throws ServletException, IOException     {         String username = req.getParameter("username");         String password = req.getParameter("password");         String repassword = req.getParameter("repassword");                  List<String> list = new ArrayList<String>();         if(null == username || "".equals(username))         {             list.add("username can't be blank!");         }                  if(null == password || password.length()<6 || password.length()>10)         {             list.add("password should be between 6 and 10");         }         if(null == repassword || repassword.length()<6 || repassword.length()>10)         {             list.add("repassword should be between 6 and 10");         }                  if(null != password && null != repassword && !password.equals(repassword))         {             list.add("password and repassword don't match!");         }                  //有两种结果:验证通过和不通过         if(list.isEmpty())         {             req.setAttribute("username", username);             req.setAttribute("password", password);             req.getRequestDispatcher("../success.jsp").forward(req, resp);                      }         else          {             req.setAttribute("error", list);             req.getRequestDispatcher("../error.jsp").forward(req, resp);         }               }          @Override     protected void doPost(HttpServletRequest req, HttpServletResponse resp)             throws ServletException, IOException     {          this.doGet(req, resp);     }  }

​​​​



成功页面JSP body部分:


<body>     username:<%= request.getAttribute("username") %><br>     password:<%= request.getAttribute("password") %><br>   </body>



失败页面:

​​​​

<body>     <h1>login failed</h1>     <% List<String> list = (List<String>)request.getAttribute("error");     for(String str: list)     {         out.println(str+"<br>");       }     %>   </body>

​​​​