zoukankan      html  css  js  c++  java
  • SSH-Struts(两)—调节器(ActionServlet)

        第一部分介绍的博客Struts架构,下一节介绍中特定成分,这个博客是写Struts控制器ActionServlet。

    扮演的角色

        ActionServlet类是Struts的控制中心,全部来自于浏览器的请求的地址映射、ActionForm的匹配、视图的流转都须要通过控制中心来调度。

    也就是说。它所充当的是总入口的角色,不管是进或者出都须要经过它。

    继承关系


        Struts框架是一个实现,因此有一个默认的实现类ActionServlet。一般直接不做自己的实现。直接调用就可以,或者是继承ActionServlet类对其做一些扩展。

    须要注意的是,扩展时仅仅是重写当中的某些方法,所以须要使用super来调用默认ActionServlet类中的其它方法。

    当然配置文件里的相应配置也要改动为扩展的类。

    ActionServlet的主要功能

    • 读取配置文件

        ActionServlet类实现的是调度功能。而调度所须要的映射信息都保存在Struts-config.xml文件里。因此在ActionServlet载入的时候首先会把配置信息读取到内存中。
        这些配置信息会依据不同的配置内容存储在ModuleConfig对象中。

    这里看一下源代码的两个代码段:
        第一个来自ActionServlet默认实现类。

    表明初始化了三类配置信息:        

    <span style="font-family:FangSong_GB2312;font-size:18px;">            ModuleConfig moduleConfig = initModuleConfig("", config);
                initModuleMessageResources(moduleConfig);
                initModuleDataSources(moduleConfig);
                initModulePlugIns(moduleConfig);
                moduleConfig.freeze();</span>
        第二个代码段来自ModulConfig实现类,是该类的一些变量。表明配置信息依据不同的内容存储在该类相应的HashMap中。


         

    <span style="font-family:FangSong_GB2312;font-size:18px;">        this.dataSources = new HashMap();
            this.exceptions = new HashMap();
            this.formBeans = new HashMap();
            this.forwards = new HashMap();
            this.messageResources = new HashMap();
            this.plugIns = new ArrayList();</span>
        这两个的关系就相当于路由和路由表的关系,Struts-config.xml保存的就是转向、调度所须要的映射关系。


    • 截取clienthttp请求,分发到对应的Action
        ActionServlet本质上还是一个Servlet类。所以它有Servlet的一般方法。仅仅只是它对请求的处理都是调度到请求相应的Action。当然,这当中还做了相应的非常多其它操作如填充ActionForm。
        ActionServlet类收到get或者post请求时。doGet()或者doPost()都会调用process()方法来处理。这里源代码里非常明显不贴代码了。主要看一下process()方法吧:
     
    <span style="font-family:FangSong_GB2312;font-size:18px;">    protected void process(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {
    
            ModuleUtils.getInstance().selectModule(request, getServletContext());
            ModuleConfig config = getModuleConfig(request);
    
            RequestProcessor processor = getProcessorForModule(config);
            if (processor == null) {
               processor = getRequestProcessor(config);
            }
            processor.process(request, response);
        }
    </span>

        在process()方法中。首先调用org.apache.struts.util.ModuleUtils类的selectModule()方法,这种方法选择负责处理当前请求的子应用模块,然后把与子应用模块相关的ModuleConfig和MessageResources对象存储倒request范围中。这使得框架的其余组件能够方便地从request范围中读取这些对象,从而获取应用配置信息和消息资源。
    process()方法的第二步操作为获得RequestProcessor类的实例,然后调用RequestProcessor类的process()方法,来完毕预处理请求操作。
        总结: 关于源代码的一些东西,不是所有都能看的非常明确。可是源代码里面包括了非常多东西值得一看,有助于更深刻仔细的了解Struts框架的实现。ActionServlet类的调度功能的实现主要是配置信息的读取和存储,以及之后怎样使用这些配置信息。

    即从文件——内存——使用这个过程。ActionServlet上的第一个这样的一个,它拥有很多谈论没有一。

    下一步博客再见!

    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    发现个atan2的正确使用方式
    Forward+ Shading架构
    fatal: unable to connect to gitee.com: gitee.com[0: 180.97.125.228]: errno=Unknown error 解决方案
    HDFS HA(高可用性)集群规划
    如何使用RTP引擎对语音编码进行转码
    关于 Angular 应用 tsconfig.json 中的 target 属性
    浅谈 Orbeon form builder 的权限控制
    关于 Angular 应用 tsconfig.json 中的 lib 属性
    orbeon form 通过 url 的方式同第三方应用集成的开发明细
    orbeon form 的配置介绍
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4814525.html
Copyright © 2011-2022 走看看