Struts2struts2处理请求参数及其校验

Posted shelly0307

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts2struts2处理请求参数及其校验相关的知识,希望对你有一定的参考价值。

一、Action处理请求参数
1.Action处理请求参数三种方式
  1.1.Action 本身作为model对象,通过成员setter封装 (属性驱动 
// 页面:
        用户名  <input type="text" name="username" /> <br/>
// Action : 
        public class RegistAction1 extends ActionSupport {
            private String username;
            public void setUsername(String username) {
                this.username = username;
            }
        }
 缺点:需要单独定义javaBean,将action中属性copy到javaBean中。 
    优点:简单。    
    这种方式 ,底层是通过反射来实现的。
 
1.2.创建独立model对象,页面通过ognl表达式封装 (属性驱动)
// 页面: 
        用户名  <input type="text" name="user.username" /> <br/>  ----- 基于OGNL表达式的写法
// Action:
        public class RegistAction2 extends ActionSupport {
            private User user;
            public void setUser(User user) {
                this.user = user;
            }

            public User getUser() {
                return user;
            }
        }
  优点:简单,解决了第一种封装的问题
    缺点:在页面上使用了ognl表达式,页面不通用了。
    
    1.2.1 问题:这种方式,数据是怎样封装的?
     是通过struts2中的interceptor进行了数据封装.
      <interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>
1.3.模型驱动(在开发中应用比较多)
   步骤:
  1.3.1.让action类实现ModelDriven
  1.3.2.重写getModel方法
  1.3.3.在action中实现化一个model对象,让getModel方法返回这个对象。
// 页面:
        用户名  <input type="text" name="username" /> <br/> 
// Action
public class Login3Action extends ActionSupport implements ModelDriven<User> {
    private User user = new User();
    public User getModel() {
        return user;
    }
}
 优点:解决了属性驱动存在的问题
 缺点:一次只能封装一个model对象.
    struts2 有很多围绕模型驱动的特性 
   * <interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/> 为模型驱动提供了更多特性
 
2、封装数据到Collection和Map

1) 封装数据到Collection 对象

// 页面:
    产品名称 <input type="text" name="products[0].name" /><br/>
// Action :

public class ProductAction extends ActionSupport {
    private List<Product> products;
    public List<Product> getProducts() {
        return products;
    }
    public void setProducts(List<Product> products) {
        this.products = products;
    }
}

2) 封装数据到Map 对象

// 页面:
              产品名称 <input type="text" name="map[‘one‘].name" /><br/>  =======one是map的键值
// Action :
              public class ProductAction2 extends ActionSupport {
                     private Map<String, Product> map;
                     public Map<String, Product> getMap() {
                            return map;
                     }
                     public void setMap(Map<String, Product> map) {
                            this.map = map;
                     }
              } 
三、Struts2类型转换(了解)
 
四、请求参数校验

1.校验的分类 :客户端数据校验 和 服务器端数据校验

客户端数据校验 ,通过javascript 完成校验 (改善用户体验,使用户减少出错 )

服务器数据校验 ,使用框架内置校验功能(struts2 内置校验功能 ) ----- 必须的

 

2、struts2 支持校验方式:

1)手工代码校验请求参数:在服务器端通过编写java代码,完成数据校验

    缺点:代码校验 不适用于 大型项目, 流程数据复杂时,开发量和维护量 都会很大 

2)Xml配置方式数据校验(企业主流校验):XML配置校验(主流)  注解配置校验

步骤一 :编写jsp

步骤二 :编写Action 继承ActionSupport 或者 实现 Validateable 接口

步骤三 :封装请求参数

      * 使用xml校验 必须提供get方法

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

    a 在Action所在包 编写 Action类名-validation.xml 对Action所有业务方法进行校验

    b 引入DTD

              ------ xwork-core-2.3.7.jar 中 xwork-validator-1.0.3.dtd

              <!DOCTYPE validators PUBLIC

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

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

    c 内置校验器定义文件

              xwork-core-2.3.7.jar 中 /com/opensymphony/xwork2/validator/validators/default.xml

   d 内建校验器

* 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指定最大值)

 

e    案例:

required  必填校验器
<field-validator type="required">
       <message>性别不能为空!</message>
</field-validator>

requiredstring  必填字符串校验器
<field-validator type="requiredstring">
       <param name="trim">true</param>
       <message>用户名不能为空!</message>
</field-validator>

stringlength:字符串长度校验器
<field-validator type="stringlength">
    <param name="maxLength">10</param>
    <param name="minLength">2</param>
    <param name="trim">true</param>
    <message><![CDATA[产品名称应在2-10个字符之间]]></message>
</field-validator>

int:整数校验器
<field-validator type="int">
    <param name="min">1</param>
    <param name="max">150</param>
    <message>年龄必须在1-150之间</message>
</field-validator>

date: 日期校验器
<field-validator type="date">
    <param name="min">1900-01-01</param>
    <param name="max">2050-02-21</param>
    <message>生日必须在${min}到${max}之间</message>
</field-validator>

url:  网络路径校验器
<field-validator type="url">
    <message>主页地址必须是一个有效网址</message>
</field-validator>

email:邮件地址校验器
<field-validator type="email">
    <message>电子邮件地址无效</message>
</field-validator>

regex:正则表达式校验器
<field-validator type="regex">
     <param name="regexExpression"><![CDATA[^13\d{9}$]]></param>
     <message>手机号格式不正确!</message>
</field-validator>

fieldexpression : 字段表达式校验
<field-validator type="fieldexpression">
       <param name="expression"><![CDATA[(password==repassword)]]></param>
       <message>两次密码输入不一致</message>
</field-validator>

f    如何对指定的方法校验:格式  Action类名-ActionName(<action>元素name属性)-validation.xml

例如 : 校验AddCustomerAction中execute方法  配置 <action name="addcustomer" .../> 校验文件名字: AddCusotmerAction-addcustomer-validation.xml

 

3)自定义校验规则(了解一下就行)

 
 
 
 
 
 

以上是关于Struts2struts2处理请求参数及其校验的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 统一参数校验统一异常统一响应,这才是优雅的处理方式!

关于spring mvc 请求参数校验使用中的坑 。 maven 生命周期,线程池杂识

springboot 实体参数校验 validate 抛出javax.validation.ConstraintViolationException异常 统一处理

Spring Boot 统一参数校验统一异常统一响应,这才是优雅的处理方式!

Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)八(文件的上传FastDFS和校验)(Nginx的请求前缀配置,在发布项目的时候要注意)(代

spring MVC实践