一、Model 1 和Model 2简介
我们在开发Web应用时经常提到的一个概念是Model 1/Model 2,那么到底它是什么意思呢?其实它是对采用JSP技术构成Web应用的不同模型的描述。下面对这个概念做一个简单的介绍。
Model 1
在使用JAVA技术建立Web应用的实例中,由于JSP技术的发展,很快这种便于掌握和可实现快速开发的技术就成了创建Web应用的主要技术。JSP页面中可以非常容易地结合业务逻辑(jsp:useBean)、服务端处理过程(jsp:scriplet)和HTML(),在JSP页面中同时实现显示,业务逻辑和流程控制,从而可以快速地完成应用开发。现在很多的Web应用就是由一组JSP页面构成的。这种以JSP为中心的开发模型我们可以称之为Model 1。
当然这种开发模式在进行快速和小规模的应用开发时,是有非常大的优势,但是从工程化的角度考虑,它也有一些不足之处:
1. 应用的实现一般是基于过程的,一组JSP页面实现一个业务流程,如果要进行改动,必须在多个地方进行修改。这样非常不利于应用扩展和更新。
2. 由于应用不是建立在模块上的, 业务逻辑和表示逻辑混合在JSP页面中没有进行抽象和分离。所以非常不利于应用系统业务的重用和改动。
考虑到这些问题在开发大型的Web应用时必须采用不同的设计模式——这就是Model2
Model 2
Model 2 表示的是基于MVC模式的框架。MVC是Model-View-Controller的简写。“Model”代表的是应用的业务逻辑(通过JavaBean,EJB组件实现),“View”是应用的表示面(由JSP页面产生),“Controller”是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。从而弥补了Model 1的不足。
Model 2具有组件化的优点从而更易于实现对大规模系统的开发和管理,但是开发MVC系统比简单的JSP开发要复杂许多,它需要更多的时间学习和掌握。同时新东西的引入会带来新的问题。
1. 必须基于MVC组件的方式重新思考和设计应用结构。原来通过建立一个简单的JSP页面就能实现的应用现在变成了多个步骤的设计和实现过程。
2. 所有的页面和组件必须在MVC框架中实现,所以必须进行附加地开发工作。MVC本身就是一个非常复杂的系统,所以采用MVC实现Web应用时,最好选一个现成的MVC框架,在此之下进行开发,从而取得事半功倍的效果。现在有很多可供使用的MVC框架,由于Struts有完整的文档并且相对来讲比较简单,所以用它开发MVC系统还是比较方便地。
二、Struts的结构和处理流程简介
Struts是Apache组织的一个项目,像其他的Apache组织的项目一样,它也是开放源码项目。Struts是一个比较好的MVC框架提供了对开发MVC系统的底层支持,它采用的主要技术是Servlet,JSP和custom tag library。获取它的使用版本和具体信息可以查阅http://jakarta.apache.org/网站。
3、利用Struts框架开发MVC系统要做的工作
由于Struts已经为我们提供了一个非常好的MVC框架,我们利用Struts开发MVC系统时可以大大加快开发的速度。在开发时可以采用的一个开发流程如下(引自资料3):
1. 收集和定义应用需求。
2. 基于数据采集和显示的原则定义和开发“屏幕显示”需求 。
3. 为每一个“屏幕显示”定义访问路径。
4. 定义ActionMappings建立到应用业务逻辑之间的联系。
5. 开发满足“屏幕显示”需求的所有支持对象。
6. 基于每一个“屏幕显示”需求提供的数据属性来创建对应的ActionForm对象。
7. 开发被ActionMapping调用的Action对象。
8. 开发应用业务逻辑对象 (Bean,EJB,等等)。
9. 对应ActionMapping设计的流程创建JSP页面。
10. 建立合适的配置文件struts-config.xml , web.xml。
11. 开发/测试/部署。
具体在使用Struts框架时,对应各个部分的开发工作主要包括:
1. Model部分:采用JavaBean和EJB组件,设计和实现系统的业务逻辑。根据不同的请求从Action派生具体Action处理对象。完成"做什么"的任务来调用由Bean构成的业务组件。创建由ActionForm 的派生类实现对客户端表单数据的封装。
2. Controller部分:Struts为我们提供了核心控制部分的实现。我们只需要配置ActionMapping对象。
3. View部分:为了使用Model中的ActionForm 对象,我们必须用Struts提供的自定义标记创建HTML 表单。利用Struts提供的自定义标记库编写用户界面把应用逻辑和显示逻辑分离。Struts框架通过这些自定义标记建立了View和Model之间的联系。Struts的自定义标记还提供了很多定制页面的功能。
4. 同时需要编辑两个配置文件:web.xml和struts-config.xml。通过它们配置Struts系统中的各个模块之间的交互。下面对这两个配置文件做一些介绍:
web.xml文件的配置:
web应用中的web.xml是第一个要配置的地方,它描述了系统的Controller对象。在web.xml中增加如下标记:

说明:这个servlet对象就是Struts提供的Controller,还可以为它指定初始化参数,比如对系统应用属性的支持。

说明:实现客户请求的url信息和服务器端具体处理的映射关系。

说明:添加对Struts提供的应用所使用的自定义标记库的引用。
struts-config.xml文件的配置:
struts-config.xml是用于建立Controller和Model之间的关系的。它描述了Controller所使用的把请求对应到具体处理的法则,同时它还描述了客户提供的数据与ActionForm组件的对应映射关系。
在struts-config.xml中增加如下标记

说明:标记描述一个具体的ActionForm子类对象,通过它和JSP页面中的自定标记的结合使用可以实现ActionForm和View之间的数据映射。

说明:标记描述了请求和处理的一对一映射关系。input和path属性唯一的标记了客户端的一个请求,name属性描述封装客户端的数据的ActionForm子类对象。Type属性描述处理这个请求的Action子类对象。
通过对两个配置文件的配置,把Struts框架中MVC的各个部分联系起来,实现一个真正的MVC系统。
4.可供参考的例子
编写一个好的例子演示是比较占篇幅的,可以从http://jakarta.apache.org/ 下载Struts最新的发表包,在这个包中有详细的用户帮助和API文档,还有非常好的演示程序可供参考。具体的安装步骤可以参考附带的文档。参考这些例子可以很快地理解如何利用struts框架开发MVC系统。