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上的第一个这样的一个,它拥有很多谈论没有一。

    下一步博客再见!

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

  • 相关阅读:
    类的空间问题
    面向对象初识
    collections模块,shelve模块
    一段水印文字的练习
    jquery选择器中(:button)的含义
    关于通过jquery来理解position的relative及absolute
    [小明学算法]1.动态规划--最长递增子序列问题
    [小明学算法]2.贪心算法----
    [Unity的序列化]2.技能编辑器的实现
    [Unity的序列化]1.什么是序列化
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4814525.html
Copyright © 2011-2022 走看看