• struts2入门之拦截器


    1、拦截器的执行时间:在action对象创建之后,在具体的方法执行之前;

    2、拦截器底层实现原理:用到AOP思想和责任链模式;AOP:面向切面编程,通俗的讲就是当某个功能模块要增加某一项功能时,尽可能不去修改源代码而是通过其他的方式来达到相同的效果,比如通过配置文件等方式;责任链模式和过滤链模式有点相似,过滤链模式是指比如,一个请求由多个过滤器进行过滤,每个过滤器进行放行之后才能到下一个过滤器,最后实现目的;但是责任链模式,比如要执行多个操作,有添加,修改,删除三个操作,首先执行添加操作,添加操作完成后,做类似于放行的操作;然后执行修改操作,修改完成后又做个类似于放行的操作;最后执行删除操作。

    3、拦截器和过滤器的区别:

      过滤器原则上是可以过滤掉任何内容的,比如html、jsp、图片等,它是在服务器创建的时候就有了;

      拦截器只能拦截action中的方法,或者说只能拦截action。

    4、自定义拦截器:(show my codes)另外说一下步骤:创建一个类继承MethodFilterInterceptor,然后实现里面未实现的方法,如下:

     1 import com.opensymphony.xwork2.ActionInvocation;
     2 import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
     3 
     4 public class MyIncepter extends MethodFilterInterceptor {
     5 
     6     @Override
     7     protected String doIntercept(ActionInvocation arg0) throws Exception {
     8         // 这里面进行逻辑判断
     9         // 如果可以通过,就执行
    10         // arg0.invoke();
    11         // 如果不能通过,就返回你将要跳转的页面
    12         return null;
    13     }
    14 
    15 }

    最后配置action和这个自定义拦截器的联系如下:

     1 <package name="demo1" extends="struts-default" namespace="/">
     2         <!-- 自定义拦截器 -->
     3         <interceptors>
     4             <interceptor name="interceptor1" class="com.cczhao.struts.MyInceptor"></interceptor>
     5         </interceptors>
     6         <action>
     7             <!-- 调用自己的拦截器 -->
     8             <interceptor-ref name="interceptor1">
     9                 <!-- 自定义该action中的某些方法不拦截 -->
    10                 <param name="excludeMethods">login,add,update</param>
    11             </interceptor-ref>
    12             <!-- 倘若你在该action中用到了struts2的默认拦截器了,自己又定义了拦截器,这里需要引用一下struts2的默认拦截器,否则,只会调用自己的拦截器,而不调用struts2默认拦截器-->
    13             <interceptor-ref name="defaultStack"></interceptor-ref>
    14             <result name="success">/hello.jsp</result>
    15         </action>
    16     </package>

     注意上面配置自定义拦截器和action的关系的时候,着重看我的注释。。。

  • 相关阅读:
    Visual Stdio VS 错误 error : 0xC00000FD: Stack overflow. 更改堆栈空间解决栈溢出问题
    OpenCV Mat 只能用静态数组定义时初始化,动态数组赋值给Mat需要逐元素进行. MATLAB,OpenCV,VS混合编程
    【转】Ubuntu 10.10升级显卡驱动后开机动画低分辨率问题
    linux 文件[名]编码
    L337 Speak及国外论坛、IRC常用缩写
    UCS2 手机SMS的PDU编码
    setuid
    【转】CentOS5.5硬盘安装
    SWT CTabFolder 简记
    [转] 程序员的十层楼
  • 原文地址:https://www.cnblogs.com/ZT-SummerRain/p/7082742.html
Copyright © 2020-2023  润新知