J2EE学习笔记--MVC框架

MVC是一种软件设计模式,最初是为SMALLTALK-80语言提出来的,但后来在JSP开发中渐渐得到广泛应用,并且成为Sun公司推荐的J2EE平台的设计模式。Sun公司提出的Model2开发模型就是基于MVC设计模式的应用,在Web应用程序开发中,MVC框架应用非常广泛,特别适合应用在大型的、比较复杂的项目开发中。

 

MVC框架即是模型-视图-控制器(Model-View-Controller)设计模式。其中,M代表Model,V代表View,C代表Controller。MVC的核心思想是将来一个应用程序的数据业务处理功能(模型)、表示功能(视图)和控制功能(控制层)在3个不同的部分上分别实现。MVC的目的是增加代码的复用性,减少数据描述和应用操作的可耦合度,并提高代码的可读性。同时,也可以使软件的可维护性、可扩展性、可修复性、灵活性以及封装性大大提高。

 

模型:模型是应用程序的业务处理层,负责所有业务流程的处理和业务规则的制定。模型处理由控制器转发来的视图的请求数据,并将最终的处理结果返回给视图。

视图:视图是应用程序的表示层,代表用户交互界面。在Web应用中,交互界面可能是HTML界面,也有可能是XML界面、Applet界面或其他界面。一个应用甚至可以对应多个视图。MVC对视图的操作包括对视图上数据的采集和处理,以及对用户的请求处理,但并不负责对视图上的业务流程的处理。

控制器:控制器的作用实际上就是一个分发器。负责决定将请求数据转发给什么样的模型组件,以及决定选择什么样的视图来显示模型返回的数据。同视图一样,控制器本身也不处理任何业务信息。

 

基于MVC的应用程序对某个用户请求时的处理过程如下:

1.       终端用户通过该应用程序发出了一个请求,该请求被转发给Controller(控制器)。

2.       控制器收到该请求后,会检查该请求,然后决定使用什么业务逻辑来处理该请求,这时控制器会将该请求转发给一个相应的业务组件去处理。

3.       模型中包含处理该用户请求的所有业务组件,并且也执行用户所需要的全部数据存取。代表终端用户查询检索出的任何数据都被打包返回给控制器。

4.       控制器接收从模型返回的数据,并选择显示这些数据的相应的视图,并将视图返回给用户。

 

MVC的优点:

1.  有利于程序的维护和功能的扩展。在MVC框架中,3个层在功能和结构上是相互独立的,每个层负责实现各自的功能。如果某个层的需求发生了变化,则只需要更改相应层中的代码即可,而不会影响到其他层中的代码。

2.  有利于开发中的分工。在MVC框架中,由于把应用程序划分成了3个层,可以很好地实现开发中的分工。网页制作人员可以开发视图层,熟悉业务的人员可以去开发业务层,其他的人员可以开发控制层。

3.  有利于组件的重用。MVC框架的分层开发模式,有利于组件的重用。如控制层可以成为一个独立的组件,表示层可以做成一个通用的界面,而业务处理层也可以成为一个独立的功能模块,从而可以把这些组件应用到其他的项目开发中。

 

MVC的缺点:

1.  与设计模式的缺点相同,增加了工程解决方案的复杂性,在提高中大型项目开发效率的同时降低了小项目的开发效率,处理流程复杂造成了性能的下降。

2.  没有解决如何提供Rich Client的问题,仍然需要大量的开发。提供Rich Client无法避开JavaScript,传统的MVC框架几乎从来没有把JavaScript列入考虑范围。简单地忽视JavaScript对于提高页面的表现能力没有任何帮助,复杂的JavaScript的开发工作还是由程序员来承担。

3.  MVC中View的开发仍然采用基于form的请求/响应模式,因此仍然具有这一模式的所有缺点。MVC不可能解决表示层的所有问题,只解决了表示层一部分重要问题。MVC除了对开发人员有意义外,并没有给最终用户带来很多商业价值,最终用户关心的是软件的外在质量,而不是程序员所关心的内在质量。

 

MVC还是一个非常优秀的软件设计模式,不然Sun也不会把它推荐为J2EE的设计模式,而且还风靡了那么多年。任何设计模式都有其固有的局限性,没有哪一种方法可以解决所有问题的。所以说,MVC本身没有缺点,只是不同的理解和不同的实现带了的不同的问题。作为开发者的我们,就是要不断的追求完美来弥补实现带来的缺点。IBM/360 之父布鲁克斯(Frederick Phillips Brooks, Jr.)说过:“我认为学习编程的最困难部分,是将做事的方式往追求完美的方向调整。”Java Web有很多基于MVC框架,比如人人知晓的Struts,后劲猛起的Spring MVC,还有WebWork、Turbine、Maverick框架。

 

 

时间: 2024-10-29 21:54:47

J2EE学习笔记--MVC框架的相关文章

扬扬的J2EE学习笔记(四)Platform Services平台服务

