`
liebaorun
  • 浏览: 22787 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Struts2 Interceptor的原理

阅读更多
1.Struts2的interceptor是配置在xml文件中的:
    interceptor: interceptor标签,必须包含名称和类名
    interceptors: package标签的子标签,只用来包含interceptor-ref、
                    interceptor-stack,无其它作用
    interceptor-ref: interceptor标签别名,可以指向interceptor,也可以指向
                        interceptor-stack
    interceptor-stack: intercepor标签的集合,只包含interceptor-ref
    default-interceptor-ref: action默认的interceptor集合
dtd描述代码:
<!ELEMENT interceptors (interceptor|interceptor-stack)+>

<!ELEMENT interceptor (param*)>
<!ATTLIST interceptor
    name CDATA #REQUIRED
    class CDATA #REQUIRED
>

<!ELEMENT interceptor-stack (interceptor-ref*)>
<!ATTLIST interceptor-stack
    name CDATA #REQUIRED
>

<!ELEMENT interceptor-ref (param*)>
<!ATTLIST interceptor-ref
    name CDATA #REQUIRED
>

<!ELEMENT default-interceptor-ref (#PCDATA)>
<!ATTLIST default-interceptor-ref
    name CDATA #REQUIRED
>


2.Struts2的Interceptor是以责任链模式被调用的,包括ActionInvocation、Interceptor接口,以下为一个示意例子:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

interface ActionInvocation{ 
    public String invoke(); 
} 

interface Interceptor{ 
	public String intercept(ActionInvocation invocation); 
} 

class SampleActionInvocation implements ActionInvocation{ 

    private Iterator interceptors = null; 
    private Action action = null; 

    void setInterceptors(List list){ 
           interceptors = list.iterator(); 
    } 

    void setAction(Action action){ 
          this.action = action; 
    } 
    
     public String invoke(){ 
        //do interceptor       
        if(interceptors.hasNext()){ 
           Interceptor interceptor = (Interceptor)interceptors.next(); 
           interceptor.intercept(this); 
        }else{ 
           //do action 
           action.execute(); 
        }
        return null;
     } 
} 

class SampleInterceptor implements Interceptor{ 
      public String intercept(ActionInvocation invocation){ 
          System.out.println(this.toString()+" before intercept"); 
          invocation.invoke(); 
          System.out.println(this.toString()+" after intercept"); 
          return null; 
      } 
} 

class Action{ 
   void execute(){ 
       System.out.println(this.toString()+" excute "); 
   } 
} 

public class TestMain{ 
   public static void main(String[] args){ 
       SampleActionInvocation sai = new SampleActionInvocation();
       List list = new ArrayList();
       list.add(new SampleInterceptor());
       list.add(new SampleInterceptor());
       sai.setInterceptors(list); 
       sai.setAction(new Action()); 
       sai.invoke();
   } 
} 


0
0
分享到:
评论

相关推荐

    struts2 Interceptor详解

    Struts2 Interceptor详解 Struts2作为一款流行的Java Web框架,其强大的功能之一就是拦截器(Interceptor)。拦截器在MVC模式中扮演着重要角色,它可以对请求进行预处理和后处理,提供了灵活的扩展机制,使得业务...

    Struts2基本原理

    Struts2通过拦截器(Interceptor)机制增强了其可扩展性。拦截器可以实现预处理和后处理功能,如日志记录、事务管理、权限验证等。ActionInvocation负责调用Action及相应的拦截器链。 7. **与WebWork的关系**: ...

    struts2 原理 解析 图

    在Action执行之前,Struts2使用拦截器(Interceptor)来处理请求。拦截器是Struts2的一个强大特性,它们按照预定义的顺序执行,可以添加自定义的行为,比如日志记录、数据验证、事务管理等。当请求到达Action时,...

    struts2运行原理

    struts2 运行原理 struts2 是一个基于 MVC 模式的 Web 应用程序框架,它提供了一些有用的特性来简化 Web 应用程序的开发。下面将详细介绍 struts2 的运行原理。 struts2 框架结构 struts2 框架结构主要包括以下几...

    struts2工作原理图

    4. **Preparation Phase**:在找到Action Mapping后,Struts2会进行预处理,包括填充Action实例的属性(如果请求参数与Action属性匹配),以及执行拦截器(Interceptor)。拦截器是Struts2的一个强大特性,允许在...

    struts2工作原理

    5. `org.apache.struts2.interceptor` 包含了内置的拦截器,这些拦截器在请求到达Action之前执行,可用于认证、日志、异常处理等操作。 6. `org.apache.struts2.util` 提供了各种实用工具类,帮助开发者进行日常...

    struts2重要知识点原理

    总结起来,Struts2框架通过FilterDispatcher作为核心控制器拦截和处理用户请求,使用Action和Interceptor实现业务逻辑和控制流,通过配置文件(struts.xml)管理Action的映射和结果,同时依赖ObjectFactory创建和管理...

    struts2工作原理及拦截器和过滤器

    Struts2 工作原理及拦截器和过滤器 Struts2 框架的工作原理可以分为以下几个步骤: 1. 客户端发出一个指向 Servlet 容器的请求(Tomcat); 2. 这个请求会经过几个过滤器,最后会到达 FilterDispatcher 过滤器。...

    Struts2工作原理

    ### Struts2工作原理深度解析 #### 引言 Struts2框架,作为Java Web开发领域的一款重要工具,其设计理念源自于WebWork框架,并融合了Struts1的优点,旨在提供更为强大、灵活的MVC(Model-View-Controller)架构...

    Struts2执行原理

    总的来说,Struts2的执行原理是通过过滤器链、ActionMapper、ActionProxy、ActionInvocation以及拦截器等组件协作,实现了从接收到HTTP请求到生成响应的全过程,提供了一套灵活且可扩展的MVC框架。

    Struts2.x_Interceptor

    Interceptor(拦截器)是Struts2框架的核心组件之一,它在Action调用前后执行,实现了业务逻辑的分离,增强了代码的复用性和灵活性。 Interceptor是Struts2实现AOP(面向切面编程)的一种方式,主要负责处理请求和...

    Struts2 技术内幕——深入解析Struts2架构设计与实现原理

    要深入学习和掌握Struts2,建议阅读官方文档,参与实际项目实践,也可以参考相关的技术书籍和教程,例如《Struts2技术内幕——深入解析Struts2架构设计与实现原理》等资源,来提升对Struts2框架的全面理解。

    Struts2+技术内幕——深入解析Struts2架构设计与实现原理

    首先,Struts2的核心在于它的拦截器(Interceptor)机制。拦截器是Struts2的一个强大特性,它们在Action调用前后执行,可以处理诸如验证、日志、事务管理等通用任务。通过灵活配置,开发者可以构建出满足各种需求的...

    Struts2拦截器原理分析

    在本文中,我们将深入探讨Struts2拦截器的工作原理。 ### 一、拦截器概念 拦截器是基于Java的动态代理机制实现的,它允许我们在Action执行前后插入自定义的行为。在Struts2中,拦截器是一个实现了`Interceptor`...

    Struts2 技术内幕-深入解析Struts2架构设计与实现原理

    《Struts2技术内幕-深入解析Struts2架构设计与实现原理》这本书深入探讨了Struts2的核心概念、架构和实现机制。 1. **Struts2架构设计**:Struts2的架构基于拦截器(Interceptor)模式,它将业务逻辑和表现层解耦,...

    struts2工作原理.doc

    1. **拦截器(Interceptor)**:拦截器是Struts2的核心技术之一,它负责拦截用户请求并执行相应的逻辑处理。拦截器可以被配置为单个方法级别的,也可以应用于整个Action级别。 2. **配置文件(Configuration Files)...

Global site tag (gtag.js) - Google Analytics