提出,但由于缺乏相关支持,在Web开发中引入MVC却相当困难,直到基于J2EE的JSP Model 2问世时才得以改观.下面对JSP Model 1 与 JSP Model 2进行简单介绍.
图 2.2 JSP Model 1(JSP+JavaBean)的数据传递关系图
Fig 2.2 Datatransfer of JSP Modle 1(JSP+JavaBean+Servlet)
图2.3 JSP Model 2(JSP+JavaBean+Servlet) 的数据传递关系图
Fig 2.3 Datatransfer of JSP Modle 2(JSP+JavaBean+Servlet)
比较两种模式,我们不难发现JSP Model 2显然比JSP Model 1层次关系更加清楚,开发的页面也更易于维护.在这种模式中,各组件的分工关系非常明确,JSP技术用于显示,充当了视图的角色,Servlet用于执行业务逻辑,它相当于控制器的角色,JavaBean组件用于表示数据,相当于模型的角色.尽管如此,JSP Model 2仍不够好,它容易使系统出现多个Controller,并且对页面导航的处理比较复杂.Struts就是在JSP Model 2的基础上实现的一个MVC架构.它只有一个中心控制器,他采用XML定制转向的URL.采用Action来处理逻辑,是对JSP Model 2的一个极大改进[3].
2.3.3 Struts的优缺点
优点:Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,使开发者能更深入的了解其内部实现机制,这是它的一大优点. 除此之外,Struts的优点主要集中体现在两个方面:Taglib和页面导航.Taglib是Struts的标记库,灵活动用,能大大提高开发效率;而页面
导航则使系统的脉络更加清晰,通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处'尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显.
缺点:Taglib是Struts的一大优势,但对于初学者而言,却需要一个持续
学习的过程,甚至还会打乱你网页编写的习惯,但是,当你习惯了它时,你会觉得它真的很棒. Struts将MVC的Controller一分为三,在获得结构更加清晰的同时,也增加了系统的复杂度. Struts从产生到现在还不到半年,但已逐步越来越多运用于商业软件.虽然它现在还有不少缺点,但它是一种非常优秀的J2EE MVC实现方式.
2.3.4 Struts的工作流程
在WEB启动时就会中载并初始化ActionServle在
ActionServletstruts-config.
xml文件中读取配置信息,把它们存放到各种配置对象中.当ActionServlet接收到一个客户请求时,它的执行过程大致如下:
1、检索和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效.
2、如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交表单数据保存到ActionForm对象中.
3、根据配置住处决定是否需要表单验证,如果需要验证,就调用ActionForm扔validate()方法.
4、如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActionError对象,就表示表单验证成功.
5、ActionServlet根据ActionMapping实例包含的映射住处决定将请求转发给哪个Action.如果相应的Action 实例不存在,就先创建这个实例,然后调用Action的execrte()方法.
6、Action的execute()方法返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指向的JSP组件.
7、ActionForward对象指向的JSP组件生成动态网页,返回给客户[4].
下图是Struts的工作流程,所有的请求都提交给ActionServlet
图2.4 struts工作流程图
Fig 2.4 Workflow of struts
2.4 Hibernate数据库持久化技术
2.4.1 Hibernate简介
Hibernate是一个面向Java环境的对象/关系数据库映射工具.它是使用GNU