Struts(十)拦截器

1.拦截器(interceptor):拦截器是Struts2的核心,Struts2的众多功能都是通过拦截器来实现的。与filter工作流程相似,只拦截action。

2.Interceptor接口(继承)

  • void destory(); 很少使用
  • void init(); 很少使用
  • String intercept(ActionInvocation invocation)
public String intercept(ActionInvocation arg0) throws Exception
    {

        String in = arg0.invoke();

        return in ;
    }

3.ActionInvocation 接口

  • Object getAction();获得与这个ActionInvocation所关联到的action
  • String invoke(); 如果拦截器堆栈里有其他的拦截器,则将调用下一个拦截器;如果没有,则直接调用action
  • void addPreResultListener(PreResultListener listener);当action执行完与页面被渲染之前的这两个时间之间的

4.PreResultListener接口

  • void beforeResult(ActionInvocation invocation,Strng resultCode)

5.每个拦截器中的代码的执行顺序,在Action之前,拦截器的执行顺序与堆栈中定义的一致;

 而在Action和Result之后,拦截器的执行顺序与堆栈中定义的顺序相反。

5.拦截器的配置

  • 编写实现interceptor接口的类
  • 在struts.xml文件中定义拦截器
  • 在action中使用拦截器
<interceptors>
            <interceptor name="InterceptorMy" class="com.liule.interceptor.InterceptorMy"></interceptor>
</interceptors>

<action name="LoginAction">
            <result name="sucess">/servlet.jsp</result>
            <interceptor-ref name="InterceptorMy"></interceptor-ref>
</action>
    

6.在不明确声明拦截器的时候,调用默认的拦截器

指定默认的拦截器栈:

<default-interceptor-ref name="defaultStack" />

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

<action name="LoginAction">
            <result name="sucess">/servlet.jsp</result>
            <interceptor-ref name="InterceptorMy"></interceptor-ref>
            <interceptor-ref name="defaultStack"></interceptor-ref>
        </action>

8.初始化参数

<interceptors>
            <interceptor name="InterceptorMy" class="com.liule.interceptor.InterceptorMy">
                <param name="hello">shengsiyuan</param>
            </interceptor>
        </interceptors>
public class InterceptorMy implements Interceptor
{
    private String hello;

    public String getHello()
    {
        return hello;
    }

    public void setHello(String hello)
    {
        this.hello = hello;
    }

    @Override
    public void destroy()
    {
        // TODO Auto-generated method stub

    }

    @Override
    public void init()
    {
        // TODO Auto-generated method stub

    }

    @Override
    public String intercept(ActionInvocation arg0) throws Exception
    {

        String in = arg0.invoke();

        return in ;
    }

}

9.AbstractInterceptor 类(类似于适配器)

  • init();
  • destory();
  • intercept(ActionInvocation invocation);

10.定义拦截器时可以直接继承AbstractInterceptor抽象类(该来实现了Interceptor接口,并且对init()和destory()方法进行了空实现),然后实现其抽象方法intercept即可。

11.方法过滤拦截器(可以对指定方法进行拦截的拦截器)

12.MethodFilterInterceptor 类,继承了AbstractInterceptor

  • String doIntercept(ActionInvocation invocation)

13.参数:(拦截器是不是执行)

  • excludeMethods,不拦截的方法,拦截器不执行
  • includeMethods,拦截的方法,拦截器执行(优先级高)(默认)

在方法过滤拦截器中,如果既没指定include参数与exclude参数,那么所有的方法都会拦截,也就是说所有的方法都默认为include。如果仅仅指定了include,那么只会拦截include中的方法,没有包含在include的不会被执行。

14.Map map = invocation.getInvocationContext().getSession();

15.Action.LOGIN 表示用户没有登录,让用户再登陆一下。

时间: 2024-10-08 15:02:54

Struts(十)拦截器的相关文章

struts之拦截器

