Struts2拦截器浅解

  最近在学习struts的拦截器,现在来总结一下。

1、拦截器是什么?

  拦截器相当于过滤器:就是将不想要的去掉,想要的留下。拦截器抽象出一部分代码可以用来完善原来的action。同时可以减轻代码冗余,提高重用率。通俗地讲就是一张网,过滤掉不需要的沙子,留下水。

2、拦截器的作用:

  拦截器可以构成特定的功能。比如权限认证、日志记录和登陆判断。

3、拦截器的原理:

  

其每一个Action请求都在拦截器中,每一个action可以将操作转交给下面的拦截器,也可以直接退出到界面上。

4、定义拦截器:

  (1)自定义一个实现Interceptor接口(不过我初学者一般直接实现框架中的Interceptor)

  (2)在struts.xml中注册定义的拦截器

  (3)可以需要的action中引用拦截器

Interceptor接口声明了三个方法

  

1 public interface Interceptor extends Serializable {
2
3     void destroy();
4
5     void init();
6
7     String intercept(ActionInvocation invocation) throws Exception;
8 }

  Init方法是在action作用之前调用,就是开始给烂机器的初始化操作。

  Destory方法在拦截器被垃圾回收之前调用,用来回收init方法初始化的资源。

  interceptor方法是拦截器的主要操作。如果需要调用后续的Action或者拦截器,只需要在该方法中调用invocation.invoke()方法即可,在该方法调用的前后可以插入Action调用前后拦截器需要做的方法。

  现在对用户登录进行拦截,代码如下:

public String intercept(ActionInvocation invocation) throws Exception {

        System.out.println("在action执行之前");
        ActionContext actionContext=invocation.getInvocationContext();
        Map<String,Object> session=actionContext.getSession();

        Object currentUser=session.get("currentUser");
        String result=null;
        if(currentUser!=null){
            result=invocation.invoke();

        }else{

            HttpServletRequest request=(HttpServletRequest)invocation.getInvocationContext().get(ServletActionContext.HTTP_REQUEST);
            request.setAttribute("error", "请先登录");
            result="error";
        }
        System.out.println("result+"+result);
        System.out.println("在action执行之后");
        return result;
    }

  注册拦截器:

<interceptors>
             <interceptor name="myInterceptor"
             class="com.fangchao.interceptor.MyInterceptor"></interceptor>
             <interceptor name="loginInterceptor"
             class="com.fangchao.interceptor.LoginInterceptor"></interceptor>

             <interceptor-stack name="myStack">
                 <interceptor-ref name="loginInterceptor"></interceptor-ref>
                 <interceptor-ref name="defaultStack"></interceptor-ref>
             </interceptor-stack>
         </interceptors>

  上述代码中的interceptor-stack是个拦截器栈。到目前为止,就是在下面引用时,比较方便。一般来讲,每个action都会使用defaultStack。

  拦截器参数:

 配置参数:

  excludeMethods:过滤掉不使用拦截器的方法

  includeMethods:使用拦截器的方法。

有两种配置方式:

  【1】

<interceptor-ref name="validation">
 <param name="excludeMethods">myValidationExcudeMethod</param>
</interceptor-ref>
<interceptor-ref name="workflow">
 <param name="excludeMethods">myWorkflowExcludeMethod</param>
</interceptor-ref>
或者
<interceptor-ref name="defaultStack">
    <param name="validation.excludeMethods">myValidationExcludeMethod</param>
    <param name="workflow.excludeMethods">myWorkflowExcludeMethod</param>
</interceptor-ref>
时间: 2024-10-17 03:07:50

Struts2拦截器浅解的相关文章

【SSH2(实践篇)】--Struts2拦截器精解

上篇博客对Struts2的体系结构做了初步的了解,Struts2是以WebWork作为处理核心,并采用拦截器的机制来处理用户的请求,同时它还集成了Struts1丰富的标签库.另外上篇博客还对Struts2的配置使用进行了初步的介绍,下面将会集中讨论Struts2的拦截器. 一.拦截器 1.拦截器小介 拦截器的功能类似于web.xml文件中的Filter,能对用户的请求进行拦截,通过拦截用户的请求来实现对页面的控制.拦截器是在Struts-core-2.2.3.jar中进行配置的,原始的拦截器是在

