2.4 控制层
控制层的主要功能是实现视图层与模型层的匹配。它接收客户端发出的请求,并调用相应的模型组件进行处理,最后采用不同的视图显示处理结果。在这个过程中,对用户请求的分发和处理是控制层的核心。
通过第二章的介绍可知,Struts框架拥有一个结构清晰、功能全面、配置灵活方便的控制层结构。它通过ActionServlet作为中心控制器,依据配置文件对客户端请求进行分发和处理,从而实现视图层和控制层的良好衔接。通过其配置文件可以轻松地把握整个程序的逻辑结构。
但是,Struts中商业逻辑处理模块与封装了具体业务操作的模型层JavaBean之间存在的相互依赖关系,需要在类内部通过硬编码表示,这造成了模块间的紧耦合,不利于系统功能的复用和调试。而Spring框架具有的IoC容器,在对系统功能模块进行集中管理的同时,可以轻松实现模块间的解耦,其采用的依赖注入技术也是当前流行的软件设计模式,模块间的松散耦合也有利于系统的并行开发和单元测试。此外,Spring内置的AOP框架可以方便地为各功能模块提供声明式的事务管理功能,其模块化结构使它可以与其它框架很好的集成。
因此,本框架在控制层的设计中,采用Struts+Spring实现。框架的核心控制结构由Struts实现,利用它的请求分发处理机制实现视图层与模型层的匹配。同时,把Struts中的功能模块与模型层的处理模块委托给Spring的IoC容器进行管理,在保持系统功能结构清晰的同时,实现了模块间的解耦。
由控制层的设计可知,其核心处理结构依然采用Struts框架实现,但把逻辑功能模块及其依赖关系交由Spring的IoC容器进行管理。经过研究与分析,Struts框架与Spring框架的集成方式有如下三种:
(1)第一种集成方式:将模型层中的JavaBean交由Spring的IoC容器管理,在Struts的Action中,使用Spring的上下文对象WebApplicationContext访问容器中的JavaBean对象。这种方式是一种松耦合集成方案,其保留了Struts的控制结构,Action由Struts自行管理,Spring只是管理模型层中的JavaBean,并不影响系统的控制结构。采用这种集成方式,只需将Action中调用JavaBean执行业务逻辑的代码,改成调用Spring中的Bean执行业务逻辑代码即可。
(2)第二种集成方式:将模型层中的JavaBean交由Spring的IoC容器管理,Struts中的Action类继承Spring中的ActionSupport类。这种方式实际上是对第一种方式的改进,Spring的ActionSupport类提供了getWebApplicationContext()等方法,通过该方法,用户在编写Action时可以方便得取得Spring的上下文对象WebApplicationContext,从而通过它引用Spring中的Bean对象,这实际上是对第一种方式的简单封装。
(3)第三种集成方式:把Struts的Action和模型层中的JavaBean都委托给Spring的IoC容器管理。这种方式是一种紧耦合集成方案,它将Struts中Action的实现也放到了Spring的IoC容器中,从而方便利用Spring的IoC特性对Action、JavaBean及其依赖关系进行管理。
由于本系统使用第一种集成方式,见图下:图2-4 MVC结构示意图
该方式的配置方法如下:
在系统配置文件web.xml中声明一个监听器(Listener)或Servlet,其作用是在系统启动时读取Spring的Bean配置文件,初始化IoC容器。使用监听器名称为ContextLoaderListener。
监听器(Listener)是Servlet2.3版本以后才引入的功能,若使用的是Servlet2.2及以前版本的容器,则应该使用一个名为ContextLoaderServlet的Servlet完成相同的功能。
针对以上配置的Listener或Servlet还需要声明一个contextConfigLocation的参数元素,用以指定要加载的Spring配置文件的路径及名称,默认加载/WEB-INF目录下的applicationContext.xml文件。 J2EE基于Web实现公共信息和资料的发布管理和控制(6):http://www.751com.cn/jisuanji/lunwen_7518.html