MVC模式在Java Web应用程序中的实现
一、前言
MVC 作为一种框架模式已经有很久的历史了,这么多年来经受住了工程实践的考验,获得了巨大的成功,今天我们来重新回顾一下MVC 框架模式,并以 java web 应用程序为例来具体说明一下 MVC 的实现过程。
二、MVC简介
MVC原本存在于桌面程序中的,M是指数据模型,V是指用户界面,C则是控制器。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据你可以用柱状图来表示,也可以用扇形图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。MVC是一个框架设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。下面我们来具体对这三个核心部件进行具体的说明。
视图是用户看到并与之交互的界面。对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,比如xml和JSP等。MVC一个大的好处是它能为你的应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。
模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后用确定用哪个视图来显示模型处理返回的数据。
由此我们可以看MVC的处理过程,首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户。
三、Java Web应用程序的主要组件
1.Servlet组件
Servlet运行于Web容器当中,比如Tomcat,它可以被Web容器动态加载,接收浏览器请求,调用其他组件处理请求,然后把处理结果返回。
当浏览器访问某个Servlet时,Web容器将会创建一个Servlet Request对象和Servlet Response对象,并且把用户的请求信息封装在Servlet Request对象中。然后把这两个对象作为参数传输给Servlet的特定方法中。在该方法中处理请求,把处理结果封装在Servlet Response对象中,返回给Web容器。最后Web容器把结果返回到浏览器去解析、显示。
2.JSP组件
JSP是一种动态网页技术。它把HTML页面中加入Java脚本,以及JSP标签构成了JSP文件。当浏览器请求某个JSP页面时,Tomcat会把JSP页面翻译为Java文件。然后将它编译为class文件,接着执行它,并且把生成的HTML页面返回到客户端显示。
3.JavaBean组件
JavaBean组件是一种符合特定规范的Java对象。在JavaBean组件中定义一系列的属性,并且每个属性都提供setter和getter方法,这样就可以使用该组件存储一些中间数据。例如Servlet Request的请求信息、从数据库中查询出来的信息等。
4.EJB组件
Enterprise Java Bean(EJB)组件是服务器端的Java组件。该组件基于标准分布式对象技术、CORBA和RMI等技术,用于实现企业级应用的业务逻辑。设计目标与核心应用是部署分布式应用程序。简单来说就是把已经编写好的程序(即:类)打包放在服务器上执行。
5.XML语言
XML(Extensible Markup Language)是一种用来创建自定义标记的标记语言。
6.Web服务器和应用服务器
Web服务器用来处理HTTP请求,并返回HTTP数据。它主要用来和浏览器进行交互,给用户提供服务。应用服务器可以被Web服务器调用,进行业务逻辑的处理。它返回的数据被Web服务器组织为HTML格式,然后返回到浏览器去解析。
四、Java Web解决方案(开发方法)
1.JSP+JAVABEAN开发模式:
该模式将业务逻辑与页面表现进行分离,在一定程度上增加了程序的可调试性和维护性。但是页面将控制与显示集于一身。虽然简单,但是知识适合小型项目的快速构建与运行。
2.JSP+Servlet+JavaBean开发模式:
JSP作为视图,来表现页面;Servlet作为控制器,控制程序的流程并调用业务进行处理;JavaBean封装了业务逻辑。遵循了MVC设计模式。实现了MVC ,但是没有统一的开发框架导致开发周期长。
3.Struts+Spring+Hibernate
Struts负责表示层, Spring负责逻辑层的业务,Hibernate持久层中数据库的操作,是一套成熟稳定的开发方案。
五、常用的Java Web的MVC框架
Struts1.X
是一个较为早期的MVC框架实现,它的历史最早可以追溯到2000年,作为Apache开源组织的一个重要项目,取名为“Struts”,有“基础构建”的含义。在那个程序框架尚处于朦胧阶段的年代,“基础构建”无疑是每个程序员梦寐以求的东西。
Webwork2 / Struts2
Struts项目将与Webwork2项目合并,并联合推出Struts2 .Webwork2和Struts2是一脉相承的Web层解决方案。优势突出表现为对Controller的彻底改造以及请求映射的配置。
Spring MVC
相比较Webwork2 / Struts2,Spring MVC走了一条比较温和的改良路线。因为Spring MVC 自始至终都没有突破传统Servlet编程模型的限制,而是在这过程中不断改良,不断重构,反而在发展中开拓了一条崭新的道路。 它有两个特点,是使用参数-返回值实现模式来打造Controller 以及引入Annotation来完成请求-响应的映射关系