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


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

     

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

    表单的确认

    客户端确认:

      减少服务器负载

      缩短用户等待时间

      兼容性难

    服务器端确认:

      统一确认

      兼容性强

      服务器负载重

    客户端验证例子

      首先建立一个表单,在其提交时用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):

    复制代码
    <%@ 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>
    复制代码
  • 相关阅读:
    Java for LeetCode 229 Majority Element II
    Java for LeetCode 228 Summary Ranges
    Java for LeetCode 227 Basic Calculator II
    Java for LintCode 颜色分类
    Java for LintCode 链表插入排序
    Java for LintCode 颠倒整数
    Java for LintCode 验证二叉查找树
    Java for LeetCode 226 Invert Binary Tree
    Java for LeetCode 225 Implement Stack using Queues
    Java for LeetCode 224 Basic Calculator
  • 原文地址:https://www.cnblogs.com/qmfsun/p/3795289.html
Copyright © 2020-2023  润新知