`
zy77612
  • 浏览: 284091 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Struts学习

阅读更多
org.apache.struts2.dispatcher.FilterDispatcher的四个功能
1.org.apache.struts2.dispatcher.FilterDispatcher?
    是Struts2的主要的Filter,负责四个方面的功能:
        (1)执行Actions
        (2)清除ActionContext
        (3)维护静态内容
        (4)清除request生命周期内的XWork的interceptors(拦截者)
    另注:该过滤器应该过滤所有的请求URL。一般被设置为/*.
    具体:
        (1)执行Actions
            过滤器通过ActionMapper对象,来判断是否应该被映射到Action.如果mapper对象指示他应该被映射,过滤链将会被终止, 然后Action被调用。这一点非常重要,如果同时使用SiteMesh filter,则SiteMesh filter应该放到该过滤器前,否则 Action的输出将不会被装饰。
        (2)清除ActionContext
            过滤器为了确保内存溢出,会自动的清除ActionContext。这可能会存在一些问题,在和其它的框架集成时,例如SiteMesh。
            ActionContextCleanUp提供了怎么处理这些问题的一些信息。
        (3)维护静态内容
            过滤器也会维护在Struts2中使用的一些公共的静态的内容,例如JavaScript文件,CSS文件等。搜索/struts/*范围内的请求,然后将/struts/后面的值映射到一些struts的公共包中,也可以在你的类路径中搜索。默认情况下会去查找以下包:

StrutsPrepareAndExecuteFilter介绍

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();
    }
}

分享到:
评论

相关推荐

    struts学习(二)

    Struts学习(二)主要涉及的是Apache Struts框架的深入理解和使用,这是一个广泛应用于Java Web开发中的MVC框架。在本篇文章中,我们将探讨Struts的核心概念、安全问题以及一些实用工具,帮助开发者更好地掌握这一...

    struts 学习案例

    【标题】"Struts学习案例" 提供了一个实际的项目实例,旨在帮助学习者快速理解和掌握Struts框架的核心概念与应用。通过深入学习这个案例,你可以了解如何将Struts整合到你的Java Web项目中,以及如何利用它来处理...

    struts学习总结

    以下是对Struts学习的一些核心知识点的详细解释: 1. **MVC模式**:Model-View-Controller模式是软件工程中的一种设计模式,用于分离业务逻辑、数据模型与用户界面。在Struts中,Controller由Action类实现,Model...

    struts学习

    struts ppt 2.1.1 MVC模式的应用 MVC是一个设计模式,它强制性地使应用程序的输入、处理和输出分开。使用MVC模式,应用程序被分成三个核心部件:模型(Model,即M)、视图(View,即V)、控制器(Controller,即C)...

    日文struts学习ppt

    根据给定的日文Struts学习PPT的内容,我们可以总结出以下关键知识点: ### Struts简介 **Struts** 是一种广泛应用于Java Web应用程序开发的框架。它是一个开源项目,具有高度的信任度,因为该框架已经得到了广泛...

    Struts 学习资料大全

    Struts2 学习书籍: 《精通Struts:基于MVC的JavaWeb设计与开发(孙卫琴)》 《Struts快速学习指南》 Struts2.0.chm 《Struts 2 in Action》 《Struts in Action 中文版》

    struts学习总结.zip

    欢迎访问我的博客:http://blog.csdn.net/chenpy/<br> <br>struts学习总结说明 本人精心搜集了有关struts学习的资料,有我以前学习时候写的笔记,有学习用的代码还有 其他的好资料,详细列表如下: 1...

    struts学习的一些资料

    Struts是Java Web开发中的一个开源框架,由Apache软件基金会维护。它主要基于Model-View-Controller(MVC)设计模式,旨在简化...无论是初学者还是有经验的开发者,这些资源都能为你的Struts学习之路提供宝贵的指导。

    struts 学习资料 (pdf)

    在“struts 学习资料 (pdf)”这个压缩包中,包含的三个PDF文件分别是struts1.pdf、struts3.pdf和Struts2.pdf,它们分别可能涵盖了以下的知识点: 1. **Struts1**: Struts1是最早的版本,它引入了许多Web开发的...

    struts学习代码.rar

    本压缩包"struts学习代码.rar"包含了与Struts2相关的课程代码,这为我们深入理解并实践Struts2的核心概念提供了一个很好的学习资源。 首先,Struts2框架的中心思想是解耦应用的业务逻辑、数据模型以及用户界面。...

    Struts学习资料整理

    这个“Struts学习资料整理”压缩包包含了丰富的资源,旨在帮助初学者和有经验的开发者深入理解并掌握Struts框架的各个方面。 首先,`Struts Taglibs标签库详解.chm`文件是对Struts标签库的详细解析。Struts标签库是...

    struts学习用笔记

    这篇"struts学习用笔记"涵盖了以下几个重要的知识点: 1. **MVC设计模式**:MVC是一种将业务逻辑、数据和用户界面分离的设计模式。在Struts中,模型负责业务处理,视图负责数据显示,控制器接收用户请求并调用模型...

    structs1导入包;struts学习

    struts学习”涉及到的关键知识点包括以下几个方面: 1. **Struts 1框架基础**: Struts 1 提供了一个中心化的控制器Servlet,名为ActionServlet,用于处理所有的HTTP请求。它通过配置文件(struts-config.xml)...

    struts 学习,吐血共享

    在这个“struts 学习,吐血共享”资料中,我们可以预见到它将深入讲解Struts框架的关键概念和实践应用。 Struts的核心组成部分包括Action类、配置文件(struts-config.xml)、ActionForm、ActionServlet以及一系列的...

    strutsapi struts学习使用的HTML帮助文档

    在"strutsapi struts学习使用的HTML帮助文档"中,你将找到关于Struts API的详细信息,包括各个类、接口、方法以及它们的用法。这些文档通常会分为以下几个部分: 1. **Action**: Struts的核心控制器组件,负责接收...

    struts学习的好项目

    这个名为"struts学习的好项目"的压缩包显然包含了全面的Struts框架的学习资源,帮助开发者掌握Struts的各种功能。 Struts的核心是MVC(Model-View-Controller)设计模式,它将业务逻辑、数据模型和用户界面分离开来...

    struts学习笔记(四)

    在本“Struts学习笔记(四)”中,我们将会深入探讨Struts框架的核心概念、工作原理以及如何实际运用到项目开发中。 首先,Struts框架的核心目标是提供一个结构化的开发环境,将业务逻辑、数据处理和用户界面有效地...

    struts学习(一)

    在"Struts学习(一)"这个主题中,我们将深入探讨Struts的核心概念、工作原理以及如何开始使用它。 Struts 1是最基础的版本,而Struts 2则是其后续的升级版,提供了更多功能和改进。在Struts 1中,核心是Action...

    struts 学习理解的 初级项目

    这个"Struts学习理解的初级项目"是为初学者设计的一个经典实例,旨在帮助大家深入理解Struts的核心概念和工作原理。 在Web开发中,MVC模式是一种将业务逻辑、数据和用户界面分离的设计方式。Struts框架通过控制器...

    [摘]Struts 学习笔记之ActionForm

    博客文章"Struts学习笔记之ActionForm - xiaodaoxiaodao——蓝小刀的自言自语 - BlogJava.mht"可能包含更深入的实践示例和经验分享,包括如何处理ActionForm的生命周期、动态Form Beans、国际化等话题。通过阅读这篇...

Global site tag (gtag.js) - Google Analytics