简析struts2.x中的输入校验

来源:互联网 发布:linux视频编辑器4k 编辑:程序博客网 时间:2024/05/19 19:59

      在web中,对于页面表单的输入校验,在客户端我们可以写js脚本来校验。但如果为了提高应用的安全性通常除了在客户端利用js来校验表单,我们通常还会在服务器端进行再次校验以提高安全性。而struts的输入校验则很好的解决了服务端的校验,使得开发者只需编写校验规则文件即可,这样更加方便的管理服务端的校验规则。除此以外,开发者还可以通过重写validate方法来完成自定义校验。

假如有个登录界面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 emptypassword.requried=password cannot be empty pass.regex=The password is only letters and Numbers, and length in 4 to 12 between      

原创粉丝点击