资源描述:
《struts及spring模式分析new》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Struts及Spring模式分析112060782陈俊摘要Struts框架及Spring框架提供了预备的软件架构和相关的软件包,可融合使用开发层次划分清晰并易于复用的Web应用。通过分析Struts框架控制器源码所使用的经典设计模式和J2EE模式阐明了Struts框架的工作原理及设计思想。阐述了Spring框架的一些经典设计模式和反转控制模式的实现思想。1引言以前做J2EE项目的时候框架都已经被一些学长们给搭好,我们只是依葫芦画瓢,照着原来的代码实现功能,我们也知道用到了Struts、Spring等等的框架。然而我们很少去真正地深入的去了解那
2、些框架。在学习了软件结构设计与模式分析课程之后我不自觉的联想到里面到底使用了哪些设计模式呢?2设计模式与框架框架是构成一类特定软件可复用设计的一组相互协作的类。它规定了应用的体系结构、类和对象的分割和协作、各部分的主要责任,以及控制流程。框架记录了其应用领域的共同的设计决策,预定义设计参数以便于应用设计者能专注于应用本身的特定细节。软件开发的全过程都涉及模式,从业务建模、分析到测试、部署等,程序设计阶段需要考虑的通用模式大致包括框架模式、设计模式和代码模式。一个框架模式描述软件系统里的基本的结构组织或纲要,提供一些事先定义好的子系统,指定他们的
3、责任并给出把他们组织在一起的法则。代码模式描述怎样利用特定的编程语言的特点来实现一个组件的某些特定的方面或关系。一个设计模式命名、抽象和确定了一个通用设计结构的主要方面,这些设计结构能被用来构造可复用的面向对象设计。每一个设计模式都集中于一个面向对象设计问题或设计要点,描述了什么时候使用,在另一些约束下是否还能使用,以及使用的效果和如何取舍。设计模式和框架模式主要是根据抽象的层次和定义模式的粒度来划分的,J2EE模式是应用在J2EE平台上WEB应用的存在于设计模式和框架模式之间的某种抽象层次的模式,J2EE模式强调分层开发应用。本文对Strut
4、s框架的分析主要使用经典的设计模式和J2EE模式。框架与设计模式的目的都是为了提高复用,框架是具体的而模式是抽象的,框架高度灵活的可复用性和可扩充性只能用多种设计模式来实现。3Struts框架控制器的设计模式与分析3.1Struts框架的组成Struts框架主要实现了MVC这个框架模式,MVC比经典的设计模式的尺度更大,由合成模式、策略模式和观察者模式等组成。如果不考虑是否支持经典的观察者通知模式,Jspmodel2就是应用于J2EE平台上WEB应用的用Jsp、Servlet和模型组件实现的MVC模式,其结构如图3.1所示。交互响应请求图3.1
5、Model2的架构浏览器数据库控制器(Servlet)模型(JavaBean)视图(JSP)在Jspmodel2中,视图就是一组Jsp文件,包含标准的Jsp标签或客户化标签;模型表示应用程序的状态和业务逻辑,通常由JavaBean或EJB组件来实现;控制器由ActionServlet类和Action类来实现。3.2控制器实现的设计模式Struts框架的核心就是它的控制器组件。控制器由Action-Servlet组件、Action组件和RequestProcessor组件来实现。Action-Servlet组件和RequestProcessor组
6、件负责集中控制,Action组件负责处理单项业务。3.2.1前端控制器模式前端控制器提供了一个统一的位置来封装表现层的公共请求处理。它截获请求并在执行了通用的动作后将它们发送到原本的目标,通常转移给应用控制器,由应用控制器负责操作和视图管理。ActionServlet类是Struts框架的核心控制器组件,它实现了前端控制器模式,所有的用户请求都先由它处理,再转发给其它组件,一个应用中只能配置一个ActionServlet类,应用的生命周期中仅创建ActionServlet类的一个实例,这个实例可以同时响应多个用户请求。Servlet容器在启动时
7、或用户首次请求ActionServlet时加载ActionServlet类。此时Servlet容器会在ActionServlet类被加载后立即执行它的init()方法。该方法初始化Struts框架内在的消息资源、加载ActionServlet的初始化参数和URL映射信息、注册DTD文件,并将所有子应用模块初始化。当ActionServlet实例接收到HTTP请求后,在doGet()和doPost()方法中都会调用process()方法来处理请求。org.apache.Struts.util.ModuleUtils类的selectModule()
8、方法被首先调用,它选择负责处理当前请求的子应用模块,然后把与子应用模块相关的ModuleConfig和MessageResources对象存储到re-