Struts2拦截器详解

作者:禅楼望月 1. Struts2内置拦截器 Struts2内置了大量的拦截器,如下图: 图片来自:刘水镜的博客:菜鸟学SSH(四)--Struts2拦截器 这些拦截器以name-class的形式配置在struts-default.xml中: <interceptor name="alias" class="com.opensymphony.xwork2.interceptor.AliasInterceptor"/> <interceptor n

Struts2拦截器的使用 (详解)

这位仁兄的写的不错,我照抄过来了:http://www.blogjava.net/i369/articles/162407.html 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈defaultStack,如下(这里我是引用了struts2自带的checkbox拦截器):<interceptor-ref name="checkbox">  <param name=&q

浅谈Struts2拦截器的原理与实现

拦截器与过滤器           拦截器是对调用的Action起作用,它提供了一种机制可以使开发者定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行.同时也是提供了一种可以提取action中可重用的部分的方式,很多业务逻辑都是靠拦截实现的,比如校验,验证登录权限(比如下载时跳转到登陆页面)等等.     过滤器是对整个的请求过程起作用!换句话说就是拦截器没有过滤器的范围广.过滤器是在java web中,你传入的request,response提前过滤掉一些信息

Struts2拦截器概述

--------------------siwuxie095 Struts2 拦截器概述 1.Struts2 框架封装的很多功能都在 Struts2 的拦截器中 2.Struts2 框架中有很多拦截器,但这些拦截器不是每次 都执行,只有默认拦截器才会每次都执行 3.Struts2 默认拦截器的位置 「注意:默认拦截器中也有很多拦截器」 4.拦截器的执行 在 Action 对象创建之后,在 Action 方法执行之前 [made by siwuxie095]

笔记:Struts2 拦截器

配置拦截器 Struts.xml 配置文件中,使用<interceptor-/>来定义拦截器,有属性 name 表示拦截器的名称,class 表示拦截器的具体首先类,可以使用<param-/>子元素来配置拦截器的参数,配置示例: <package name="包名称" extends="抽象包名称"> <interceptors> <interceptor name="拦截器名称" class

Struts2 拦截器与Spring AOP的区别

在学习Spring AOP技术的同时,发现其实与以前做过的拦截器的功能很类似,于是开始抱着这两者之间有什么关系的问题进行深入研究. 我们知道struts2使用拦截器主要是用来处理用户的请求,OGNL的使用,表单验证 等. 而spring的拦截器,主要体现在AOP的事务管理方面,还有比如一些错误或者异常的日志的显示 也是通过配置spring的log拦截器来实现的. Struts的拦截器是针对Struts的,比如SSH项目都会去使用AOP ,如果是单纯的STRUTS项目 自然使用Struts本身的拦

Struts2 拦截器

一.Struts2拦截器原理: Struts2拦截器的实现原理相对简单,当请求struts2的action时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表,最后一个一个地调用列表中的拦截器. 比如:应用要求用户登陆,且必须为指定用户名才可以查看系统中某个视图资源:否则,系统直接转入登陆页面.对于上面的需求,可以在每个Action的执行实际处理逻辑之前,先执行权限检查逻辑,但这种做法不利于代码复用.因为大部分Action里的权限检查代码都大同小异,故将这些权

转载 - Struts2 拦截器详细配置过程

出处:http://www.blogjava.net/zzzlyr/archive/2009/10/12/297998.html Struts2 拦截器详细配置过程 1:所有拦截器的超级接口Interceptor ,Action去实现这个接口; Interceptor 它其中有三个方法(init(),destroy() ,interceptor()): Init()方法:在服务器起动的时候加载一次,并且只加载一次; Destroy()方法:当拦截器销毁时执行的方法; Interceptor()方