web工程前后台验证(后台合法性校验和页面元素校验)统一处理

前后台参数验证组件


大致思路:

合法性规则用正则表达式配置在配置文件中后台写校验类作为后台验证组件

定义servlet启动的时候读取配置文件生成js文件。作为前台验证

页面校验引入生成的js文件

 

一:合法性校验规则

1.定义config.properties 文件

#合法性规则限制

reg.username =^[a-zA-Z0-9]{32}$

reg.nickName =^[a-zA-Z0-9]{32}$

reg.loginName =^[a-zA-Z\u4e00-\u9fa5][a-zA-Z0-9_\u4e00-\u9fa5]{3,20}$

reg.password =^[a-zA-Z0-9]{32}$

reg.oldpwd =^[a-zA-Z0-9]{32}$

reg.newpwd =^[a-zA-Z0-9]{32}$

reg.email =[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

reg.mobile =^1[3|5|8][0-9]\\d{8}$

# 长度限制

minLen.email = 3

maxLen.email = 32

minLen.linkEmail= 3

maxLen.linkEmail= 32

maxLen.website= 100

 

注意:上述正则表达式有可能错误,实验用了username nickName没有问题。

 

二:后台验证

1.编写读取配置文件通用类

public abstract class PropertyUtil{

    private static final String DEFAULT_PROPERTY = "config";

    private static final String PROPERTY_SUFIX = ".properties";

    private static final Map<String, PropertiesConfiguration> CONFIGURATIONS = new HashMap<String, PropertiesConfiguration>();

   

。。。

详见实际工程

 

2.验证类

读取配置文件放在map中,然后判断

public void isValid(String paramName, String paramValue) {

        if(StringUtils.isBlank(paramValue)) { // 如果参数的值是空

            return;

        }

        // 正则验证

        String paramPattern = regMap.get(paramName);

        if (paramPattern == null) {

            return; // 没有记录相关的验证信息

        }

        if(!paramValue.matches(paramPattern)) {

            //throw newValidateException(paramName, ErrorCode.ILLEGAL_PARAM);

            System.out.println(paramName);

            System.out.println(ErrorCode.ILLEGAL_PARAM);

        }

       

        // 长度验证 

   

    }

详见实际工程

3.后台需要验证的地方直接调用上述验证类

 

三:前台验证

1.    定义servlet启动的时候读取配置文件生成js文件

该文件内容完整

@SuppressWarnings("serial")

public class ValidateServlet extends HttpServlet { 

    private String username = null;

    private String nickName = null;

   

    @Override

    protected void doGet(HttpServletRequest req, HttpServletResponse resp)

            throws ServletException, IOException {     

       

        StringBuilder contentBuilder = newStringBuilder();    

        contentBuilder.append("var usernamePattern=/").append(username).append("/g; ");

        contentBuilder.append("\r\n");

        contentBuilder.append("var nickNamePattern=/").append(nickName).append("/g; ");

        contentBuilder.append("\r\n");     

        contentBuilder.append("$(document).ready(function() {");

        contentBuilder.append("\r\n");

        contentBuilder.append("   try{\r\n");

        contentBuilder.append("       jQuery.validator.addMethod(\"regExp\", function(val, element,param) {\r\n");

        contentBuilder.append("           if(val && \"\"!=val) {\r\n");

        contentBuilder.append("               var regExp = param;\r\n");

        contentBuilder.append("               if(!val.match(regExp)) {\r\n");

        contentBuilder.append("                   return false;\r\n");

        contentBuilder.append("                 }\r\n");

        contentBuilder.append("             }\r\n");

        contentBuilder.append("             returntrue;\r\n");

        contentBuilder.append("         },\"\");\r\n");

        contentBuilder.append("     }catch(e){}\r\n");

        contentBuilder.append(" });");

       

        resp.setCharacterEncoding("UTF-8");

        resp.setContentType("text/javascript;charset=UTF-8");

        /* 不缓存  */

        resp.setHeader("Cache-Control","no-cache");

        resp.setHeader("Pragma", "no-cache");

        resp.setHeader("Expires", "-1");

        PrintWriter out = resp.getWriter();

        out.print(contentBuilder.toString());

    }

 

   

 

    @Override

    protected void doPost(HttpServletRequest req, HttpServletResponse resp)

            throws ServletException, IOException {

        doGet(req, resp);

    }

 

    @Override

    public void init() throws ServletException {

        super.init();

        // 将配置文件中的信息取出

        username = PropertyUtil.get("reg.username");       

        nickName = PropertyUtil.get("reg.nickName");

       

    }

   

}

2.        web.xml中配置该servlet生成的js文件

  <servlet>

        <servlet-name>ValidateServlet</servlet-name>

        <servlet-class>com.common.util.validate.ValidateServlet</servlet-class>

    </servlet>

   

    <servlet-mapping>

        <servlet-name>ValidateServlet</servlet-name>

        <url-pattern>/js/customvalidate.js</url-pattern>

</servlet-mapping>

 

 

3.js文件的完整内容

 

var usernamePattern=/^[a-zA-Z0-9]{32}$/g;

var nickNamePattern=/^[a-zA-Z0-9]{32}$/g;

$(document).ready(function() {

   try{

       jQuery.validator.addMethod("regExp", function(val, element,param) {

           if(val && ""!=val) {

                var regExp = param;

                if(!val.match(regExp)) {

                    return false;

                                      }

                               }

                               returntrue;

                       },"");

               }catch(e){}

        });

 

3.    页面验证

页面完整

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type"content="text/html; charset=utf-8" />

<link href="css/style.css"rel="stylesheet" type="text/css" />

<script type="text/javascript" src="js/jquery.js"></script>

<script type="text/javascript" src="js/jquery.history.js"></script>

<script type="text/javascript" src="js/customvalidate.js"></script>

<script type="text/javascript" src="js/jquery.validate.min.js"></script>

<script>

$(document).ready(function(){

   

    //inputForm注册validate函数

    $("#inputForm").validate({

        rules: {

            username: {

                required:true,

                maxlength: 20,

                minlength: 4,               

                regExp: usernamePattern

            },nickName: {

                required:true,

                maxlength: 20,

                minlength: 4,

                regExp: nickNamePattern

            }

        },

        messages: {

            username: {            

                regExp: "username is not valid"

            },

            nickName:{

                regExp: "nickname is not valid"

            }

        }

    });        

});        

 

function save(){

            $("#inputForm").submit();

        }

</script>

</head>

        <ul class="l_tab_cright">       

        <form id="inputForm"  method="post" >

                            <table width=" " border="0"cellspacing="0" cellpadding="0"class="l_masg">

                                 <tr>

                                   <td align="right"><label  class="l_xing">*</label ><label for="loginName" class="control-label">username:</label></td>

                                   <td><input type="text"name="username" id="username"class="l_onf l_onf_naml"  maxlength="20"  tip="username"/>                    

                                   </td>

                                </tr>                             

                                       

                                <tr>

                                   <td align="right"><label for="nickName" class="control-label">nickname:</label></td>

                                   <td><input type="text"name="nickName" id="nickName"class="l_onf l_onf_naml" maxlength="20" tip="<spring:messagecode='screen.user.nickname.tip'/>"/></td>

                                </tr>

                                                             

                                <tr>

                                   <td align="right"></td>

                                   <td>

                                   <a id="submit_btn"class="l_ok" onclick="save()" style="cursor:hand" >submit</a>                        

                                     <a id="cancel_btn" class="l_cancel"  value=""onclick="history.back()"style="cursor:hand">return</a>                             

                                   </td>

                               </tr>         

                            </table>

                        </form>

        </ul>

</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值