`
悲剧了
  • 浏览: 145346 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

struts2源码阅读-三个核心之拦截器

阅读更多
    晚上回家看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
2
分享到:
评论

相关推荐

    struts2-core-2.1.8.1 xwork-core-2.1.6源码

    2. **拦截器(Interceptors)**:Struts2的拦截器是其强大的特性之一,允许开发者在Action执行前后添加自定义逻辑。这些拦截器可以实现登录验证、日志记录、性能监控等多种功能。在源码中,你可以看到`...

    struts2 拦截器

    2. **拦截器链**:在Struts2中,多个拦截器可以形成一个拦截器链,每个拦截器按照定义的顺序依次执行。如果所有拦截器都允许Action执行,那么Action的结果将被传递到下一个拦截器,直到整个链执行完毕。 ### 二、...

    Struts2拦截器及其用法详细说明

    - XML配置:在`struts.xml`文件中,使用`&lt;interceptor&gt;`元素定义拦截器,`&lt;interceptor-stack&gt;`元素组合多个拦截器,`&lt;package&gt;`元素下的`interceptors`属性指定拦截器栈。 ```xml &lt;interceptor-stack name=...

    struts2深入详解源码1-5章

    第三章涉及了Struts2的拦截器(Interceptor)。拦截器是Struts2的一大特色,它允许在Action执行前后插入自定义的处理逻辑。常见的拦截器有Params拦截器,用于参数绑定;Validation拦截器,进行字段验证;StackTrace...

    struts2.1.8 struts2源码 Eclipse关联这个可以

    - **Interceptor**: 拦截器是Struts2中的一个强大特性,它们在Action执行前后按顺序执行,用于处理通用任务,如权限检查、日志记录、事务管理等。开发者可以通过实现`com.opensymphony.xwork2.interceptor栈...

    struts2.0核心源码包

    2. **Interceptor**:拦截器是Struts2中非常重要的概念,它们是在Action执行前后插入的代码片段,用于实现通用的功能,如日志记录、权限验证等。通过组合不同的拦截器,可以构建出复杂的业务逻辑。 3. **Result**:...

    最新 ognl-2.6.11+struts2-core-2[1].0.11+xwork-2.0.5源码

    对于初学者,可以通过阅读这些源码来学习如何使用OGNL表达式,如何编写Action和拦截器,以及如何配置Struts2的XML配置文件。对于有经验的开发者,源码分析有助于找出性能瓶颈,优化代码,提高系统的稳定性和安全性。...

    struts-2.3.15.3源码

    Struts 2的配置主要通过struts.xml文件进行,这个文件定义了Action类、结果类型、拦截器栈等。配置文件允许开发者灵活地映射URL到特定的Action,控制请求的流程,并定义不同结果(如JSP页面、JSON数据等)如何被渲染...

    Struts2拦截器原理分析

    2. **拦截**:当一个请求到达Action时,Struts2会根据配置的拦截器栈顺序,先调用每个拦截器的`intercept()`方法,然后才执行Action的业务逻辑。 3. **后处理**:Action执行完毕后,Struts2会逆序遍历拦截器栈,调用...

    Struts拦截器及token拦截器防止重复提交例子源码

    Struts2拦截器的实现原理相对简单,当请求struts2的action时,Struts 2会查找配置文件,并根据其配置实例化相对的 拦截器对象,然后串成一个列表,最后一个一个地调用列表中的拦截器 三、定义Struts2拦截器。 ...

    struts2.5.13和struts2.3.34的源码包

    这些源码对于深入理解Struts2的工作原理、自定义拦截器、插件开发以及问题排查具有重要意义。 首先,Struts2.5.13是Struts2的一个较新版本,它引入了若干改进和增强,包括对Java EE 8的支持、错误处理的优化、性能...

    struts2核心包源码-2.0.11.2

    在深入学习Struts2时,分析这三个组件的源码非常有价值。例如,你可以: - 了解Action和Interceptor的实现细节,如何定义自定义的拦截器。 - 研究OGNL的表达式解析过程,如何优化数据绑定和表达式执行效率。 - 分析...

    Struts2的拦截器的使用详解

    2. 拦截器配置:在struts.xml配置文件中,你可以定义多个拦截器,并通过`&lt;interceptor&gt;`和`&lt;interceptor-stack&gt;`元素来组织它们。例如,创建一个名为`myInterceptorStack`的拦截器栈,包含`logging`和`validation`两...

    Struts2权威指南 加源码

    首先,Struts2的核心功能包括动作映射、结果类型、拦截器等。动作映射允许开发者将URL请求与特定的业务逻辑方法关联起来,而结果类型则定义了处理动作后如何展示结果,如跳转到某个页面或者发送JSON数据。拦截器则是...

    struts-2.0.14-src.zip

    XWork是一个轻量级的框架,提供了许多核心功能,如类型转换、拦截器、异常处理等,这些在Struts2中被广泛应用。因此,为了全面理解Struts2,下载并研究XWork的源码也是非常必要的。 在【标签】中,我们看到了...

    struts2-spring-hibernate

    Struts2-Spring-Hibernate整合框架是Java Web开发中常用的一种技术栈,它结合了Struts2、Spring和Hibernate三个核心框架,旨在提供一个高效、灵活且可扩展的开发环境。Struts2作为MVC(Model-View-Controller)框架...

    struts-2.3.8-all.zip

    3. **拦截器(Interceptor)**: 拦截器是Struts2的一大特色,它们在Action执行前后进行拦截,执行预定义的任务,如日志记录、事务管理、权限验证等。通过拦截器链,可以灵活控制请求的处理流程。 4. **配置灵活性**...

    Struts2视频教程

    - **拦截器**:拦截器是Struts2的一个重要特性,可以在请求到达Action之前或之后执行特定的操作,如验证用户登录状态、日志记录等。 #### 四、Struts2进阶技巧 - **ModelDriven模式**:该模式允许Action实例共享同...

    struts-2.3.12-all.zip

    Struts 2的源码包含了控制器、视图、模型的实现,以及拦截器、插件和其他核心组件。通过研究源码,开发者可以学习如何编写自定义拦截器、动作类,以及如何与Spring、Hibernate等其他框架集成。 **Struts 2.3.12 ...

    Struts-2.3.16.1 -All

    这些实例是学习和理解Struts2工作原理的好工具,涵盖了各种功能和用法,如动作映射、拦截器、结果类型、国际化、表单验证等。通过这些例子,开发者可以快速上手并熟练掌握Struts2的核心特性。 `docs`目录包含了...

Global site tag (gtag.js) - Google Analytics