MVC模式在Java web 应用程序的实现

时间:2023-01-11 17:44:37

一、MVC简介

  MVC(Model-View-Controller)模型-视图-控制器,最早由Trygve Reenskaug在1978年提出,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件架构。MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。软件系统通过对自身基本部分分离的同时也赋予了各个基本部分应有的功能。

  • Model: 用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。模型有对数据直接访问的权力,例如对数据库的访问。模型不依赖视图和控制器,也就是说, M模型不关心它会被如何显示或是如何被操作。但是模型中数据的变化一般会通过一种刷新机制被公布。为了实现这种机制,那些用于监视此模型的视图必须事先在此模型上注册,从而,视图可以了解在数据模型上发生的改变。
  • View:能够实现数据有目的的显示。在视图中一般没有程序上的逻辑。为了实现视图上的刷新功能,视图需要访问它监视的数据模型,因此应该事先在被它监视的数据那里注册。
  • Controller:起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据模型上的改变

  在Smalltalk-80中的应用程序编程中:如何使用模型 - 视图 - 控制器(MVC) [Burbeck92],史蒂夫·伯贝克( Steve Burbeck)描述了MVC的两个变体:一个被动模型和一个主动模型。

  • 被动模型:当一个控制器专门操纵模型时,采用被动模型。控制器修改模型,然后通知视图模型已更改并应更新。这种情况下的模型完全独立于视图和控制器,这意味着模型无法报告其状态的变化。HTTP协议就是这个例子。在浏览器中没有简单的方法从服务器获取异步更新。浏览器显示视图并响应用户输入,但不检测服务器上数据的更改。只有当用户显式请求刷新时,服务器被询问才能进行更改。

  MVC模式在Java web 应用程序的实现

  • 主动模型:当模型在没有控制器参与的情况下改变状态时,使用主动模型。当其他来源更改数据并且更改必须反映在视图中时,可能会发生这种情况。考虑股票代码显示。您可以从外部来源收到股票数据,并希望在股票数据发生变化时更新视图(例如,股票行情和警报窗口)。因为只有模型检测到它们发生时内部状态的变化,所以模型必须通知视图来刷新显示。

  MVC模式在Java web 应用程序的实现

二、Java web 应用程序的常用组件

  1.Serverlet

    Servlet运行于Web容器中,如Tomcat,它可以被Web容器动态加载,接收浏览器请求,调用其他组件处理请求,然后把处理结果返回。当浏览器访问某个Servlet时,        Web容器将会创建一个ServletRequest对象和ServletResponse对象,并且把用户的请求信息封装在ServletRequest对象中。然后把这两个对象作为参数传输给Servlet的         特定方法中。在该方法中处理请求,把处理结果封装在ServletResponse对象中,返回给Web容器。最后Web容器把结果返回到浏览器去解析、显示。

  2.Jsp

    JSP是一种动态网页技术。它把HTML页面中加入Java脚本,以及JSP标签构成JSP文件。当浏览器请求某个JSP页面时,Tomcat会把JSP页面翻译为Java文件。然后将它         编译为class文件,接着执行它,把生成的HTML页面返回到客户端显示。

  3.JavaBean

    JavaBeans是Java中一种特殊的类,可以将多个对象封装到一个对象(bean)中。 特点是可序列化,提供无参构造器,提供getter方法和setter方法访问对象的属性。

  4.EJB

    企业级JavaBean(Enterprise JavaBean, EJB)是一个用来构筑企业级应用的服务器端可被管理组件。Java企业版API(Java Enterprise Edition)中提供了对EJB的   规范。EJB是一个封装有某个应用程序之业务逻辑服务器端组件。

  5.Web服务器和应用服务器

    Web服务器用来处理HTTP请求,并返回HTTP数据。它主要用来和浏览器进行交互,给用户提供服务。应用服务器可以被Web服务器调用,进行业务逻辑的处理。它返回      的数据被Web服务器组织为HTML格式,然后返回到浏览器去解析。

三、java web 的解决方案(开发方法)

  1.JSP+JavaBean:该模式将业务逻辑与页面表现进行分离,在一定程度上增加了程序的可调试性和维护性。简单,适合小型项目的快速构建与运行。

  2.JSP+javaBean+Serverlet:JSP作为视图,来表现页面;Servlet作为控制器,控制程序的流程并调用业务进行处理;JavaBean封装了业务逻辑。遵循了MVC设计模式。

  3.JSP+Struts:成熟的MVC开发框架。

  4.Spring:建立在核心模块之上,嫩够适应于多种多视图、模板技术、国际化和验证服务,实现控制逻辑和业务逻辑清晰的分离。                                                          

  5.JSP+Struts+Hibernate:利用Struts的MVC设计模式,与Hibernate持久化对象组成的开发方案。

  6.JSP+Struts+Spring+Hibernate:Struts负责表示层,Spring负责逻辑层的业务, Hibernate持久层中数据库的操作,组成的开发方案。

四、常用的java web的MVC框架

  1.Struts2:Struts 是Apache软件基金会(ASF)赞助的一个开源项目。它最初是Jakarta项目中的一个子项目,并在2004年3月成为ASF的*项目。它通过采用JavaServlet/JSP技术,实现了基于Java EEWeb应用的MVC设计模式的应用框架,是MVC经典设计模式中的一个经典产品.

  2.Spring MVC:Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1,Struts2等.

  3.Grails:Grails是一套用于快速Web应用开发的开源框架,它基于Groovy编程语言,并构建于Spring、Hibernate等开源框架之上,是一个高生产力一站式框架。

  4.JSF:JavaServer Faces (JSF) 是一种用于构建Java Web 应用程序的标准框架(是Java Community Process 规定的JSR-127标准)。它提供了一种以组件为中心的用户界面(UI)构建方法,从而简化了Java服务器端应用程序的开发。由于由Java Community Process (JCP) 推动,属于Java EE 5中的技术规范,而受到了厂商的广泛支持。

  5.Tapestry:Tapestry并不是一种单纯的MVC框架,它更像MVC框架和模板技术的结合,它不仅包含了前端的MVC框架,还包含了一种视图层的模板技术,使用Tapestry完全可以与Servlet/JSP API分离,是一种非常优秀的设计。 通过使用Tapestry,开发者完全不需要使用JSP技术,用户只需要使用Tapestry提供的模板技术即可,Tapestry实现了视图逻辑和业务逻辑的彻底分离。