晚上回家看struts2 in acion ,这本书也买了快一年了,以前还真没仔细看过,以前看过的strut2的书也只是教怎么快速入门罢了,现在顿觉很有感触。
用了struts2快一年,从xml配置方式到annotation,比如现在项目遇到的不同的使用struts2的方式,基于modelDriver方式,零配置,注解权限控制,一直只是用,遇到问题跟踪下代码,没怎么去学习里面的东西。
拦截器
没有拦截器就没有struts2,学好struts2的必须把这个先拿下。
首先拦截器是类似filter,也是责任链方式,但是filter问题在于只要配置,每个链接过来都要处理,拦截器可以给特定的action包下面的拦截器配置上,需要的链接请求或者逻辑才进行处理,省了不少性能
看框架使用:
首先是StrutsPrepareAndExecuteFilter配置在xml中的入口,顺着这个filter再debug下,发现好多东东,远远超过看什么书,然后去积累的强。
简单的比如:有别的filter要先处理就配置在前面,然后再chain这个,不然会出问题
引用
This filter is better to use when you don't have another filter that needs access to action context information, such as Sitemesh.
复杂的比如:里面的代理action处理类,原来执行是代理类来做的
引用
/**
* Creates an {@link ActionProxy} for the given namespace and action name by looking up the configuration.The ActionProxy
* should be fully initialized when it is returned, including having an {@link ActionInvocation} instance associated.
*
* @param namespace the namespace of the action, can be <tt>null</tt>
* @param actionName the name of the action
* @param methodName the name of the method to execute
* @param extraContext a Map of extra parameters to be provided to the ActionProxy, can be <tt>null</tt>
* @param executeResult flag which tells whether the result should be executed after the action
* @param cleanupContext flag which tells whether the original context should be preserved during execution of the proxy.
* @return ActionProxy the created action proxy
* @since 2.1.1
*/
public ActionProxy createActionProxy(String namespace, String actionName, String methodName, Map<String, Object> extraContext, boolean executeResult, boolean cleanupContext);
那么参数处理等配置默认拦截器又是怎么处理的?
struts2在调用拦截器方法的时候,set进去了ActionInvocation,在处理完动作的时候会调用ActionInvocation的invock方法,这个就象filter里面的chain一样,做了个传递,所以可以在调用chain的前面进行预处理,chain后买进行善后
利用这个特点,自己给项目上加一个ExceptionInterceptor
public class ExceptionInterceptor implements Interceptor {
protected final Log log = LogFactory.getLog(ExceptionInterceptor.class);
@Override
public void init() {
log.info("Exception Interceptor start init");
}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
String result;
try{
result=invocation.invoke();
}catch (Exception e) {
result="exceptionPage";
log.error("exception page ", e);
}
return result;
}
@Override
public void destroy() {
log.info("Exception Interceptor destroy");
}
}
默认开启的拦截器有很多特色,也导致struts2有了根据项目需要可以有很多使用方式。
分享到:
相关推荐
2. **拦截器(Interceptors)**:Struts2的拦截器是其强大的特性之一,允许开发者在Action执行前后添加自定义逻辑。这些拦截器可以实现登录验证、日志记录、性能监控等多种功能。在源码中,你可以看到`...
2. **拦截器链**:在Struts2中,多个拦截器可以形成一个拦截器链,每个拦截器按照定义的顺序依次执行。如果所有拦截器都允许Action执行,那么Action的结果将被传递到下一个拦截器,直到整个链执行完毕。 ### 二、...
- XML配置:在`struts.xml`文件中,使用`<interceptor>`元素定义拦截器,`<interceptor-stack>`元素组合多个拦截器,`<package>`元素下的`interceptors`属性指定拦截器栈。 ```xml <interceptor-stack name=...
第三章涉及了Struts2的拦截器(Interceptor)。拦截器是Struts2的一大特色,它允许在Action执行前后插入自定义的处理逻辑。常见的拦截器有Params拦截器,用于参数绑定;Validation拦截器,进行字段验证;StackTrace...
- **Interceptor**: 拦截器是Struts2中的一个强大特性,它们在Action执行前后按顺序执行,用于处理通用任务,如权限检查、日志记录、事务管理等。开发者可以通过实现`com.opensymphony.xwork2.interceptor栈...
2. **Interceptor**:拦截器是Struts2中非常重要的概念,它们是在Action执行前后插入的代码片段,用于实现通用的功能,如日志记录、权限验证等。通过组合不同的拦截器,可以构建出复杂的业务逻辑。 3. **Result**:...
对于初学者,可以通过阅读这些源码来学习如何使用OGNL表达式,如何编写Action和拦截器,以及如何配置Struts2的XML配置文件。对于有经验的开发者,源码分析有助于找出性能瓶颈,优化代码,提高系统的稳定性和安全性。...
Struts 2的配置主要通过struts.xml文件进行,这个文件定义了Action类、结果类型、拦截器栈等。配置文件允许开发者灵活地映射URL到特定的Action,控制请求的流程,并定义不同结果(如JSP页面、JSON数据等)如何被渲染...
2. **拦截**:当一个请求到达Action时,Struts2会根据配置的拦截器栈顺序,先调用每个拦截器的`intercept()`方法,然后才执行Action的业务逻辑。 3. **后处理**:Action执行完毕后,Struts2会逆序遍历拦截器栈,调用...
Struts2拦截器的实现原理相对简单,当请求struts2的action时,Struts 2会查找配置文件,并根据其配置实例化相对的 拦截器对象,然后串成一个列表,最后一个一个地调用列表中的拦截器 三、定义Struts2拦截器。 ...
这些源码对于深入理解Struts2的工作原理、自定义拦截器、插件开发以及问题排查具有重要意义。 首先,Struts2.5.13是Struts2的一个较新版本,它引入了若干改进和增强,包括对Java EE 8的支持、错误处理的优化、性能...
在深入学习Struts2时,分析这三个组件的源码非常有价值。例如,你可以: - 了解Action和Interceptor的实现细节,如何定义自定义的拦截器。 - 研究OGNL的表达式解析过程,如何优化数据绑定和表达式执行效率。 - 分析...
2. 拦截器配置:在struts.xml配置文件中,你可以定义多个拦截器,并通过`<interceptor>`和`<interceptor-stack>`元素来组织它们。例如,创建一个名为`myInterceptorStack`的拦截器栈,包含`logging`和`validation`两...
首先,Struts2的核心功能包括动作映射、结果类型、拦截器等。动作映射允许开发者将URL请求与特定的业务逻辑方法关联起来,而结果类型则定义了处理动作后如何展示结果,如跳转到某个页面或者发送JSON数据。拦截器则是...
XWork是一个轻量级的框架,提供了许多核心功能,如类型转换、拦截器、异常处理等,这些在Struts2中被广泛应用。因此,为了全面理解Struts2,下载并研究XWork的源码也是非常必要的。 在【标签】中,我们看到了...
Struts2-Spring-Hibernate整合框架是Java Web开发中常用的一种技术栈,它结合了Struts2、Spring和Hibernate三个核心框架,旨在提供一个高效、灵活且可扩展的开发环境。Struts2作为MVC(Model-View-Controller)框架...
3. **拦截器(Interceptor)**: 拦截器是Struts2的一大特色,它们在Action执行前后进行拦截,执行预定义的任务,如日志记录、事务管理、权限验证等。通过拦截器链,可以灵活控制请求的处理流程。 4. **配置灵活性**...
- **拦截器**:拦截器是Struts2的一个重要特性,可以在请求到达Action之前或之后执行特定的操作,如验证用户登录状态、日志记录等。 #### 四、Struts2进阶技巧 - **ModelDriven模式**:该模式允许Action实例共享同...
Struts 2的源码包含了控制器、视图、模型的实现,以及拦截器、插件和其他核心组件。通过研究源码,开发者可以学习如何编写自定义拦截器、动作类,以及如何与Spring、Hibernate等其他框架集成。 **Struts 2.3.12 ...
这些实例是学习和理解Struts2工作原理的好工具,涵盖了各种功能和用法,如动作映射、拦截器、结果类型、国际化、表单验证等。通过这些例子,开发者可以快速上手并熟练掌握Struts2的核心特性。 `docs`目录包含了...