首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

11-19札记

2013-11-29 
11-19笔记一、Struts拦截器拦截器(Interceptor):拦截器是struts2的核心,struts2的众多功能都是通过拦截器来

11-19笔记

一、Struts拦截器

拦截器(Interceptor):拦截器是struts2的核心,struts2的众多功能都是通过拦截器来实现的。

1.拦截器的配置

? 编写实现Interceptor接口的类

? 在struts.xml文件中定义拦截器

? 在action中使用拦截器

一旦定义了自己的拦截器,将其配置到action上后,我们需要在action的最后加上默认的拦截器栈:defaultStack

2.定义拦截的三种方法

? (1)实现Interceptor接口类

public class TheInterceptor1 implements Interceptor{  public void destroy(){}  public void init(){}  public String intercept(ActionInvocation invocation) throws Exception{    String result = invocation.invoke();//如果还有拦截器,将传递给下一拦截器,否则执行Action  return result;  }}

?struts.xml文件中定义拦截器

<struts>  <package name="struts" extends="struts-default">    <interceptors>      <interceptor name="theInterceptor1" extends="default-struts">    <interceptor-ref name="theInterceptor1">    </interceptor-ref>  </action>  </package></struts>

?

拦截器中传递参数

?

public class TheInterceptor1 implements Interceptor{  private String test;//拦截器中传递参数,在tomcat启动时,便已执行setTest(),init()方法,setTest()方法在init()方法之前执行    public String getTest(){    return test;  }  public void setTest(String test){    this.test = test;  }  public void destroy(){}  public void init(){}  public String intercept(ActionInvocation invocation) throws Exception{    String result = invocation.invoke();//如果还有拦截器,将传递给下一拦截器,否则执行Action  return result;  }}

? struts.xml文件中定义拦截器

<struts>  <package name="struts" extends="struts-default">    <interceptors>      <interceptor name="theInterceptor1" extends="default-struts">    <interceptor-ref name="theInterceptor1">    </interceptor-ref>  </action>  </package></struts>

?

?

?

? (2)继承AbstractInterceptor抽象类(该类实现了interceptor接口,并且对init和destroy方法进行了空实现),然后实现其抽象方法intercept即可。

? (3)方法过滤拦截器(可以对指定方法进行拦截的拦截器,继承了MethodFilterInterceptor类,实现doIntercept(ActionInvocation invocation)抽象方法)

[MethodFilterInterceptor类重写了AbstractInterceptor类的intercept(ActionInvocation invocation)方法,但提供了一个doIntercept(ActionInvocation invocation)抽象方法。从这种设计方式可以看出,MethodFilterInterceptor类的intercept已经实现了对Action的拦截行为(只是实现了方法过滤的逻辑),但真正的拦截逻辑还需要开发者提供,也就是通过回调doIntercept方法实现。可见,如果用户需要实现自己的拦截逻辑,则应该重写doIntercept(ActionInvocation invocation)方法]

在方法过滤拦截器中,如果没有制定includeMethods参数,也没有指定execludeMethods参数,那么所有的方法都会被拦截,也就是所有的方法都被认为是includeMethods的;如果仅仅指定了includeMethods,那么只会拦截includeMethods中的方法,没有包含在includeMethods中的方法就不会被拦截。

[如果对于相同的方法指定了execludeMethods参数,includeMethods参数,includeMethods参数优先级高,也就是说依旧会被拦截]

注:execludeMethods、includeMethods参数需要在struts.xml的interceptor标签中配置params标签。

?

热点排行