用Struts创建MVC应用的介绍【转】

Model 1 和Model 2简介html

咱们在开发Web应用时常常提到的一个概念是Model 1/Model 2,那么到底它是什么意思呢?其实它是对采用JSP技术构成Web应用的不一样模型的描述。下面对这个概念作一个简单的介绍。java

Model 1web

在使用JAVA技术创建Web应用的实例中,因为JSP技术的发展,很快这种便于掌握和可实现快速开发的技术就成了建立Web应用的主要技术。JSP页面中能够很是容易地结合业务逻辑(jsp:useBean)、服务端处理过程(jsp:scriplet)和HTML(<html>),在JSP页面中同时实现显示,业务逻辑和流程控制,从而能够快速地完成应用开发。如今不少的Web应用就是由一组JSP页面构成的。这种以JSP为中心的开发模型咱们能够称之为Model 1。apache

固然这种开发模式在进行快速和小规模的应用开发时,是有很是大的优点,可是从工程化的角度考虑,它也有一些不足之处:设计模式

  1. 应用的实现通常是基于过程的,一组JSP页面实现一个业务流程,若是要进行改动,必须在多个地方进行修改。这样很是不利于应用扩展和更新。
  2. 因为应用不是创建在模块上的, 业务逻辑和表示逻辑混合在JSP页面中没有进行抽象和分离。因此很是不利于应用系统业务的重用和改动。

考虑到这些问题在开发大型的Web应用时必须采用不一样的设计模式--这就是Model2服务器

Model 2mvc

Model 2 表示的是基于MVC模式的框架。MVC是Model-View-Controller的简写。"Model" 表明的是应用的业务逻辑(经过JavaBean,EJB组件实现), "View" 是应用的表示面(由JSP页面产生),"Controller" 是提供应用的处理过程控制(通常是一个Servlet),经过这种设计模型把应用逻辑,处理过程和显示逻辑分红不一样的组件实现。这些组件能够进行交互和重用。从而弥补了Model 1的不足。app

Model 2具备组件化的优势从而更易于实现对大规模系统的开发和管理,可是开发MVC系统比简单的JSP开发要复杂许多,它须要更多的时间学习和掌握。同时新东西的引入会带来新的问题(这让我想起来关于"自动计算"的一篇文章,中间提到为了下降系统的复杂度,却致使更高的复杂度)。框架

  1. 必须基于MVC组件的方式从新思考和设计应用结构。原来经过创建一个简单的JSP页面就能实现的应用如今变成了多个步骤的设计和实现过程。
  2. 全部的页面和组件必须在MVC框架中实现,因此必须进行附加地开发工做。

MVC自己就是一个很是复杂的系统,因此采用MVC实现Web应用时,最好选一个现成的MVC框架,在此之下进行开发,从而取得事半功倍的效果。如今有不少可供使用的MVC框架,因为Struts有完整的文档而且相对来说比较简单,因此用它开发MVC系统仍是比较方便地。jsp

回页首

Struts的结构和处理流程简介

Struts是Apache组织的一个项目,像其余的Apache组织的项目同样,它也是开放源码项目。Struts是一个比较好的MVC框架提供了对开发MVC系统的底层支持,它采用的主要技术是Servlet,JSP和custom tag library。获取它的使用版本和具体信息能够查阅 http://jakarta.apache.org网站。

Struts框架的基本构成由下图所示:


图 1 struts uml图
图 1 struts uml图

