`
499490717
  • 浏览: 40442 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts2默认拦截器之prepare

阅读更多

在struts2的struts-default.xml中定义了一个name为prepare拦截器,实现类是com.opensymphony.xwork2.interceptor.PrepareInterceptor,它的作用是为实现了com.opensymphony.xwork2.Preparable接口的action调用相关方法。该拦截器有两个参数:alwaysInvokePrepare,firstCallPrepareDo,两者的类型都是boolean,默认值分别是true,false。

该拦截器的核心代码如下:

 

    public String doIntercept(ActionInvocation invocation) throws Exception {
        Object action = invocation.getAction();
        if (action instanceof Preparable) {
            try {
                String[] prefixes;
                if (firstCallPrepareDo) {
                    prefixes = new String[] {ALT_PREPARE_PREFIX, PREPARE_PREFIX};
                } else {
                    prefixes = new String[] {PREPARE_PREFIX, ALT_PREPARE_PREFIX};
                }
                PrefixMethodInvocationUtil.invokePrefixMethod(invocation, prefixes);
            }
            catch (InvocationTargetException e) {
                /*
                 * The invoked method threw an exception and reflection wrapped it
                 * in an InvocationTargetException.
                 * If possible re-throw the original exception so that normal
                 * exception handling will take place.
                 */
                Throwable cause = e.getCause();
                if (cause instanceof Exception) {
                    throw (Exception) cause;
                } else if(cause instanceof Error) {
                    throw (Error) cause;
                } else {
                    /*
                     * The cause is not an Exception or Error (must be Throwable) so
                     * just re-throw the wrapped exception.
                     */
                    throw e;
                }
            }
            if (alwaysInvokePrepare) {
                ((Preparable) action).prepare();
            }
        }
        return invocation.invoke();
    }

该代码的逻辑非常简单,如果action实现了com.opensymphony.xwork2.Preparable接口,则在调用setXXX和execute()方法之前调用系列方法。如果firstCallPrepareDo为true,则调用prepareDoXXX方法,否则调用prepareXXX方法(XXX为action对应的方法)。接下来查看alwaysInvokePrepare状态,如果其值为true则调用com.opensymphony.xwork2.Preparable接口的prepare方法。最后将action转交给下一个拦截器。

 

 

版权所有,转载请标明出处:http://blogwarning.iteye.com/blog/1390172

1
0
分享到:
评论
1 楼 fzdxwmq 2013-09-27  
请教博主。我有个项目用的是struts2.1. 里面有个action,当prepare失败后 action还是可以执行。当我把项目升级到strtus2.3后。当prepare失败后 action就不执行了。请教这是什么问题。 求赐教。

相关推荐

    Struts2默认拦截器解析.pdf

    Struts2是一个流行的Java web框架...总的来说,Struts2的默认拦截器提供了全面的功能支持,使得开发者能够构建安全、高效且易于维护的Web应用程序。理解并熟练掌握这些拦截器的使用,将有助于提升开发效率和应用质量。

    一个Struts2的核心拦截器例子

    - 使用`<default-interceptor-ref>`定义默认拦截器栈,所有未明确指定拦截器的动作都将使用这个栈。 4. **自定义拦截器**: - 创建一个新的Java类,实现`Interceptor`接口并重写`intercept()`方法。 - 在`...

    struts2内置拦截器简介

    ### Struts2内置拦截器简介 Struts2框架在实现MVC模式时,为了更好地管理请求处理过程中的各个阶段,引入了拦截器机制。通过拦截器可以对请求进行预处理或后处理,使得代码更加模块化和易于维护。Struts2提供了一...

    Struts2 拦截器的执行顺序(二十九)

    通过分析这些源代码,我们可以了解自定义拦截器的实现方式以及与默认拦截器如何协同工作。 而`WebRoot`目录则包含了Web应用的静态资源,如HTML、CSS、JavaScript文件,以及Struts2的配置文件(如`struts.xml`)和...

    struts2类型转换 拦截器 校验的例子

    拦截器是Struts2的核心组件之一,它允许在动作执行前后插入自定义逻辑,比如日志记录、事务管理、性能监控等。Struts2提供了一系列内置的拦截器,如`Params`用于参数解析,`Prepare`用于动作准备,`Validation`用于...

    Struts2内置拦截器简介

    ### Struts2内置拦截器简介 #### 一、概述 Struts2框架是Apache软件基金会下的一个开源项目,它提供了一种基于MVC(Model-View-Controller)设计模式的Web应用开发框架。Struts2的核心是拦截器(Interceptor)机制...

    struts拦截器介绍

    在Struts2中,拦截器(Interceptor)是一个至关重要的概念,它扮演着处理请求、增强功能和控制流程的角色。拦截器是在Action调用前后执行的一系列方法,它们按照特定的顺序组成一个链,可以对请求进行拦截、处理并...

    struts-default中拦截器介绍.pdf

    Struts 2 框架中的拦截器是其核心组件之一,主要负责在Action执行前后进行额外的操作,如参数绑定、验证、权限控制等。...在实际应用中,可以根据项目需求自定义拦截器,或调整默认拦截器的顺序,以实现更精细的控制。

    模拟一个拦截器

    - 拦截器栈是由多个拦截器组成的一个序列,Struts2默认提供了一些内置的拦截器,如`Params`(处理请求参数),`I18n`(国际化支持),`Prepare`(准备动作),`Execute`(执行动作)等。 - 用户可以通过`...

    Struts2面试题

    Struts2包含一系列内置的默认拦截器,例如: - `exception`:用于处理Action抛出的异常。 - `fileUpload`:支持文件上传。 - `i18n`:国际化支持。 - `modelDriven`:简化模型管理。 - `params`:参数解析。 - `...

    Struts2知识点总结

    - 默认的拦截器栈包括了`Params`(处理请求参数)、`I18n`(国际化)、`Prepare`(预处理Action)、`Action`(调用Action方法)、`Results`(处理结果)等。 4. **Action上下文(ActionContext)** - 存储请求、...

    struts2 笔记(根据尚硅谷视频所记)

    `paramsPrepareParamsStack`是Struts2默认的拦截器栈,包含了参数处理和准备动作等步骤。通过`<param>`标签,我们可以自定义拦截器的行为,比如`prepare.alwaysInvokePrepare`被设置为`false`,意味着只有当Action类...

    Struts2深入理解

    综上所述,Struts2不仅继承和发展了传统的MVC设计模式,还引入了许多创新机制,如强大的配置机制、灵活的拦截器体系结构以及OGNL表达式语言等,使得开发者能够更加高效地构建复杂的企业级应用。

    struts2教学用ppt

    默认提供了如Prepare、Validation、Exception等预定义拦截器。 5. **结果类型(Result)**:Action执行后的结果可以重定向到一个新的JSP页面、Action或者转发到其他地方。Struts2支持多种结果类型,如dispatcher...

    struts2工作流程

    拦截器是Struts2的核心特性,可以实现AOP(面向切面编程)的功能,如日志、权限检查、事务管理等。默认的拦截器栈包括了类型转换、模型驱动、异常处理等多个拦截器。 6. **Action执行**: 经过拦截器处理后,...

    struts2简要教程

    默认的拦截器栈包含了如Prepare、Validation、I18n等常见功能。 ### 6. OGNL表达式 OGNL(Object-Graph Navigation Language)是Struts2的默认表达式语言,用于在Action、值栈和视图之间传递数据。例如,JSP页面中...

    Struts2配置详解

    在上面的示例中,可以看到`<package>`节点定义了默认的结果类型(如dispatcher、redirect等)以及基本的拦截器栈(如`basicStack`)。这些定义为整个应用程序提供了一套基础的行为模式。 #### 五、参考文档 对于更...

    struts2开发所需架包

    在描述中提到的"核心架包版本:struts2-core-2.3.24",这是Struts2框架的核心组件,包含了处理请求、配置Action、拦截器、结果类型和插件等核心功能的类和接口。 在Eclipse这样的集成开发环境中,导入这些架包可以使...

    struts2 API详解.chm

    默认的拦截器栈包含了多个内置拦截器,如Params(处理请求参数)、Prepare(初始化Action上下文)、I18n(国际化)、Execute(执行Action)等。开发者可以根据需求自定义拦截器,扩展框架功能。 ValueStack是Struts...

Global site tag (gtag.js) - Google Analytics