自定义拦截器,首先新建一个继承自AbstractInterceptor类的类,然后重写intercept方法,代码如下
public class HelloInterceptor extends AbstractInterceptor { @Override public String intercept(ActionInvocation invocation) throws Exception { // TODO Auto-generated method stub System.out.println("拦截器测试"); // 放行到下一个 return invocation.invoke(); }}
一、自定义拦截器,只作用于当前Action类
新建structs-interceptor.xml文件,然后进行相关配置,使用时要记得包含到structs.xml文件中;自定义的拦截器注册在包内(即package节点下),配置在action节点下,代码如下(记得配置structs提供的默认拦截器)
/index.jsp
二、自定义拦截器,作用于该包下所有Action类
自定义拦截器,注册和配置都在package节点下,自定义的拦截器配置在拦截器栈中,最后还要重新配置structs的默认拦截器,这样,访问该包的action时就会走新配置的默认拦截器,代码如下
/index.jsp
三、自定义拦截器,实现允许在其他包下也可以有效
如果想让其他包下的action使用别的包下的拦截器,那么就让新的配置文件继承自其他包
/index.jsp
注意:由dtd文件决定了structs配置文件书写规则,所以拦截器和action的配置是有顺序的
四、自定义指定方法的拦截器
新建一个继承自MethodFilterInterceptor的类,并实现doIntercept方法,代码如下
public class MyMethodInterceptor extends MethodFilterInterceptor { @Override protected String doIntercept(ActionInvocation invocation) throws Exception { // TODO Auto-generated method stub System.out.println("方法拦截器"); return invocation.invoke(); }}
新建一个进行测试的Action类,代码如下
public class HelloAction2 extends ActionSupport { @Override public String execute() throws Exception { // TODO Auto-generated method stub return SUCCESS; } public void add(){ System.out.println("方法拦截器---add方法"); } public void find(){ System.out.println("方法拦截器---find方法"); } public void delete(){ System.out.println("方法拦截器---delete方法"); }}
新建struts-methodInterceptor.xml文件,进行相关配置,最后记得include到struts.xml文件中,配置如下
find add /index.jsp