做为一个MVC的框架,Struts对Model、View和Controller都提供了对应的实现组件,对应上面的UML图,分别进行介绍,而且看看它们是如何结合在一块儿的。

  1. Controller:控制器的做用是从客户端接受请求,而且选择执行相应的业务逻辑,而后把响应结果送回到客户端。在Struts中Controller功能由图中ActionServlet和ActionMapping对象构成:核心是一个Servlet类型的对象ActionServlet,它用来接受客户端的请求。ActionServlet包括一组基于配置的ActionMapping对象,每一个ActionMapping对象实现了一个请求到一个具体的Model部分中Action处理器对象之间的映射。
  2. Model: MVC系统中的Model部分从概念上能够分为两类--系统的内部状态,和改变系统状态的动做。Struts为Model部分提供了Action和ActionForm对象:全部的Action处理器对象都是开发者从Struts的Action类派生的子类。Action处理器对象封装了具体的处理逻辑,调用业务逻辑模块,而且把响应提交到合适的View组件以产生响应。Struts提供的ActionForm组件对象,它能够经过定义属性描述客户端表单数据。开发者能够从它派生子类对象,利用它和Struts提供的自定义标记库结合能够实现对客户端的表单数据的良好封装和支持,Action处理器对象能够直接对它进行读写,而再也不须要和request、response对象进行数据交互。经过ActionForm组件对象实现了对View和Model之间交互的支持。Struts一般建议使用一组JavaBean表示系统的内部状态,根据系统的复杂度也可使用像Entity EJB 和 Session EJB等组件来实现系统状态。Struts建议在实现时把"作什么"(Action)和"如何作"(业务逻辑)分离。这样能够实现业务逻辑的重用。
  3. View:Struts应用中的View部分是经过JSP技术实现的。Struts提供了自定义的标记库可使用,经过这些自定义标记能够很是好地和系统的Model部分交互,经过使用这些自定义标记建立的JSP表单,能够实现和Model部分中的ActionForm的映射,完成对用户数据的封装,同时这些自定义标记还提供了像模板定制等多种显示功能。

Struts框架的处理流程清楚的体现了MVC系统的特色,简单的Struts组件结构如图2所示。Struts Controller ActionServlet处理客户请求,利用配置的ActionMapping对象把请求映射到Action处理器对象进行处理。Action处理对象访问ActionForm中的数据,处理和响应客户请求,它还调用后台的Bean组件,这些组件封装了具体的业务逻辑。Action处理器对象根据处理结果通知Controller,Controller进行下一步的处理。


图2 Struts框架的组件结构图
图2 Struts框架的组件结构图

回页首

利用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>
    	<servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    	<init-param>
    		<param-name>application</param-name>
    	??????
    </servlet>

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

    <servlet-mapping>
    	<servlet-name>action</servlet-name>
    	<url-pattern>*.do</url-pattern>
    </servelt-mapping>

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

    <taglib>
    	<taglib-url>/WEB-INF/struts-bean.tld</taglib-url>
    	<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
    </taglib>
    ???????

    说明:添加对Struts提供的应用所使用的自定义标记库的引用。

    struts-config.xml文件的配置:

    struts-config.xml是用于创建Controller和Model之间的关系的。它描述了Controller所使用的把请求对应到具体处理的法则,同时它还描述了客户提供的数据与ActionForm组件的对应映射关系。

    在struts-config.xml中增长以下标记

    <form-beans>
    	<form-bean name="loginForm" type="loginForm" />
    </form-beans>

    说明:<form-bean>标记描述一个具体的ActionForm子类对象,经过它和JSP页面中的自定标记的结合使用能够实现ActionForm和View之间的数据映射。

    <action-mappings>
    <action
    path="/login"
    type="loginAction"
    name="loginForm"
    input="/login.jsp" ??? />
    </action-mappings>

    说明:<action-mappings>标记描述了请求和处理的一对一映射关系。input和path属性惟一的标记了客户端的一个请求,name属性描述封装客户端的数据的ActionForm子类对象。Type属性描述处理这个请求的Action子类对象。

    经过对两个配置文件的配置,把Struts框架中MVC的各个部分联系起来,实现一个真正的MVC系统。

回页首

可供参考的例子

编写一个好的例子演示是比较占篇幅的,能够从 http://jakarta.apache.org/下载Struts最新的发表包,在这个包中有详细的用户帮助和API文档,还有很是好的演示程序可供参考。具体的安装步骤能够参考附带的文档。参考这些例子能够很快地理解如何利用struts框架开发MVC系统

相关文章
相关标签/搜索