struts2中服务器端数据校验

数据校验指对数据合法性进行检查,根据验证数据的位置可以分为客户端验证和服务器端验证,今天随笔主要写的是实现服务器端的数据验证,服务器端数据验证主要特点:

·数据提交后在服务器端验证

·防止绕过客户端验证提交的非法数据

·可以在服务器端处理数据前保证数据的合法性

Struts2中有两种实现服务器端验证的方式。

一、       使用ActionSupport编码实现验证

  1. 在Action类的方法中直接验证

在Action 类中直接进行校验是一种最为原始的方法,这里作为了解,首先是action 类中的验证代码:

private User user;

@Override

public String execute() throws Exception {

//验证用户名

if(user.getName()==null || "".equals(user.getName())){

this.addFieldError("user.name", "用户名不能为空");

return INPUT;

}

addActionError("用户名或密码错误!");//添加action错误提示

if(this.hasErrors()){

return INPUT;

}

return SUCCESS;

}

然后在JSP页面中使用标签输出错误信息。

<s:fielderror fieldName="user.name"></s:fielderror>  //根据字段输出错误信息

<s:actionerror/>   //输出action错误信息

  1. 重写validate()方法验证

Validate()是实现验证的方法,他会在业务方法之前调用,验证不通过则业务处理不执行.

private User user;

@Override

public String execute() throws Exception {

System.out.println("完成注册业务");

addActionError("用户名或密码错误!");

if(this.hasErrors()) return INPUT;

return SUCCESS;

}

@Override

public void validate() {

if(null==user.getName() || "".equals(user.getName())){

this.addFieldError("user.name", "用户名不能为空!");

}

}

  1. 使用validateXxx()方法实现验证

前面的validate()方法会对所有业务方法进行验证,而我们只需对单个业务类进行验证时就要用到validateXxx()方法,Xxx指被验证的方法名,代码如下.

