欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Struts2的输入校验实例代码

程序员文章站 2024-03-05 12:58:54
在我们项目实际开发中在数据校验时,分为两种,一种是前端校验,一种是服务器校验:    客户端校验:主要是通过jsp写js脚本,它的优点很明显,就是输入...

在我们项目实际开发中在数据校验时,分为两种,一种是前端校验,一种是服务器校验:

   客户端校验:主要是通过jsp写js脚本,它的优点很明显,就是输入错误的话提醒比较及时,能够减轻服务器的负担,但是客户端校验并不是安全的,简单来讲就是防君子防不了小人。

   服务器端校验:最大特点就是数据安全,但是如果只有服务器端校验,会大大增加服务器端的负担。

所以一般在我们开发中,是客户端和服务器端校验相结合作用的。

那这篇文章,我只讲服务器端校验,在struts2支持两种校验方式:

    代码校验 :在服务器通过编辑java代码完成数据校验

   配置校验: xml配置校验 通过xml配置文件完成数据的校验

(1)代码校验:

    代码校验分为三个步骤: 

步骤一、封装数据

步骤二、实现要校验的action  必须继承actionsupport

步骤三、覆盖validate方法  然后完成业务逻辑数据的校验

用户界面 register.jsp

<%@ page language="java" import="java.util.*" pageencoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
 <head>
 <title>用户注册</title>
 </head> 
 <body style="text-align: center;">
 <table align="center" width="50%">
  <tr>
   <td style="color: red">
    <!-- <s:fielderror></s:fielderror> --> <!-- 这里是显示错误的地方 -->
   </td>
  </tr> 
 </table>
  <form action="${pagecontext.request.contextpath }/login" method="post" >
   用户名:<input type="text" name="username"><br><br>
   密  码:<input type="text" name="password"><br><br>
     确认密码:<input type="text" name="password2"><br><br>
      <input type="reset" value="清空">
      <input type="submit" value="注册">
  </form>
 </body>
</html>

struts.xml

<?xml version="1.0" encoding="utf-8" ?>
<!doctype struts public
 "-//apache software foundation//dtd struts configuration 2.3//en"
 "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts> 
  <!-- 配置常量信息 -->
  <constant name="struts.devmode" value="true"></constant>  
  <package name="struts2" extends="struts-default" >
   <action name="login" class="com.study.login.registeraction">
   <result name="success">/success.jsp</result>
   <!-- 在input视图中可以通过<s:fielderror/>显示失败信息 -->
   <result name="input">/register.jsp</result>
   </action>
  </package>   
</struts>

registeraction.java

import com.opensymphony.xwork2.actionsupport;
public class registeraction extends actionsupport{
 private string username;
 private string password;
 private string password2;
 //这里我通过set方法封装数据 
 public void setusername(string username) {
  this.username = username;
 }
 public void setpassword(string password) {
  this.password = password;
 }
 public void setpassword2(string password2) {
  this.password2 = password2;
 }
 @override
 public string execute() throws exception {
  return none;
 }
 //在服务器端需要完成对数据的校验
 @override
 public void validate() {
  //测试是否得到属性值,证实已经得到
 system.out.println(username+"---"+password+"---"+password2);
 if(username==null || username.length()<6 || username.length()>20){
  //把错误信息保存到字段中
  this.addfielderror("username", "有户名输入不合法");
 }
 if(password==null || password.length()<6 || password.length()>20){
  //把错误信息保存到字段中
  this.addfielderror("password", "密码输入不合法");
 }else if( password2==null || password2.length()<6 || password2.length()>20){
  this.addfielderror("password2", "密码输入不合法");
 }else if(!password.equals(password2)){
  this.addfielderror("password2", " 两次密码不一致");
 }
  super.validate();
 }
}

运行结果:

Struts2的输入校验实例代码

 (2)框架校验

 框架校验也就是通过xml配置方式进行数据校验 ,这也是我们在企业开发的主流校验。

