zoukankan      html  css  js  c++  java
  • struts2 FilterDispatcher StrutsPrepareAndExecuteFilter

    StrutsPrepareAndExecuteFilter与FilterDispatcher的区别

    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
    org.apache.struts2.dispatcher.FilterDispatcher


    FilterDispatcher是早期struts2的过滤器,后期的都用StrutsPrepareAndExecuteFilter了,如 2.1.6、2.1.8。StrutsPrepareAndExecuteFilter名字已经很能说明问题了,prepare与execute,前者表 示准备,可以说是指filter中的init方法,即配制的导入;后者表示进行过滤,指doFilter方法,即将request请求,转发给对应的 action去处理。 


    FilterDispatcher是struts2.0.x到2.1.2版本的核心过滤器.! 
    StrutsPrepareAndExecuteFilter是自2.1.3开始就替代了FilterDispatcher的.! 
    这样的改革当然是有好处的.! 
    为什么这么说.? 应该知道如果我们自己定义过滤器的话, 是要放在strtus2的过滤器之前的, 如果放在struts2过滤器之后,你自己的过滤器对action的过滤作用就废了,不会有效!除非你是访问jsp/html! 
    那我现在有需求, 我必须使用Action的环境,而又想在执行action之前拿filter做一些事, 用FilterDispatcher是做不到的.! 
    那么StrutsPrepareAndExecuteFilter可以把他拆分成StrutsPrepareFilter和StrutsExecuteFilter,可以在这两个过滤器之间加上我们自己的过滤器.! 
    给你打个比喻, 现在有病人要做手术, 现在struts2要做两件事, 搭病床(环境),执行手术.! 那么打麻药的工作呢.? 不可能要病人站着打吧, 所以必须有病床的环境,打完麻药之后再动手术.! 这个比喻非常形象了.!


    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的公共包中,也可以在你的类路径中搜索。默认情况下会去查找以下
                包:
                    org.apache.struts2.static
                    template
                这样你只用请求/struts/xhtml/styles.css,XHTML UI主题默认的样式表将会被返回。同样,AJAX UI组件需要的
                JavaScript文件,也可以在org.apache.struts2.static包中被找到。如果你想加入其它被搜索的包,在web.xml中
                设置filter时,通过给"actionPackages"初始参数一个逗号隔开的包列表值来设定。
                需注意的是:他会暴露一些比较敏感的信息例如,properites文件中的数据库连接信息。
        注:过滤器支持以下初始参数:
            config - 被调入的逗号隔开的XML文件列表。
            actionPackages - 被actions扫描的逗号隔开的packages列表。
            configProviders - 逗号分隔的实现了ConfigurationProvider接口(建造Configuration时被使用)的实现类。
            * - 任意的struts常量。
        通过重载createDispatcher()方法,可以自定义dispather。
        
        属性列表:
            (1)actionMapper:通过注入,提供一个ActionMapper实例。
            (2)dispatcher:暴露给子类一个Dispatcher实例。
            (3)encoding:存储StrutsConstants.STRUTS_I18N_ENCODING的设置。
            (4)filterConfig:通过初始参数,提供一个FilterConfig实例。
            (5)lastModifiedCal:在缓存静态content,提供一个格化的日期用于设定头信息。
            (6)log:提供一个logging实例。
            (7)patchPrefixs:存储静态资源的路径前缀信息。
            (8)serveStatic:存储StrutsConstants.STRUTS_SERVE_STATIC_CONTENT的设置。
            (9)serveStaticBrowserCache:存储StrutsConstants.STRUTS_SERVE_STATIC_BROWSER_CACHE的设置。
        方法列表:
            (1)copy(InputStream input, OutputStream output):从input复制数据到output。
            (2)createDispatcher(FilterConfig filterConfig):创建默认的dispatcher对象,如果需要的话,子类可以重载此方法,
            自定义一个dispatcher对象。
            (3)destory():调用dispatcher.cleanup(),依次释放本地线程,销毁dispatcher对象。
            (4)doFilter(ServletRequest request, ServeltResponse response, FilterChain chain):处理一个action或处理一个请求
            的静态内容。
            (5)findInputStream(String name, String packagePrefix):搜索类路径下的静态资源。
            (6)findStaticResoruce(String name, HttpServletRequest request, HttpServletResponse response):搜索静态的资源,
            直接复制到相应response的头信息中。
            (7)getContentType(String name):获取指定资源的contentType。
            (8)getFilterConfig():获取FilterConfig实例。
            (9)getServletContext():给WebLogic的一些版本提供一个工作区。
            (9)init(FilterConfig filterCongfig):创建默认的dispatcher对象和设置静态资源的默认包信息来初始化filter。
            (10)parse(String packages):返回一个数组通过解析一个指定逗号分隔的packages列表。
            (11)prepareDispatcherAndWrapRequest(HttpServletRequest request, HttpServletResponse response):对给定的request
            对象进行封装返回一个封装HttpServletRequest对象。例如显示的处理multipart数据。
            (12)setMapper(ActionMapper actionMapper)
            (13)setEncoding(String val)
            (14)setServeStaticContent(String val)
            (15)setServeStaticBrowserCache(String val)


    REFERENCES:http://hi.baidu.com/xuemin_q/blog/item/0560972a512f8df5e6cd40d5.html

    http://www.diybl.com/course/3_program/java/javashl/2008510/115051.html

    http://myplace.iteye.com/blog/766077


    ---------------------------------------------------------------------------------------------------------------------------------
    copyright:http://www.cnblogs.com/anee/
  • 相关阅读:
    Saltstack module gem 详解
    Saltstack module freezer 详解
    Saltstack module firewalld 详解
    Saltstack module file 详解
    Saltstack module event 详解
    Saltstack module etcd 详解
    Saltstack module environ 详解
    Saltstack module drbd 详解
    Saltstack module dnsutil 详解
    获取主页_剥离百度
  • 原文地址:https://www.cnblogs.com/anee/p/2675876.html
Copyright © 2011-2022 走看看