public String register() throws Exception {

        System.out.println("完成注册业务");

        addActionError("用户名或密码错误!");

        if(this.hasErrors()) returnINPUT;

        returnSUCCESS;

     }

  

     publicvoid validateRegister() {

        if(null==user.getName() || "".equals(user.getName())){

           this.addFieldError("user.name", "用户名不能为空!");

        }

在register()被调用之前会先调用validateRegister()进行数据校验。

二、   使用验证框架实现验证

在实际开发中,很多验证是相同的,对于这些许重复实现的验证,完全可以统一实现,struts2的验证框架就实现了这一功能。使用验证框架时,所有的验证规则是写在配置文件中,便于开发与维护,所以这里详细介绍一下验证框架。

  1. 编写JSP数据输入页面

表单部分代码:

<form id="register" action="register.action" method="post">

<table >

<caption>注册</s:text></caption>

<tbody>

<tr>

<td>登录名:</s:text></td>

<td><input type="text" name="user.name" value="${user.name }" /></td>

<td><s:fielderror fieldName="user.name"></s:fielderror></td>

</tr>

<tr>

<td>密码:</s:text></td>

<td><input type="password" name="user.pass" /></td>

<td><s:fielderror fieldName="user.pass"></s:fielderror></td>

</tr>

<tr>

<td>重复密码:</s:text></td>

<td><input type="password" name="pass" /></td>

<td><s:fielderror fieldName="pass"></s:fielderror></td>

</tr>

<tr>

<td>年龄:</td>

<td><input type="text" name="user.age" /></td>

<td><s:fielderror fieldName="user.age"></s:fielderror></td>

</tr>

<tr>

<td>收入:</td>

<td><input type="text" name="user.income" /></td>

<td><s:fielderror fieldName="user.income"></s:fielderror></td>

</tr>

<tr>

<td>生日:</td>

<td><input type="text" name="user.birthday" /></td>

<td><s:fielderror fieldName="user.birthday"></s:fielderror></td>

</tr>

<tr>

<td>Email</td>

<td><input type="text" name="user.email" /></td>

<td><s:fielderror fieldName="user.email"></s:fielderror></td>

</tr>

<tr>

<td>个人主页 URL</td>

<td><input type="text" name="user.url" /></td>

<td><s:fielderror fieldName="user.url"></s:fielderror></td>

</tr>

<tr>

<td colspan="3" align="center"><input class="submit" type="submit" value="提交" /></td>

</tr>

</tbody>

</table></form>

  1. 编写action类和配置文件

首先是配置文件,配置文件的命名必须为Xxx-yyy-validation.xml,Xxx为对应的action类名,这个文件只要与对应action 类放在同一目录下就会被自动识别,这里命名为UserAction-register-validation.xml。

Action 中代码:

配置文件中的代码:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE validators PUBLIC

"-//Apache Struts//XWork Validator 1.0.2//EN"

"http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">

<validators>

<field name="user.name" >

<field-validator type="requiredstring">

<param name="trim">true</param>

<message>用户名不能为空</message>

</field-validator>

<field-validator type="regex">

<param name="expression"><![CDATA[\w{4,16}]]></param>

<message>用户名长度必须在 4-16 位之间</message>

</field-validator>

</field>

<field name="user.pass">

<field-validator type="requiredstring">

<message >密码不能为空</message>

</field-validator>

<field-validator type="stringlength">

<param name="maxLength">16</param>

<param name="minLength">6</param>

<message>密码长度必须在 ${minLength} - ${maxLength} 之间</message>

</field-validator>

</field>

<field name="pass">

<field-validator type="fieldexpression">

<param name="expression"><![CDATA[pass==user.pass]]></param>

<message>密码和确认密码必须一致</message>

</field-validator>

</field>

<field name="user.age">

<field-validator type="conversion"  short-circuit="true">

<message>年龄必须是整数</message>

</field-validator>

<field-validator type="required">

<message>年龄不能为空</message>

</field-validator>

<field-validator type="int">

<param name="max">150</param>

<param name="min">0</param>

<message>年龄必须在 ${min}-${max} 之间</message>

</field-validator>

</field>

<field name="user.income">

<field-validator type="conversion" short-circuit="true">

<message>收入必须是数字</message>

</field-validator>

<field-validator type="required">

<message>收入不能为空</message>

</field-validator>

<field-validator type="double">

<param name="maxInclusive">1000000</param>

<param name="minInclusive">2999.95</param>

<message>收入必须在 ${minInclusive}-${maxInclusive} 之间</message>

</field-validator>

</field>

<field name="user.birthday">

<field-validator type="conversion" short-circuit="true">

<message>生日必须写作:2008-08-08</message>

</field-validator>

<field-validator type="required" >

<message>生日不能为空</message>

</field-validator>

<field-validator type="date">

<param name="min">2000-01-01</param>

<param name="max">2009-12-31</param>

<message>生日必须在 (2000-01-01, 2009-12-31) 之间</message>

</field-validator>

</field>

<field name="user.email">

<field-validator type="requiredstring">

<message>email 不能为空</message>

</field-validator>

<field-validator type="email">

<message>email 格式不合法</message>

</field-validator>

</field>

<field name="user.url">

<field-validator type="requiredstring">

<message>个人主页必填</message>

</field-validator>

<field-validator type="url">

<message>url 地址错误</message>

</field-validator>

</field>

</validators>

至此验证规则也写完了,然后在我们提交表单的时候就可以看到错误提示了。

另外需要注意的是,struts2中内置了类型转换错误提示,所以有可能出现双重提示的状况。

这时候可以通过在struts.xml中设置解决。

<constant name="struts.custom.i18n.resources" value="msg"/> //设置提示资源msg

然后在src目录下简历msg.properties资源文件,添入xwork.default.invalid.fieldvalue=。就可以了。

到这里表单数据的后台验证就结束了。

最后附上一张数据验证流程图。

时间: 2024-08-06 20:32:13

struts2中服务器端数据校验的相关文章

SpringMVC中的数据校验

SpringMVC中的数据校验 这一篇博文主要总结一下springmvc中对数据的校验.在实际中,通常使用较多是前端的校验,比如页面中js校验,对于安全要求较高的建议在服务端也要进行校验.服务端校验可以是在控制层conroller,也可以是在业务层service,controller校验页面请求的参数的合法性,在服务端控制层conroller的校验,不区分客户端类型(浏览器.手机客户端.远程调用):service层主要校验关键业务参数,仅限于service接口中使用的参数.这里主要总结一下何如使

Struts2中对数据简单的验证和property标签的用法

使用addFieldError方法和s:fieldError标签简单处理数据校验 场景:对一个用户名进行验证,如果用户名不合法,则显示给客户端查看信息. URL请求地址: http://localhost:8080/Struts2_SimpleDataValiation/user/user!add?name=a 访问的Struts2配置,namespace="/user",action的name="user",Action所执行的方法method="add

【SpringMVC学习06】SpringMVC中的数据校验

这一篇博文主要总结一下springmvc中对数据的校验.在实际中,通常使用较多是前端的校验,比如页面中js校验,对于安全要求较高的建议在服务端也要进行校验.服务端校验可以是在控制层conroller,也可以是在业务层service,controller校验页面请求的参数的合法性,在服务端控制层conroller的校验,不区分客户端类型(浏览器.手机客户端.远程调用):service层主要校验关键业务参数,仅限于service接口中使用的参数.这里主要总结一下何如使用springmvc中contr

Struts2中请求参数校验

在Struts2中,请求参数的校验要放在服务端进行.其实我们在做.NET的项目时,使用过EasyUI,EasyUI有各种校验机制,那会是在客服端就直接对输入参数进行了校验.但是我们的Struts框架也是蛮强大的,它本身就给我们提供了非常详细的校验机制. 1.手动校验 使用手动校验,需要一下这么几个条件: ①你的Action要继承ActionSupport接口: ②重写validate接口,如果属性有问题,通过addFieldError(String,String)方法存储错误信息. ③如果向fi

Struts2中指定的校验文件不起作用的原因

转载请注意出处:http://blog.csdn.net/bettarwang/article/details/39801733 我们知道,假设要为某个Action指定校验文件.那么就要将"Action名-validation.xml"的校验文件放在与该Action在同一路径下,而且在struts.xml中指定<result name="input>的值,在input对应的文件里增加<s:fielderror/>就可以. 此时假设输入不符合校验规则,就

struts2 中的数据访问servletAPI

ActionContext包含其他数据对象,包括值栈 通过ActionContext访问数据 1.获得session域对象 2.获得application 原文地址:https://www.cnblogs.com/hellowq/p/10240349.html

使用Struts2实现数据校验

为什么需要数据校验呢?答案很简单,假如当你登录想要京东,这时就需要数据校验了如果不输入用户名的话,那么就不会登陆成功,并且会提示出"请输入用户名"的字样 那么,在Struts2中实现数据校验的方法有哪些呢?接下来我们探讨一下. 实现数据校验有四种方法: 1.用execute()方法实现数据校验 编写一个Action,继承ActionSupport类,重写execute() 步骤1:在Web项目的cn.happy.action下创建一个ExecuteAction(UserInfo为用户实

Struts2之数据校验

时间:2017-1-11 11:09 --Struts2提供的数据校验 在开发中,请求参数是需要校验的:    客户端:过滤正常用户的错误操作,通过JS代码完成    服务器:Java代码 Struts2提供的校验是服务器端校验. 校验方式分为两种:    1.手动校验(编码校验)    2.配置校验(自动校验,基于Annotation,基于XML) 1.手动校验:    要求:Action类必须继承ActionSupport,需要重写validate()方法(是Validateable接口中的

深入分析JavaWeb Item46 -- Struts2数据校验与国际化

1.用户输入数据的校验 1.校验方式 a:客户端校验.(防君子防不了小人)在页面中写js脚本. 这样做的好处是: 输入错误的话提醒比较及时: 减轻服务器的压力 b.服务器端校验. 数据安全 ,整个应用阻止非法数据的最后防线 而在实际开发中通常选择:a+b 2.服务器端数据校验: 1.编程式校验:自己Action中编写一个校验代码(缺点:验证规则都写在了代码中) 前提:动作类继承ActionSupport,重写Validateable接口中的validate()方法 ,在该方法中完成验证. 步骤如