xml校验原理: 将很多规则代码已经写好只需要在xml文件中定义需要使用的校验规则即可。,所以大大减少了我们的开发时间。

 我先把步骤写一下:

     步骤一:编写jsp

     步骤二:编写action 继承actionsupport或者validateable接口

   步骤三:封装请求参数

   步骤四:编写xml校验规则文件

    xml校验文件的命名规则:   action类名-validation.xml 对action中所有的方法都执行校验

      举例命名规则registeraction-validation.xml

       同时要满足:xml校验文件和action类要在同一包下

 步骤一: register.jsp

 <%@ page language="java" import="java.util.*" pageencoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!doctype html public "-//w3c//dtd html 4.01 transitional//en">
<html>
 <head>
 <title>用户注册</title>
 </head>
 <body style="text-align: center;">
 <table align="center" width="50%">
  <tr>
   <td style="color: red">
    <s:fielderror></s:fielderror>
   </td>
  </tr>
 </table>
  <form action="${pagecontext.request.contextpath }/login.action" method="post" >
   <table width="60%" >
    <tr>
     <td>用户名</td>
     <td>
      <input type="text" name="username" >
     </td>
    </tr>
    <tr>
     <td>密码</td>
     <td>
      <input type="password" name="password" >
     </td>
    </tr>
    <tr>
     <td>确认密码</td>
     <td>
      <input type="password" name="password2" >
     </td>
    </tr>
    <tr>
     <td>年龄</td>
     <td>
      <input type="text" name="age" >
     </td>
    </tr>
    <tr>
     <td>邮箱</td>
     <td>
      <input type="text" name="email" >
     </td>
    </tr>
    <tr>
     <td>生日</td>
     <td>
      <input type="text" name="birthday" >
     </td>
    </tr>
    <tr>
     <td>毕业日期</td>
     <td>
      <input type="text" name="graduation" >
     </td>
    </tr>
    <tr>
     <td>
      <input type="reset" value="清空">
     </td>
     <td>
      <input type="submit" value="注册">
     </td>
    </tr>
   </table>
  </form>
 </body>
</html>

  步骤二:registeraction.java

import com.opensymphony.xwork2.actionsupport;
import com.opensymphony.xwork2.modeldriven;
public class registeraction extends actionsupport implements modeldriven<user>{
 //手动创建一个对象
 private user user =new user();
 @override
 public string execute() throws exception {
  return none;
 }
 public user getmodel() {
  return user;
 }  
}

步骤三:封装请求参数

上面手动校验的案例我是用set方法封装数据,那这里我采用的是使用modeldriven接口,对请求数据进行封装,

在之前我讲过封装数据的三种方法不清楚的可以看下这篇文章:struts框架(6)---action接收请求参数

user.java

import java.util.date;
public class user {
 private string username;
 private string password;
 private string password2;
 private integer age;
 private string email;
 private date birthday;
 private date graduation;
 /*
  * 给属性提供get和set方法
  */
}

步骤四:registeraction-validation.xml

<!doctype validators public
  "-//apache struts//xwork validator 1.0.2//en"
  "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
 <validators>
 <!--dtd约束在xwork-core-**.jar包中 --> 
  <field name="username">
    <field-validator type="requiredstring">
     <param name="trim">true</param>
     <message>用户民不能为空</message>
    </field-validator>
    <field-validator type="stringlength">
    <param name="minlength">6</param>
    <param name="maxlength">15</param>
    <message>有户名长度必须在 ${minlength} 和 ${maxlength}之间 </message>
    </field-validator>
  </field> 
  <field name="password">
    <field-validator type="requiredstring">
     <param name="trim">true</param>
     <message>密码不能为空</message>
    </field-validator>
    <field-validator type="stringlength">
    <param name="minlength">6</param>
    <param name="maxlength">15</param>
    <message>密码必须在 ${minlength}和${maxlength}之间 </message>
    </field-validator>
  </field> 
  <field name="password2">
   <field-validator type="fieldexpression">
    <param name="expression"><![cdata[password==password2]]></param>
    <message>两次密码不一致</message>
   </field-validator>
  </field>
  <field name="age">
   <field-validator type="required">
    <param name="trim">true</param>
    <message>年龄不能为空</message>
   </field-validator>
   <field-validator type="int">
    <param name="min">1</param>
    <param name="max">150</param>
    <message>年龄必须在 ${min} 和 ${max}之间</message>
   </field-validator>
  </field>
  <field name="email">
   <field-validator type="email">
    <message>不是一个合法的邮箱地址</message>
   </field-validator>
  </field>
  <field name="birthday">
   <field-validator type="date">
    <param name="min">2001-01-01</param>
    <param name="max">2003-12-31</param>
    <message>生日必须在 ${min} 和${max}之间</message>
   </field-validator>  
  </field> 
 </validators>

