struts2学习笔记

 

struts2的请求是通过FilterDispatcher过滤请求转发

 

struts2不再像struts1一样需要继承或实现某个框架中的类、接口,框架的侵入性明显降低了,同时开发实现也没有struts1那么繁琐

 

当然继承和实现一些框架中的接口能更方便开发(ActionSupport,ServletRequestAware),获取一些需要用到的信息

 

通过框架设计的拦截器、类型转换、数据验证、国际化更加提高了开发效率

 

1、拦截器的实现:

      可以实现Interceptor接口,能在对象初始化和销毁的时候加入需要处理的程序

 

      或是继承AbstractInterceptor(初始化跟销毁时都做了默认处理)

 

 

    定义好自己的拦截器后,在配置文件里面做好相应的配置就能使用了

 

<interceptors>
          <interceptor name="myTestInterceptor2" class="com.lzr.test.interceptor.MyInterceptor">
              <param name="hello" >show message!!!</param>   在配置文件中还能初始化一些信息
          </interceptor>
          <interceptor name="myTestInterceptor1" class="com.lzr.test.interceptor.MyInterceptorInterface"></interceptor>
          <interceptor name="myFilterInterceptor" class="com.lzr.test.interceptor.MyInterceptor3"></interceptor>
         
          <interceptor name="auth" class="com.lzr.test.interceptor.AuthInterceptor"></interceptor>
         
          <interceptor-stack name="myStack">
 
               <interceptor-ref name="myTestInterceptor1"></interceptor-ref>
               <interceptor-ref name="myTestInterceptor2"></interceptor-ref>
               <interceptor-ref name="myFilterInterceptor">
                 
               </interceptor-ref>
               <interceptor-ref name="defaultStack"></interceptor-ref>
          </interceptor-stack>
      </interceptors>

 

 

2、类型转换

 

实现TypeCoverter接口,或者继承DefaultTypeConverter实现类(该类实现了TypeCoverter接口),覆盖父类中的方法:

如:  extends DefaultTypeConverter

/**
     * param  Map
     * param  Class  转换有两种类型对象到类型 ,类型到对象
     * param  Object 转换的内容
     */
    @Override
    public Object convertValue(Map context, Object value, Class toType) {}

 

extends StrutsTypeConverter

 

@Override
    public Object convertFromString(Map arg0, String[] arg1, Class arg2) {}

 

@Override
    public String convertToString(Map arg0, Object o) {}

 

注册应用
实现了自定义类型转换器之后,将该类型转换器注册在Web应用中,Struts2 框架才可以正常使用该类型转换器。
关于类型转换器的注册方式,主要有3中:
A、注册局部类型转换器:仅仅对某个Action的属性起作用。
B、注册全局类型转换器:对所有Action的特定类型的属性都会生效。
C、使用JDK1.5的注释来注册类型转换器:通过注释方式来生成类型转换器。
1、局部类型转换器
提供如下格式的文件
文件名: ActionName-conversion.properties
内容:多个propertyName(属性名)=类型转换器类(含包名),如 date=com.aumy.DateConverter
存放位置:和ActionName类相同路径。

 

全局类型转换器
提供如下格式的文件
文件名: xwork-conversion.properties
内容: 多个“复合类型=对应类型转换器”项组成,如 java.Util.Date=com.aumy.DateConverter
存放位置:WEB-INF/classes/目录下。

 

 

3、数据验证

可以通过编码的方式,或是在配置文件中配置验证

 

编码验证为在Action增加  methodValidate()方法,在这里面对数据进行验证

如你action请求实现的是execute方法,则验证方法为:

public void executeValidate() {

       if(null == userName || userName.length() < 6 || userName.length() > 10)
        {
            this.addActionError("userName invalidate!");
        }
        if(null == password || null == rePassword || password.length() < 6 || password.length() > 10 || !password.equals(rePassword))
        {
            this.addActionError("password invalidate");
        }

}

 

配置文件实现为: 在Action的目录下 生成  Action-validation.xml文件

如Action的名称为RegisterAction,则配置文件的名称为Register-validation.xml

 <validators>
  <!-- one field means validation one property
       one field-validator means the validation method
   -->
      <field name="userName">
         <field-validator type="required">
          
            <message>username should not be blank!</message>
         </field-validator>
         <field-validator type="stringlength">
            <param name="maxLength">10</param>
            <param name="minLenght">6</param>
            <message>Your purchase code needs to be between 6  ang 10 charactars!</message>
         </field-validator>
      </field>

</validators>

 

 

4、国际化

在页面通过标签 <s:i18n>在关联到指定资源文件

 

获取国际化属性文件的信息的方法有:

   <s:text  name="you.key"/>

 

<s:property value="getText('you.key')"/>

 

<s:text name="%{getText('you.key')}"/>

 

struts.xml文件中关联资源文件

  <constant name="struts.custom.i18n.resources" value="message"></constant>
  
   <constant name="struts.i18n.encoding" value="gbk"></constant>

 

<!-- 定义常量 可以通过这样的方式来定义struts中需要替换的常量
     例如:  你定义一个  name="SUCCSSS" value="DDSSLL" 那么DDSSLL就会替换strtus框架中的SUCCESS
     当然这不是唯一的方式:
     可以在web.xml文件中配置<init-param><init-name></init-name><init-value></init-value></init-param>
     下面是替换struts给我们产生的默认信息
     message.properties全局的属性文件
     定义局部 的验证资源文件   文件的前缀必须与类名相同,而且还要在同一个文件目录下
   -->

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值