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();
}
}
分享到:
相关推荐
Struts2 Interceptor详解 Struts2作为一款流行的Java Web框架,其强大的功能之一就是拦截器(Interceptor)。拦截器在MVC模式中扮演着重要角色,它可以对请求进行预处理和后处理,提供了灵活的扩展机制,使得业务...
Struts2通过拦截器(Interceptor)机制增强了其可扩展性。拦截器可以实现预处理和后处理功能,如日志记录、事务管理、权限验证等。ActionInvocation负责调用Action及相应的拦截器链。 7. **与WebWork的关系**: ...
在Action执行之前,Struts2使用拦截器(Interceptor)来处理请求。拦截器是Struts2的一个强大特性,它们按照预定义的顺序执行,可以添加自定义的行为,比如日志记录、数据验证、事务管理等。当请求到达Action时,...
struts2 运行原理 struts2 是一个基于 MVC 模式的 Web 应用程序框架,它提供了一些有用的特性来简化 Web 应用程序的开发。下面将详细介绍 struts2 的运行原理。 struts2 框架结构 struts2 框架结构主要包括以下几...
4. **Preparation Phase**:在找到Action Mapping后,Struts2会进行预处理,包括填充Action实例的属性(如果请求参数与Action属性匹配),以及执行拦截器(Interceptor)。拦截器是Struts2的一个强大特性,允许在...
5. `org.apache.struts2.interceptor` 包含了内置的拦截器,这些拦截器在请求到达Action之前执行,可用于认证、日志、异常处理等操作。 6. `org.apache.struts2.util` 提供了各种实用工具类,帮助开发者进行日常...
总结起来,Struts2框架通过FilterDispatcher作为核心控制器拦截和处理用户请求,使用Action和Interceptor实现业务逻辑和控制流,通过配置文件(struts.xml)管理Action的映射和结果,同时依赖ObjectFactory创建和管理...
Struts2 工作原理及拦截器和过滤器 Struts2 框架的工作原理可以分为以下几个步骤: 1. 客户端发出一个指向 Servlet 容器的请求(Tomcat); 2. 这个请求会经过几个过滤器,最后会到达 FilterDispatcher 过滤器。...
### Struts2工作原理深度解析 #### 引言 Struts2框架,作为Java Web开发领域的一款重要工具,其设计理念源自于WebWork框架,并融合了Struts1的优点,旨在提供更为强大、灵活的MVC(Model-View-Controller)架构...
总的来说,Struts2的执行原理是通过过滤器链、ActionMapper、ActionProxy、ActionInvocation以及拦截器等组件协作,实现了从接收到HTTP请求到生成响应的全过程,提供了一套灵活且可扩展的MVC框架。
Interceptor(拦截器)是Struts2框架的核心组件之一,它在Action调用前后执行,实现了业务逻辑的分离,增强了代码的复用性和灵活性。 Interceptor是Struts2实现AOP(面向切面编程)的一种方式,主要负责处理请求和...
要深入学习和掌握Struts2,建议阅读官方文档,参与实际项目实践,也可以参考相关的技术书籍和教程,例如《Struts2技术内幕——深入解析Struts2架构设计与实现原理》等资源,来提升对Struts2框架的全面理解。
首先,Struts2的核心在于它的拦截器(Interceptor)机制。拦截器是Struts2的一个强大特性,它们在Action调用前后执行,可以处理诸如验证、日志、事务管理等通用任务。通过灵活配置,开发者可以构建出满足各种需求的...
在本文中,我们将深入探讨Struts2拦截器的工作原理。 ### 一、拦截器概念 拦截器是基于Java的动态代理机制实现的,它允许我们在Action执行前后插入自定义的行为。在Struts2中,拦截器是一个实现了`Interceptor`...
《Struts2技术内幕-深入解析Struts2架构设计与实现原理》这本书深入探讨了Struts2的核心概念、架构和实现机制。 1. **Struts2架构设计**:Struts2的架构基于拦截器(Interceptor)模式,它将业务逻辑和表现层解耦,...
1. **拦截器(Interceptor)**:拦截器是Struts2的核心技术之一,它负责拦截用户请求并执行相应的逻辑处理。拦截器可以被配置为单个方法级别的,也可以应用于整个Action级别。 2. **配置文件(Configuration Files)...