简析struts2.x中的输入校验
2012-09-04 22:00
316 查看
在web中,对于页面表单的输入校验,在客户端我们可以写js脚本来校验。但如果为了提高应用的安全性通常除了在客户端利用js来校验表单,我们通常还会在服务器端进行再次校验以提高安全性。而struts的输入校验则很好的解决了服务端的校验,使得开发者只需编写校验规则文件即可,这样更加方便的管理服务端的校验规则。除此以外,开发者还可以通过重写validate方法来完成自定义校验。
假如有个登录界面login.jsp中有个登录表单如下:
对应该表单,我们有个Action类叫LoginAction,该类的大致代码如下:
对应该Action我们有一个LoginAction类的校验文件。在struts2中,不同于struts1的输入校验文件命名方法,Struts2中单独对每一个Action指定一个校验文件,它的命名方式ActionName-validate.xml。他存放在与Action相同的保重,校验只需要配置一个校验文件即可实现。系统的其他地方不需要改动,系统自动加载该文件。 因此我们对应LoginAction类有个loginAction-validation.xml。该校验文件代码如下:
在该校验文件中,只有一个而且只能只有一个validators根元素,该validators根元素可以包含多个field元素,一个filed元素对应一个action的属性,更准确的说应该是对应login.jsp表单中的属性。那如果再校验中用户验证失败struts2会怎样处理呢?在struts2中,如果用户输入不符合校验文件的规则,即校验文件判断出用户输入了不合法的东西,此时struts2会返回名为“input”的Result,所以在对应的struts配置文件中,我们还需要配置一个名位“input”的Result。这里假如我们有个user-config.xml文件。该文件大致代码如下:
如果我们的应用就只我们国人用的话,那就没有必要弄个什么国际化信息咯。但为了体现我们的应用于国际接轨,通常我们都会配置国际化的信息。那如果配置国际化信息的话,那我们再验证文件中的message属性中就不能那样写中文了,而应该使用一个value-key对应的方式了。下面我们将改写校验文件loginAction-validation.xml,改写后的该文件代码如下:
我们还要新建一个国际化信息的资源文件假如名叫:login-CN.properties,该资源文件中的代码如下:
由于我们资源文件中的中文不能被识别,所以我们需要使用比如native2ascii的软件工具转化该资源文件。
还需建一个英文的资源文件login-EN.properties,该资源文件中的代码如下:
假如有个登录界面login.jsp中有个登录表单如下:
<s:form action="login"> <s:textfield name="name" label="用户名" /> <s:textfield name="password" label="密码" /> </s:form>
对应该表单,我们有个Action类叫LoginAction,该类的大致代码如下:
public class LoginAction extends ActionSupprts{ private String name; private String password; //name和password两个属性的set和get方法省略 public String execue() throws Exception{ //do something here } }
对应该Action我们有一个LoginAction类的校验文件。在struts2中,不同于struts1的输入校验文件命名方法,Struts2中单独对每一个Action指定一个校验文件,它的命名方式ActionName-validate.xml。他存放在与Action相同的保重,校验只需要配置一个校验文件即可实现。系统的其他地方不需要改动,系统自动加载该文件。 因此我们对应LoginAction类有个loginAction-validation.xml。该校验文件代码如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd"> <!--校验文件的根元素--> <validators> <!--校验Action的name属性--> <field name="name"> <!--指定name属性必须满足必填规则--> <field-validator type="requiredstring"> <!--校验去掉name属性的前后空格,且指定name为必填属性--> <param name="trim">true</param> <!--提示信息--> <message>用户名不能为空!</message> </field-validator> </field> <field name="password"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>密码不能为空!</message> </field-validator> <!—指定密码必须满足匹配指定的正则表达式--> <field-validator type="regex"> <param name="expression"><![CDATA[(\4{4,12})]]></param> <message>密码只能是字母和数字,且长度在4到12之间</message> </field-validator> </field> </validators>
在该校验文件中,只有一个而且只能只有一个validators根元素,该validators根元素可以包含多个field元素,一个filed元素对应一个action的属性,更准确的说应该是对应login.jsp表单中的属性。那如果再校验中用户验证失败struts2会怎样处理呢?在struts2中,如果用户输入不符合校验文件的规则,即校验文件判断出用户输入了不合法的东西,此时struts2会返回名为“input”的Result,所以在对应的struts配置文件中,我们还需要配置一个名位“input”的Result。这里假如我们有个user-config.xml文件。该文件大致代码如下:
<action name=login class="login的包名"> <resule name="input" >/login.jsp</resule> </action>
如果我们的应用就只我们国人用的话,那就没有必要弄个什么国际化信息咯。但为了体现我们的应用于国际接轨,通常我们都会配置国际化的信息。那如果配置国际化信息的话,那我们再验证文件中的message属性中就不能那样写中文了,而应该使用一个value-key对应的方式了。下面我们将改写校验文件loginAction-validation.xml,改写后的该文件代码如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd"> <!--校验文件的根元素--> <validators> <!--校验Action的name属性--> <field name="name"> <!--指定name属性必须满足必填规则--> <field-validator type="requiredstring"> <!--校验去掉name属性的前后空格,且指定name为必填属性--> <param name="trim">true</param> <!--提示信息--> <message key="name.requried" /> //请注意这里的写法 </field-validator> </field> <field name="password"> <field-validator type="requiredstring"> <param name="trim">true</param> <message key="password.requried" /> </field-validator> <!—指定密码必须满足匹配指定的正则表达式--> <field-validator type="regex"> <param name="expression"><![CDATA[(\4{4,12})]]></param> <message key="password.regex" /> </field-validator> </field> </validators>
我们还要新建一个国际化信息的资源文件假如名叫:login-CN.properties,该资源文件中的代码如下:
name.requried=用户名为空 password.requried=密码不能为空 pass.regex=密码只能是字母和数字,且长度在4到12之间
由于我们资源文件中的中文不能被识别,所以我们需要使用比如native2ascii的软件工具转化该资源文件。
还需建一个英文的资源文件login-EN.properties,该资源文件中的代码如下:
name.requried=name cannot be empty password.requried=password cannot be empty pass.regex=The password is only letters and Numbers, and length in 4 to 12 between
相关文章推荐
- Struts 使用要点(概述,Spring与Struts的整合,输入校验与消息显示)
- Struts 2读书笔记-----使用Struts 2的输入校验
- struts第十一天--通过xml的方式来对输入参数进行校验
- 在Struts中对用户输入信息的校验方法对比:validate 和validator
- Struts2 输入校验
- Struts 使用要点(概述,Spring与Struts的整合,输入校验与消息显示)
- Struts 2的输入校验(一)
- struts第十二天--通过xml对指定方法进行输入校验
- Struts 2 的输入校验(2)
- Struts 2的输入校验(二)
- Struts 2读书笔记-----使用Struts 2的输入校验
- Struts2.1笔记(七):Struts2输入校验
- Struts输入校验之后保留原先的输入值
- struts2之二(输入校验)
- struts第十天-----对action中的所有方法进行输入校验
- Struts 学习笔记2(输入校验、国际化、异常处理)
- Struts 2 类型转换器 输入校验 拦截器
- Struts中使用validate()输入校验方法详解
- struts 输入校验
- Struts 2 的输入校验