j2ee|services|笔记 每周学一些J2EE,作点笔记. 目标:能熟练使用Websphere做J2EE的开发工作. 加油!加油!!加油!!! 1. 平台服务概述    1) 为应用编程的部署提供服务.   2) 命名服务:能够帮助应用客户端寻找企业Beans:寻找通过Java Naming Directory Interface(JNDI)访问naming环境的WEB组件.   3) 无须更改源代码就能定制组件   4) 使用JNDI接口,J2EE组件可以定位自己的环境名称内容(envi

J2EE学习笔记--Struts中文问题

       JSP的中文乱码问题,其根源在于:Web容器默认的字符处理编码是iso-8859-1,对于需要在浏览器页面上显示中文的JSP程序,但在程序中并没有指定中文的字符集,那么中文将在浏览器页面上显示为乱码.当然,前面所说的是指在Tomcat服务器下的,其他服务器有些不是这样的,比如BEA Weblogic和IBM Websphere是从操作系统中取得默认的编码,然后按该编码来转码所有用户请求.以前我也写过一遍JSP的学习笔记,关于本地化和国际化的,那里有详细解释在Tomcat服务器下中文

J2EE学习笔记(4) 软件工程与系统框架

J道的老大banq曾经说过设计模式是衡量一个程序员水平高低最重要的标准.个人非常赞同这个观点,从这个角度看学好J2EE第一个要了解的就是作为一个庞大复杂的系统,它是如何由各个模块拼装并协同有效地运作.先来几个定义暖暖身 Definitions of Different Dimensions in J2EE Tiers: A logical or physical organization of components into an ordered chain of service provide

扬扬的J2EE学习笔记(一)概述

j2ee|笔记 扬扬今天开始学习J2EE啦! 目标:尽可能在最短时间内,把J2EE体系结构相关了解个大概,以后再慢慢往深处学习. 加油!加油!!加油!!!一.分布式的多层应用程序 图1 分布式的多层应用程序 J2EE平台使用多层分布式的应用模式.应用逻辑根据其功能分成多个组件,各种不同的应用组件构成分布在不同的依赖于层的机器上的J2EE程序.位于不同层的组件有: ☆ 运行在客户机上的客户层组件 ☆ 运行在J2EE服务器上的网络层 ☆ 运行在J2EE服务器上的逻辑层 ☆ 运行在

扬扬的J2EE学习笔记(三)Components and Roles组件和角色

j2ee|笔记 每周学一些J2EE,作点笔记. 目标:能熟练使用Websphere做J2EE的开发工作. 加油!加油!!加油!!!  1. 架构    1) 组件:一个应用级的软件单元      J2SE拥有JavaBeans:J2EE拥有EJB(Enterprise JavaBeans)   2) 系统级实体容器      提供:运行支持.生命周期管理.安全.部署.线程   3) applet和客户应用程序      客户端组件执行自己的Java虚拟机(JVM)   4) WEB组件:    

扬扬的J2EE学习笔记(五)Installing J2EE SDK(安装J2EE SDK)

j2ee|笔记 每周学一些J2EE,作点笔记. 目标:能熟练使用Websphere做J2EE的开发工作. 加油!加油!!加油!!! 以在Linux下安装为例. 1 准备安装J2SE普通用户身份:./j2sdk-1_3_1_01-linux-i386-rpm.bin运行安装程序,最后生成jdk-1.3.1_01.i386.rpm文件2 安装J2SE SDK1) su root身份:rpm -iv jdk-1.3.1_01.i386.rpm得到jdk-1.3.1_01-fcs2) cd /usr发现

扬扬的J2EE学习笔记(二)J2EE的客户端/服务器

j2ee|笔记|服务器|客户端 每周学一些J2EE,作点笔记. 目标:能熟练使用Websphere做J2EE的开发工作. 加油!加油!!加油!!! 图3 J2EE场景 图三里须注意的是: 1.Tier integration is the center of the J2EE programming model. 2.用户使用Browser方式访问:      1) Browser:使用HTML,HTTP,XML.可能经过防火墙      2) Web container:使用JSP,Serve

J2EE学习笔记(7) Paginator 分页杂谈

j2ee|笔记|分页 Paginator 分页杂谈 iBatis提供了这样的分页查询方法List list=sqlMap.executeQueryForList("SQL_Alias",HashMapObj,skipResults,maxResults);但它底层的实现是把结果完全存在内存里,在resultset可能很大的情况下,非常浪费内存,建议不要使用,SqlMapConfig.xml以下设置就可以关掉此项缓存<settings    lazyLoadingEnabled=&

J2EE学习笔记(8) 真是知易行难 初试Struts

j2ee|笔记 实在是好事多磨,折腾了两个晚上才搞定了一个 HelloWorld Struts版,下面谈谈一点体会. 开发环境 Eclipse + MyEclipse (Struts 1.1) Struts 1.1支持多模块开发,在myEclipse的Web Application Project里先建立新module (New->Struts 1.1 Module),再依次加Form Action ActionForward (New -> Struts 1.1 Action, Form &