struts.xml不需要任何改变,和之前一样就可以了

运行结果:

Struts2的输入校验实例代码

   如果你觉得提示错误的位置有点丑,那你可以运用struts2的<s:form>标签,效果会更好

现在两种方式都讲了,现在对xml配置的要点一些知识要点进行归纳。

xml校验文件详解: 

<validators>: 根元素

<field>:指定action中要校验的属性,name属性指定将被验证的表单字段的名字

<field-validator>:指定校验器, type 指定验证规则

     上面指定的校验器requiredstring是由系统提供的,系统提供了能满足大部分验证需求

      的校验器,这些校验器的定义可以在xwork-2.x.jar中的

      com.opensymphony.xwork2.validator.validators下的default.xml中找到。

<param>:子元素可以向验证程序传递参数

<message>:子元素为校验失败后的提示信息,如果需要国际化,可以为message

                          指定key属性,key的值为属性文件中的key。

struts2校验规则:

系统提供的校验器如下:

required (必填校验器,要求被校验的属性值不能为null)

requiredstring (必填字符串校验器,要求被校验的属性值不能为null,并且长度大于0,默认情况下会对字符串去前后空格)

stringlength(字符串长度校验器,要求被校验的属性值必须在指定的范围内,否则校验失败,minlength参数指定最小长度,maxlength参数指定最大长度,trim参数指定校验field之前是否去除字符串前后的空格)

regex(正则表达式校验器,检查被校验的属性值是否匹配一个正则表达式,expression参数指定正则表达式,casesensitive参数指定进行正则表达式匹配时,是否区分大小写,默认值为true)

int(整数校验器,要求field的整数值必须在指定范围内,min指定最小值,max指定最大值)

double(双精度浮点数校验器,要求field的双精度浮点数必须在指定范围内,min指定最小值,max指定最大值)

fieldexpression(字段ognl表达式校验器,要求field满足一个ognl表达式,expression参数指定ognl表达式,该逻辑表达式基于valuestack进行求值,返回true时校验通过,否则不通过)

email(邮件地址校验器,要求如果被校验的属性值非空,则必须是合法的邮件地址)

url(网址校验器,要求如果被校验的属性值非空,则必须是合法的url地址)

date(日期校验器,要求field的日期值必须在指定范围内,min指定最小值,max指定最大值)

conversion(转换校验器,指定在类型转换失败时,提示的错误信息)

visitor(用于校验action中复合类型的属性,它指定一个校验文件用于校验复合类型属性中的属性)

expression(ognl表达式校验器,它是一个非字段校验器, expression参数指定ognl表达式,该逻辑表达式基于valuestack进行求值,返回true时校验通过,否则不通过,该校验器不可用在字段校验器风格的配置中)

最后讲一个细节:

编写校验文件时,不能出现帮助信息

在编写actionclassname-validation.xml校验文件时,如果出现不了帮助信息,可以按下面方式解决:

windwos->preferences->myeclipse->files and editors->xml->xmlcatalog

点“add”,在出现的窗口中的location中选“file system”,然后在xwork-2.1.2解压目录的src\java目录中选择xwork-validator-1.0.3.dtd,

回到设置窗口的时候不要急着关闭窗口,应把窗口中的key type改为uri 。key改为

以上所述是小编给大家介绍的struts2的输入校验实例代码,希望对大家有所帮助