天下之事,必先处之难,而后易之。
君临
知我者谓我心忧,不知我者谓我何求

一、sturts2自带拦截器

 1、params拦截器:提供了框架不可缺少的功能,将请求中的数据设置到Action中的属性上。

 2、staticparams拦截器:将配置文件中通过action元素的子元素param设置的参数设置到对应的Action的属性中。

   <action name="example" class="com.struts2.action.ExampleAction">

             <param name="exampleFiled">Example</param>

             <result>success.jsp</result>

   </action>

 3、servletConfig拦截器:提供将源于Servlet API的各种对象注入到Action当中。

  获取Servlet API对象的接口:

  ServletContextAware     设置ServletContext

  ServletRequestAware     设置ServletRequest

  ServletResponseAware   设置ServletResponse

  ParameterAware            设置Map类型的请求参数

  RequestAware               设置Map类型的请求(HttpServletRequest)属性

  SessionAware               设置Map类型的会话(HttpSession)属性

  ApplicationAware           设置Map类型的应用程序的作用域对象(ServletContext)

 4、fileUpload拦截器:将文件和元数据从多重请求(multipart/form-data)转换为常规的请求数据,以便将它们设置在对应的Action的属性上。

 5、validation拦截器:执行数据验证。

 6、workFlow拦截器:提供当数据验证错误时终止流程的功能。

 7、exception拦截器:捕获异常,置于所有的拦截之前。

二、实现自定义拦截器(间接或直接实现Interceptor接口)

示例:

package org.qiujy.common;

 

import java.util.Map;

 

import com.opensymphony.xwork2.Action;

import com.opensymphony.xwork2.ActionInvocation;

import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

 

/**

 * 权限检查拦截器

 *

 * @author qiujy

 * @version 1.0

 */

public class AuthorizationInterceptor extends AbstractInterceptor {

 

    /*

     * 拦截Action处理的拦截方法

     *

     */

    public String intercept(ActionInvocation invocation) throws Exception {

 

        Map session = invocation.getInvocationContext().getSession();

        String userName = (String) session.get("userName");

       

        if (null != userName && userName.equals("test")) {

            System.out.println("拦截器:合法用户登录---");

            return invocation.invoke();

        } else {

            System.out.println("拦截器:用户未登录---");

            return Action.LOGIN;

        }

    }

}

 三、在sturts.xml文件中配置

<!DOCTYPE struts PUBLIC

        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

        "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <package name="my" extends="struts-default">

 

        <interceptors>

        <!-- 定义权限控制拦截器 -->

        <interceptor name="authority"class="org.qiujy.common.AuthorizationInterceptor"/>

        </interceptors>

 

        <!-- 定义全局处理结果 -->

        <global-results>

        <!-- 逻辑名为login的结果,映射到/login.jsp页面 -->

        <result name="login">/login.jsp</result>

        </global-results>

 

        <action name="listall"class="org.qiujy.web.struts2.action.UserAction" method="listAllUser">

            <result name="success">/listall.jsp</result>

            <!-- 使用拦截器 -->

            <interceptor-ref name="defaultStack"/>

            <interceptor-ref name="authority"/>

        </action>

 

        <action name="userOpt"class="org.qiujy.web.struts2.action.UserAction">

            <result name="success">/success.jsp</result>

        </action>

    </package>

</struts>

四、拦截器执行原理

 1、拦截器围绕着Action和Result的执行而执行的。

 2、以链式执行,首先执行Action配置的拦截器,在Action和Result执行之后,拦截器再一次执行,并且在执行过程中任何一个拦截器都可以直接返回,

  从而终止余下的拦截器,Action以及Result的执行。

 3、当ActionInvocation的invoke方法执行时,开始执行Action的第一个拦截器,而invoke方法并不是总映射到拦截器。

 4、拦截器执行的过程可以看成是一个递归的过程。

 5、拦截器执行的三个阶段:

     (1)预处理(拦截器可以准备、过滤、改变或者操作任何可以访问的数据,包括Action)。

     (2)方法执行(ActionInvocation的invoke方法执行)。

     (3)Action执行后的处理(客户端呈现数据显示结果)。

五、自定义拦截器

  拦截器间接或直接地实现了com.opensymphony.xword2.inteceptor.interceptor接口的三个方法。

(1)void init():拦截器初始化,每个拦截器只执行一次。

(2)void destory():拦截器实例销毁。

(3)String intercept(ActionInvocation invocation) throws Exception;执行拦截动作,返回一个字符串作为逻辑视图。

 

posted on 2011-07-20 15:25  boonya  阅读(531)  评论(0编辑  收藏  举报

我有佳人隔窗而居,今有伊人明月之畔。
轻歌柔情冰壶之浣,涓涓清流梦入云端。
美人如娇温雅悠婉,目遇赏阅适而自欣。
百草层叠疏而有致,此情此思怀彼佳人。
念所思之唯心叩之,踽踽彳亍寤寐思之。
行云如风逝而复归,佳人一去莫知可回?
深闺冷瘦独自徘徊,处处明灯影还如只。
推窗见月疑是归人,阑珊灯火托手思忖。
庐居闲客而好品茗,斟茶徐徐漫漫生烟。

我有佳人在水之畔,瓮载渔舟浣纱归还。
明月相照月色还低,浅近芦苇深深如钿。
庐山秋月如美人衣,画堂春阁香气靡靡。
秋意幽笃残粉摇曳,轻轻如诉画中蝴蝶。
泾水潺潺取尔浇园,暮色黄昏如沐佳人。
青丝撩弄长裙翩翩,彩蝶飞舞执子手腕。
香带丝缕缓缓在肩,柔美体肤寸寸爱怜。
如水之殇美玉成欢,我有佳人清新如兰。
伊人在水我在一边,远远相望不可亵玩。