Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 242|回复: 0

[struts学习]Struts2讲义(7)自定义拦截器配置

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-11 02:01:48 | 显示全部楼层 |阅读模式
    技术要点
       
    本节代码介绍拦截器基础配置以及设置参数功能。
       

       
         配置文件struts.xml中如何定义拦截器。
         
    Action配置中拦截器参数定义和注意点。
         
    拦截器参数的设置和配置修改过程。
         演示代码
       

         
          
          
           java 代码
          
          
          
          <!------------------------------- 文件名:ExampleInterceptor.java------------------------->   
          import com.opensymphony.xwork2.ActionInvocation;   
          import com.opensymphony.xwork2.interceptor.Interceptor;   
             
          public class ExampleInterceptor implements Interceptor {   
              //设置新参数   
              private String newParam;   
             
              public String getNewParam() {   
                  return newParam;   
              }   
             
              public void setNewParam(String newParam) {   
                  this.newParam = newParam;   
              }   
             
              public void destroy() {   
                  System.out.println("end doing...");   
              }   
             
              //拦截器初始方法   
              public void init() {   
                  System.out.println("start doing...");   
                  System.out.println("newParam is:"+newParam);   
             
              }   
             
              //拦截器拦截方法   
              public String intercept(ActionInvocation arg0) throws Exception {   
                  System.out.println("start invoking...");   
                  String result = arg0.invoke();   
                  System.out.println("end invoking...");   
                  return result;   
              }   
             
          }   
          
         
        <!-------------------------------文件名:ExampleInterceptor.java------------------------->
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.Interceptor;
    public class ExampleInterceptor implements Interceptor {
            //设置新参数
            private String newParam;
            public String getNewParam() {
                    return newParam;
            }
            public void setNewParam(String newParam) {
                    this.newParam = newParam;
            }
            public void destroy() {
                    System.out.println("end doing...");
            }
            //拦截器初始方法
            public void init() {
                    System.out.println("start doing...");
                    System.out.println("newParam is:"+newParam);
            }
            //拦截器拦截方法
            public String intercept(ActionInvocation arg0) throws Exception {
                    System.out.println("start invoking...");
                    String result = arg0.invoke();
                    System.out.println("end invoking...");
                    return result;
            }
    }[/code] 拦截器映射配置。
       

         
          
          
           Java 代码
          
          
          
          <!------------------------------------- 文件名:struts.xml----------------------->   
              <!--  拦截器配置定义 -->   
                  <interceptors>           
                      <interceptor name="example"   
                          class="com.example.struts.interceptor.ExampleInterceptor">   
                          <!--  参数设置 -->   
                          <param name="newParam">test</param>   
                      </interceptor>   
                  </interceptors>   
                  <!-- Action 名字,类以及导航页面定义 -->   
                  <!--  通过Action类处理才导航的的Action定义 -->   
                  <action name="Login"   
                      class="com.example.struts.action.LoginAction" >   
                      <result name="input">/jsp/login.jsp</result>   
                      <result name="success">/jsp/success.jsp</result>   
                      <!-- Action 中拦截器定义 -->  
    <interceptor-ref name="defaultStack"></interceptor-ref>

      
                      <interceptor-ref name="example">   
                      <!--  改变拦截器参数值 -->   
                          <param name="newParam">example</param>   
                      </interceptor-ref>   
                  </action>   
          
         
        <!-------------------------------------文件名:struts.xml----------------------->
            <!-- 拦截器配置定义 -->
                    <interceptors>               
                            <interceptor name="example"
                                    class="com.example.struts.interceptor.ExampleInterceptor">
                                    <!-- 参数设置 -->
                                    <param name="newParam">test</param>
                            </interceptor>
                    </interceptors>
                    <!-- Action名字,类以及导航页面定义 -->
                    <!-- 通过Action类处理才导航的的Action定义 -->
                    <action name="Login"
                            class="com.example.struts.action.LoginAction" >
                            <result name="input">/jsp/login.jsp</result>
                            <result name="success">/jsp/success.jsp</result>
                            <!-- Action中拦截器定义 -->
                            <interceptor-ref name="example">
                            <!-- 改变拦截器参数值 -->
                                    <param name="newParam">example</param>
                            </interceptor-ref>
                    </action>[/code] 执行效果如图4.2所示。
       

       
       
    图4.2  执行拦截器后效果
       
    参数值显示如图4.3所示。
       

       
       
    图4.3  newParam参数值显示图
       

       

        代码解释
       
    (1)先看struts.xml文件,在文件开始以<interceptors>开头,</interceptors> 结尾形式定义了拦截器,该拦截器命名为example,映射的类文件路径写在class属性中。在<Action> 中<result>标签后,可以定义只在该Action执行时候会拦截的拦截器定义,其实就是调用在<Action>前定义的 example拦截器。并且还可以以<param>标签定义拦截器属性。
       

       
    (2)<param>标签定义拦截器属性,或者称为参数。param其实就是英语中参数缩写形式。name是参数名,而 在<param></param>间的内容就是该定义的参数值。
       
    注意:如果在<Action>中和<Action>外都定义<param>的值,比如在本实例 中<Action>中newParam值为“example”,<Action>外newParam值为“test”。而在运行 时候显示的还是<Action>中的参数值,即“example”。显示如图4.3。可以理解为屏蔽了<Action>外参数 值,因此如果定义多个Action,每个Action都调用了example拦截器,则都可以自定义自己的newParam的值了。如果不定义的话,那显 示的就是“test”,否则就是各自定义的newParam值。
       

       
    (3)再来看看ExampleInterceptor类代码,newParam是它的一个私有变量属性,有自己的setter、getter方 法。而且它扩展了Interceptor接口,该接口是Struts2的类库中自带的接口类。重写interceptor方法,用invoke方法执行 Action,在Action前后执行两个打印方法。
       

       
    启动服务器后,在网页上显示登录页面,单击“登录”,然后在MyEclipse的控制台下就可以看见如图4.2显示的效果图。如果读者能看见这两 行字被打印出来,就说明example拦截器拦截Login Action成功。
       

       
    复制代码

       
         
         
          
          

            
          

            
          
         
       

      


    源码下载:http://file.javaxxz.com/2014/10/11/020147765.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-26 13:53 , Processed in 0.361249 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表