拦截器是为了让一些自己不希望发生的事情进行预防,下面我说一下struts自定义拦截器. 下面我贴下struts.xml里的自己定义的拦截器: <package name="my" extends="struts-default"> <interceptors> <interceptor name="myInterceptor" class="util.MyInterceptor" /> &l

struts自定义拦截器--登录权限控制

说明:该自定义的拦截器实现用户登录的权限控制. login.jsp--->LoginAction--重定向-->MainAction--->main.jsp 一.1.总体的步骤: (1).定义拦截器类.LoginInterceptor(完成登录拦截) 方式1:实现com.opensymphony.xwork2.interceptor.Interceptor接口并覆写方法. 方式2:继承com.opensymphony.xwork2.interceptor.AbstractIntercep

java框架篇---struts实现拦截器

Struts2的拦截器和Servlet过滤器类似.在执行Action的execute方法之前,Struts2会首先执行在struts.xml中引用的拦截器,在执行完所有引用的拦截器的intercept方法后,会执行Action的execute方法. Struts2拦截器类必须从com.opensymphony.xwork2.interceptor.Interceptor接口继承,在Intercepter接口中有如下三个方法需要实现: void destroy(); void init(); St

struts自定义拦截器

第01步:配置web.xml,启动struts框架 <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLoca

Struts加入拦截器后取不到页面参数

在Struts2的demo项目中添加了一个简单的拦截器,突然发现,Action中取不到页面的参数了 这也是很蛋疼的事情,还好这个比较简单,稍微一查就发现问题: Struts2中很多的功能是用拦截器实现的,比如:取得表单参数,文件上传,异常处理等 Struts2会默认调用默认的拦截器,默认拦截器配置在struts-default.xml中可以查看 如果在配置文件中加入了自定义的拦截器,那默认的拦截器就不会起作用,在Action中就不能取得表单的参数 这个时候,就需要显试的调用默认的拦截器(defa

struts自定义拦截器配置

配置自己的拦截器可以先参照下系统的拦截器是怎么配置的,首先打开struts-default.xml搜索下interceptor:系统里的拦截器有很多,拦截器都是放在堆栈里的,系统引用的是默认堆栈, <interceptor-stack name="defaultStack">: struts2.3版本下的默认堆栈里放有19个拦截器.我们随便找一个系统拦截器,找到那个类点进去,可以看到,系统的拦截器都继承自AbstractInterceptor,知道这些,那么我们可以自己创建

Struts之 拦截器配置 ( Interceptor )

拦截器运行我们在执行前后插入代码执行.Struts2中的拦截器是一个强有力的工具,他可以为action动态添加输入验证(验证用户的输入是否正确). 对象组装(将用户输入的数据转换为对象的属性).权限控制(确保访问中是登录用户).日志记录(记录action的执行情况)等功能,而不需要修改action. 要为action配置引用的拦截器,首先乣在interceptors元素中使用interceptor元素定义拦截器,然后在action元素中使用interceptor-ref元素指定引用的拦截器.in

Struts 2的拦截器(Interceptor)总结

 什么是Struts 2拦截器? 从软件构架上来说,拦截器是实现了面向方面编程的组件.它将影响了多个业务对象的公共行为封装到一个个可重用的模块,减少了系统的重复代码,实现功能的高度内聚,确保了业务对象的整洁和纯度. 从Java代码上来说,它就是一个普度的Java对象,它只需要实现一个名为Interceptor的接口. Struts 2的工作原理又是什么呢?我们可以同两张图来看看 对于Stuts 2的执行原理我就不做过多的解释了,接下来我们就来看看怎么去具体实现吧.开始就说了,Struts 2的拦

struts拦截器的详解

1.拦截器:Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现. WebWork中文文档解释:拦截器是动态拦截Action调用的对象.它提供了一种机制可以使开发者可以定义在一个Action执行的前后执行的代码,也可以在一个action执行前阻止其执行.同时也提供了一种可以提取Action中可重用的代码的方式. 拦截器栈(Interceptor Stack):Struts2拦截器栈就是将拦截器按