.Model 和Model 简介
我们在开发Web应用时经常提到的一个概念是Model /Model 那么到底它是什么意思呢?其实它是对采用JSP技术构成Web应用的不同模型的描述下面对这个概念做一个简单的介绍
Model
在使用JAVA技术建立Web应用的实例中由于JSP技术的发展很快这种便于掌握和可实现快速开发的技术就成了创建Web应用的主要技术JSP页面中可以非常容易地结合业务逻辑(jsp:useBean)服务端处理过程(jsp:scriplet)和HTML()在JSP页面中同时实现显示业务逻辑和流程控制从而可以快速地完成应用开发现在很多的Web应用就是由一组JSP页面构成的这种以JSP为中心的开发模型我们可以称之为Model
当然这种开发模式在进行快速和小规模的应用开发时是有非常大的优势但是从工程化的角度考虑它也有一些不足之处
应用的实现一般是基于过程的一组JSP页面实现一个业务流程如果要进行改动必须在多个地方进行修改这样非常不利于应用扩展和更新
由于应用不是建立在模块上的 业务逻辑和表示逻辑混合在JSP页面中没有进行抽象和分离所以非常不利于应用系统业务的重用和改动
考虑到这些问题在开发大型的Web应用时必须采用不同的设计模式――这就是Model
Model
Model 表示的是基于MVC模式的框架MVC是Model-View-Controller的简写Model 代表的是应用的业务逻辑(通过JavaBeanEJB组件实现) View 是应用的表示面(由JSP页面产生)Controller 是提供应用的处理过程控制(一般是一个Servlet)通过这种设计模型把应用逻辑处理过程和显示逻辑分成不同的组件实现这些组件可以进行交互和重用从而弥补了Model 的不足
Model 具有组件化的优点从而更易于实现对大规模系统的开发和管理但是开发MVC系统比简单的JSP开发要复杂许多它需要更多的时间学习和掌握同时新东西的引入会带来新的问题(这让我想起来关于自动计算的一篇文章中间提到为了降低系统的复杂度却导致更高的复杂度)
必须基于MVC组件的方式重新思考和设计应用结构原来通过建立一个简单的JSP页面就能实现的应用现在变成了多个步骤的设计和实现过程
所有的页面和组件必须在MVC框架中实现所以必须进行附加地开发工作
MVC本身就是一个非常复杂的系统所以采用MVC实现Web应用时最好选一个现成的MVC框架在此之下进行开发从而取得事半功倍的效果现在有很多可供使用的MVC框架由于Struts有完整的文档并且相对来讲比较简单所以用它开发MVC系统还是比较方便地
.Struts的结构和处理流程简介
Struts是Apache组织的一个项目像其他的Apache组织的项目一样它也是开放源码项目Struts是一个比较好的MVC框架提供了对开发MVC系统的底层支持它采用的主要技术是ServletJSP和custom tag library获取它的使用版本和具体信息可以查阅网站
Struts框架的基本构成由下图所示
图 struts uml图作为一个MVC的框架Struts对ModelView和Controller都提供了对应的实现组件对应上面的UML图分别进行介绍并且看看它们是如何结合在一起的
Controller控制器的作用是从客户端接受请求并且选择执行相应的业务逻辑然后把响应结果送回到客户端在Struts中Controller功能由图中ActionServlet和ActionMapping对象构成核心是一个Servlet类型的对象ActionServlet它用来接受客户端的请求ActionServlet包括一组基于配置的ActionMapping对象每个ActionMapping对象实现了一个请求到一个具体的Model部分中Action处理器对象之间的映射
Model MVC系统中的Model部分从概念上可以分为两类――系统的内部状态和改变系统状态的动作Struts为Model部分提供了Action和ActionForm对象所有的Action处理器对象都是开发者从Struts的Action类派生的子类Action处理器对象封装了具体的处理逻辑调用业务逻辑模块并且把响应提交到合适的View组件以产生响应Struts提供的ActionForm组件对象它可以通过定义属性描述客户端表单数据开发者可以从它派生子类对象利用它和Struts提供的自定义标记库结合可以实现对客户端的表单数据的良好封装和支持Action处理器对象可以直接对它进行读写而不再需要和requestresponse对象进行数据交互通过ActionForm组件对象实现了对View和Model之间交互的支持Struts通常建议使用一组JavaBean表示系统的内部状态根据系统的复杂度也可以使用像Entity EJB 和 Session EJB等组件来实现系统状态Struts建议在实现时把做什么(Action)和如何做(业务逻辑)分离这样可以实现业务逻辑的重用
ViewStruts应用中的View部分是通过JSP技术实现的Struts提供了自定义的标记库可以使用通过这些自定义标记可以非常好地和系统的Model部分交互通过使用这些自定义标记创建的JSP表单可以实现和Model部分中的ActionForm的映射完成对用户数据的封装同时这些自定义标记还提供了像模板定制等多种显示功能
Struts框架的处理流程清楚的体现了MVC系统的特点简单的Struts组件结构如图所示Struts Controller ActionServlet处理客户请求利用配置的ActionMapping对象把请求映射到Action处理器对象进行处理Action处理对象访问ActionForm中的数据处理和响应客户请求它还调用后台的Bean组件这些组件封装了具体的业务逻辑Action处理器对象根据处理结果通知ControllerController进行下一步的处理
图 Struts框架的组件结构图.利用Struts框架开发MVC系统要做的工作
由于Struts已经为我们提供了一个非常好的MVC框架我们利用Struts开发MVC系统时可以大大加快开发的速度在开发时可以采用的一个开发流程如下(引自资料)
收集和定义应用需求
基于数据采集和显示的原则定义和开发屏幕显示需求
为每一个屏幕显示定义访问路径
定义ActionMappings建立到应用业务逻辑之间的联系
开发满足屏幕显示需求的所有支持对象
基于每一个屏幕显示需求提供的数据属性来创建对应的ActionForm对象
开发被ActionMapping调用的Action对象
开发应用业务逻辑对象 (BeanEJB等等)
对应ActionMapping设计的流程创建JSP页面
建立合适的配置文件strutsconfigxml webxml
开发/测试/部署
具体在使用Struts框架时对应各个部分的开发工作主要包括
Model部分采用JavaBean和EJB组件设计和实现系统的业务逻辑根据不同的请求从Action派生具体Action处理对象完成做什么的任务来调用由Bean构成的业务组件创建由ActionForm 的派生类实现对客户端表单数据的封装
Controller部分Struts为我们提供了核心控制部分的实现我们只需要配置ActionMapping对象
View部分为了使用Model中的ActionForm 对象我们必须用Struts提供的自定义标记创建HTML 表单利用Struts提供的自定义标记库编写用户界面把应用逻辑和显示逻辑分离Struts框架通过这些自定义标记建立了View和Model之间的联系Struts的自定义标记还提供了很多定制页面的功能
同时需要编辑两个配置文件webxml和strutsconfigxml通过它们配置Struts系统中的各个模块之间的交互下面对这两个配置文件做一些介绍
webxml文件的配置
web应用中的webxml是第一个要配置的地方它描述了系统的Controller对象在webxml中增加如下标记
action
orgapachestrutsactionActionServlet
application
······
说明这个servlet对象就是Struts提供的Controller还可以为它指定初始化参数比如对系统应用属性的支持
action
*do
说明实现客户请求的url信息和服务器端具体处理的映射关系
/WEBINF/strutsbeantld
/WEBINF/strutsbeantld
·······
说明添加对Struts提供的应用所使用的自定义标记库的引用
strutsconfigxml文件的配置
strutsconfigxml是用于建立Controller和Model之间的关系的它描述了Controller所使用的把请求对应到具体处理的法则同时它还描述了客户提供的数据与ActionForm组件的对应映射关系
在strutsconfigxml中增加如下标记
说明标记描述一个具体的ActionForm子类对象通过它和J