`

StrutsPrepareAndExecuteFilter学习笔记

 
阅读更多
来源:http://yu.an.jin.5.blog.163.com/blog/static/53155811201082410106993/
package org.apache.struts2.dispatcher.ng.filter;
import org.apache.struts2.StrutsStatics;
import org.apache.struts2.dispatcher.Dispatcher;
import org.apache.struts2.dispatcher.ng.PrepareOperations;
import org.apache.struts2.dispatcher.ng.ExecuteOperations;
import org.apache.struts2.dispatcher.ng.InitOperations;
import org.apache.struts2.dispatcher.mapper.ActionMapping;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* Handles both the preparation and execution phases of the Struts dispatching process.  This filter is better to use
* when you don't have another filter that needs access to action context information, such as Sitemesh.
*/
public class StrutsPrepareAndExecuteFilter implements StrutsStatics, Filter {
    private PrepareOperations prepare;
    private ExecuteOperations execute;
//初始化过滤器
    public void init(FilterConfig filterConfig) throws ServletException {
        InitOperations init = new InitOperations(); //初始化辅助对象,封装了初始化的一些操作
        try {
            FilterHostConfig config = new FilterHostConfig(filterConfig); //对filterConfig进行封装
            init.initLogging(config); //通过config,初始化内部Struts的记录


            Dispatcher dispatcher = init.initDispatcher(config); //通过config,创建并初始化dispatcher



            init.initStaticContentLoader(config, dispatcher); //通过config和dispatcher,初始化与过滤器相关的静态内容加载器
            prepare = new PrepareOperations(filterConfig.getServletContext(), dispatcher); //通过config和dispatcher,创建request被处理前的系列操作对象
            execute = new ExecuteOperations(filterConfig.getServletContext(), dispatcher);//通过config和dispatcher,创建处理request的系列操作对象

        } finally {
            init.cleanup(); //清空ActionContext
        }
    }
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;
        try {
            prepare.createActionContext(request, response); //创建ACTIONCONTEXT,并初始化Theadlocal

            prepare.assignDispatcherToThread(); //指派dispatcher给Theadlocal
            prepare.setEncodingAndLocale(request, response); //设置request的编码和LOCAL
            request = prepare.wrapRequest(request); //封装request
            ActionMapping mapping = prepare.findActionMapping(request, response); //查找并选择创建ActionMapping
            if (mapping == null) { //如果映射不存在
                boolean handled = execute.executeStaticResourceRequest(request, response); //试图执行一个静态资源的请求
                if (!handled) {
                    chain.doFilter(request, response);
                }
            } else { //如果存在映射
                execute.executeAction(request, response, mapping); //执行action
            }
        } finally {
            prepare.cleanupRequest(request); //清除request的Threadlocal
        }
    }
    public void destroy() {
        prepare.cleanupDispatcher();
    }
}
分享到:
评论

相关推荐

    struts2学习笔记(1)

    ### Struts2学习笔记知识点详解 #### 一、Struts2框架的基本引入步骤 ##### 1. 导入Struts2相关Jar包 在引入Struts2框架时,首先需要将Struts2的相关Jar包导入到项目的类路径中。这些Jar包通常包括核心库以及其他...

    张龙S2SH学习笔记(经典)

    【张龙S2SH学习笔记(经典)】是基于圣思园张龙的视频教程整理出的学习资料,主要涵盖了Struts2、Spring和Hibernate这三大框架的整合使用,也就是我们常说的SSH(Spring、Struts2、Hibernate)框架集成。SSH框架在...

    Struts2学习笔记

    本学习笔记将深入探讨Struts2的核心概念、架构以及实际应用。 一、Struts2框架概述 1. 架构:Struts2基于Model-View-Controller(MVC)设计模式,将业务逻辑、数据处理和用户界面分离,提高了代码的可读性和可维护...

    牧紫小岩的Struts2学习笔记

    ### 牧紫小岩的Struts2学习笔记精要 #### Struts2与Struts1对比 在**牧紫小岩的Struts2学习笔记**中,提到了Struts1和Struts2在实例化Action上的关键差异。Struts1在启动时创建Action实例,并在整个应用程序运行...

    Struts2.1学习笔记

    ### Struts2.1学习笔记 #### Struts2的来源与优点 - **来源**:Struts2是在WebWork2的基础上发展起来的,它继承了WebWork2的优点,并且进行了改进,使其更适合现代Web应用程序的需求。与Struts1相比,Struts2的...

    Struts2学习笔记与心得

    在探讨Struts2的学习心得之前,我们先来分析一下Struts2与Struts1之间的区别。 ##### 1.1 架构设计 - **Struts1**:采用MVC(Model-View-Controller)架构模式,其中控制器是由`ActionServlet`来实现的,该控制器...

    Struts2学习笔记2012

    ### Struts2学习笔记2012 #### 一、建立一个Struts2工程 **步骤详解:** 1. **创建Web项目:** - 在MyEclipse中选择“File” > “New” > “Dynamic Web Project”,创建一个新的Web项目。 2. **解压并配置...

    struts学习笔记(四)

    本篇“Struts学习笔记(四)”着重于深入理解Struts的工作原理和实际应用,通过阅读提供的Struts.pdf文档,我们可以获取以下几个关键知识点: 1. **MVC模式**:在Struts框架中,MVC模式被用于分离业务逻辑、数据模型...

    struts概述(我自己的学习笔记)

    这篇学习笔记将对Struts的核心概念、工作原理以及其在实际开发中的应用进行详细介绍。 一、Struts的基本概念 1. MVC模式:MVC模式是一种软件设计模式,用于将业务逻辑(Model)、用户界面(View)和控制逻辑...

    ssh 学习笔记

    SSH(Struts2、Hibernate、Spring)学习笔记详细涵盖了SSH三大框架的学习经验和常见问题解决方案。SSH三大框架在Java Web开发中被广泛使用,它们相互配合,各司其职,能够帮助开发者构建稳定高效的系统。 Struts2是...

    传智播客struts2全程学习笔记

    ### 传智播客Struts2全程学习笔记 #### Struts2的优点 1. **无侵入式设计**:与Struts1相比,Struts2的设计更为先进,它不依赖于Servlet API或Struts API,这使得Struts2更加灵活且易于集成到其他环境中。在代码...

Global site tag (gtag.js) - Google Analytics