没有合适的资源?快使用搜索试试~ 我知道了~
J2EE体系架构分析(珍藏版)
4星 · 超过85%的资源 需积分: 50 205 下载量 109 浏览量
2007-08-31
14:06:28
上传
评论 2
收藏 542KB PDF 举报
温馨提示
试读
23页
目前大多数企业采用J2EE技术的结构设计与解决方案。对于我们学习和研究J2EE体系结构来说,了解与掌握J2EE体系结构的设计方法及一些常用模式是必须的;模型-视图-控制(model-view-control,简称MVC)结构是目前最常见的J2EE应用所基于的体系结构,MVC主要适用于交互式的Web应用,尤其是存在大量页面及多次客户访问及数据显示;相比较而言,一个工作流体系结构更多应用于过程控制和较少交互的情况下;除了体系结构外,J2EE的设计模式对我们解决应用系统的设计也有很大的帮助。<br><br>将免分进行到低!
资源推荐
资源详情
资源评论
J2EE 体系架构分析 编辑 tolys
J2EE 体系架构分析
目前大多数企业采用 J2EE 技术的结构设计与解决方案。对于我们学习和研
究 J2EE 体系结构来说,了解与掌握 J2EE 体系结构的设计方法及一些常用模式是
必须的;模型-视图-控制(model-view-control,简称 MVC)结构是目前最常见的
J2EE 应用所基于的体系结构,MVC 主要适用于交互式的 Web 应用,尤其是存在大
量页面及多次客户访问及数据显示;相比较而言,一个工作流体系结构更多应用
于过程控制和较少交互的情况下;除了体系结构外,J2EE 的设计模式对我们解
决应用系统的设计也有很大的帮助。
一、J2EE 的模型-视图-控制(MVC)体系结构
模型-视图-控制结构是交互式应用程序广泛使用的一种体系结构。它有效地
在存储和展示数据的对象中区分功能模块以降低它们之间的连接度,这种体系结
构将传统的输入、处理和输入模型转化为图形显示的用户交互模型,或者换一种
说法,是多层次的 Web 商业应用;MVC 体系结构具有三个层面:模型(Model)、
视图(View)和控制(Controller),每个层面有其各自的功能作用,MVC 体系结构
如下:
图 1 MVC 体系结构
模型层负责表达和访问商业数据,执行商业逻辑和操作。也就是说,这一层
就是现实生活中功能的软件模拟;在模型层变化的时候,它将通知视图层并提供
1
J2EE 体系架构分析 编辑 tolys
后者访问自身状态的能力,同时控制层也可以访问其功能函数以完成相关的任
务。
视图层负责显示模型层的内容。它从模型层取得数据并指定这些数据如何被
显示出来。在模型层变化的时候,它将自动更新。另外视图层也会将用户的输入
传送给控制器。
控制层负责定义应用程序的行为。它可以分派用户的请求并选择恰当的视图
以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操
作;在一个图形界面中,常见的用户输入包括点击按钮和菜单选择。在 Web 应用
中,它包括对 Web 层的 HTTP GET 和 POST 的请求;控制层可以基于用户的交互和
模型层的操作结果来选择下一个可以显示的视图,一个应用程序通常会基于一组
相关功能设定一个控制层的模块,甚至一些应用程序会根据不同的用户类型具有
不同的控制层设定,这主要是由于不同用户的视图交互和选择也是不同的。
在模型层、视图层和控制层之间划分责任可以减少代码的重复度,并使应用
程序维护起来更简单。同时由于数据和商务逻辑的分开,在新的数据源加入和数
据显示变化的时候,数据处理也会变得更简单。
二、J2EE 设计模式
一个设计模式描述了对于特定设计问题被验证的解决方案,它综合了所有开
发者对这个问题所在领域的知识和见解;同时也是对于常见问题的可重用方案,
它们一般适用于单个问题,但是组织在一起就可以提供整个企业系统的解决方
案。下面我们列举八种常用于 J2EE 平台的设计模式,并对每种模式作简单的介
绍,便于大家学习、理解与灵活应用。
1、前控制器
前控制器(front controller)主要提供一种可以集中式管理请求的控制器,
一个前控制器可以接受所有的客户请求,将每个请求递交给相应的请求句柄,并
适当地响应用户。
前控制器也是表示层的设计模式,它的出现主要是由于表示层通常需要控制
和协调来自不同用户的多个请求,而这种控制机制又根据不同的需要,可能会集
中式控制或分散式控制。换句话说,就是应用系统需要对于表示层的请求提供一
个集中式控制模块,以提供各种系统服务,包括内容提取、视图管理和浏览,如
果系统中没有这种集中式控制模块或控制机制,每个不同的系统服务都需要进行
单独的视图处理,这样代码的重复性就会提高,致使系统开发代价提高;同时,
如果没有一个固定模块管理视图之间的浏览机制,致使其浏览功能下放于每个不
同的视图中,最终必将使得系统的可维护性受到破坏;本文中我们主要讨论的是
集中式控制模块,而不是分散式控制,因为前者更适合于大型的应用系统。
基于上面所说的问题,研究人员提出了前控制器的设计模式。在这种模式中,
控制器提供一个处理不同请求的控制点,这里的处理工作包括安全事务、视图选
2
J2EE 体系架构分析 编辑 tolys
择、错误处理和响应内容的生成;通过将这些处理工作集中在一点进行,大大地
减低了 Java 代码量,同时这种方法也可以减少在视图模块的程序逻辑,保证了
在不同请求之间可以重用大量的逻辑代码。通常,控制器都是和一个分派组件联
合工作的,分派组件主要是用于视图管理和浏览,也就是为用户选择下一个应该
显示的视图,并同时提供对于相关显示资源的控制。分派组件可以包含在控制器
之内,或是在另外一个单独的组件中;虽然前控制器模式推荐对于全部的请求使
用统一处理,但是它也没有限制在一个系统中只能具有一个控制器,在系统中的
每个层次都可以具有多个控制器,并且映射至不同的系统服务,下图 2 显示了前
控制器的类图。
图 2 前控制器的类图
图 3 显示了前控制器的序列图,表示一个控制器如何处理相关的请求。
图 3 前控制器序列图
下面我们来讨论一下图 3 的各个组件。
3
J2EE 体系架构分析 编辑 tolys
2、控制器
控制器(controller)是负责处理各种客户请求的控制点,并可以将一定的职
能(如用户认证等)下放给帮助类。
(1)分派组件(Dispatcher)。一个分派组件主要是用于视图的管理和浏览,为
用户选择下一个可以显示的视图,并管理相关的显示资源;分派组件可以在一个
控制器内运行,或者作为一个单独的组件与控制器协同工作;开发人员可以在分
派组件中实现静态的视图分派技术,或是复杂的动态分派。
(2)帮助类(Helper)。帮助类负责帮助一个视图或控制器来完成其处理工作,
因此,帮助类具有多项职责,包括收集数据、存储中间数据模型等;另外,帮助
类也可以在保证数据完整性和准确性的情况下,为不同显示需求修改数据模型;
也就是说,根据用户的请求,帮助类可以向视图提供未经处理的原始数据,或是
已经格式化后的 Web 内容,一个视图同时可以和多个帮助类协同工作,而后者通
常是由 JavaBeans 和标签(tag)实现的。
3、视图
视图(view)负责向用户显示信息,而帮助类则负责支持视图的工作,即打包
和建立相应的数据模型,下面我们介绍几种可以实现控制器的方法。
1)基于 Servlet 前控制器
这种方法建议使用 servlet 来实现一个控制器,尽管在语法上相差无几,但
是它比使用 JSP 来实现要优越一些;因为控制器所进行的请求处理,多数都是与
程序运行和控制流动相关的,这些处理工作虽然与显示模式相关,但是实际上是
逻辑独立的,所以它们更适合在 servlet 中实现,而不是 JSP 技术中;使用这种
方法也存在一些弱点,比如说 servlet 无法使用 JSP 运行环境的资源,如请求参
数等,但是这个弱点也不是不能解决的,我们可以在 servlet 中建立相关的句柄
来访问同样的资源,当然其代码会变得繁琐一点。
2)基于 JSP 的前控制器
这种方法建议使用 JSP 页面实现控制器,尽管语法上相同,但是 Servlet
方案要比其优越一些;因为控制器所处理的逻辑一般都不是有关显示模式的,所
以在 JSP 页面中实现控制器似乎有点风马牛不相及;使用这种方法也不利于开发
团队的角色和职责的分配,即软件开发人员需要在负责显示逻辑的 JSP 页面中修
改请求处理的代码,通常,这种工作都是相当复杂的,尤其考虑整个 JSP 页面的
编程、编译、测试和调试错误。
3)控制器之中的分派组件
如果分派组件没有较多功能,开发人员可以在控制器实现该组件。
4
J2EE 体系架构分析 编辑 tolys
4)基础前端
基于使用 servlet 实现前控制器,这种方案建议实现一个控制器作为基础
类,这样其他的控制器可以在其之上扩展;这个基础类可以包含一些通用的逻辑
实现,它的子类就会重载这些实现代码,这种方法也有一定的缺陷,当有许多子
类继承这个基础类,并大量地重用代码时,那么就有可能出现一个类的改变会影
响到所有子类的情况。
5)用过滤器实现前控制器
过滤器提供了与用户请求的中心处理相类似的功能,也就是说,控制器的一
些功能可以由过滤器来实现,这种方案的过滤器主要负责处理请求的截取和解
释,而不是请求的处理和响应的生成;通常可以为应用系统提供一个核心控制点,
以处理所有的系统服务和程序逻辑,核心控制也就表明了所有的请求都可以简单
地被跟踪和记录,从而方便各种服务功能的实施;当然,它也存在一些缺点,一
个核心控制点的小问题可能会引发系统的崩溃,但在应用系统的实际开发中,这
并不是个问题,因为通常我们都会在同一个层面上实现多个控制器,从而避免了
这个缺陷;在控制器中,开发人员可以很方便地实现一个检查安全机制的组件,
从而可以在最外层屏蔽对系统的恶意访问,另外使用控制器也会提高系统模块的
可重用性,尤其在控制器同时使用帮助类的时候。
4、视图帮助
视图帮助(View helper)是属于表示层的设计模式,一个视图帮助可以包含相
关视图中的数据访问和内容显示的逻辑,并可以精炼简化视图;显示逻辑主要是
关于如何格式化页面上的数据,而访问逻辑则是关于如何取出数据,视图帮助通
常用来显示数据的 JSP 标记(tag)或是读取数据的 JavaBean。
这种设计模式的出现主要是由于目前的应用系统通常需要实时地开发显示
内容,并且能处理动态的程序数据。如果这些程序数据的访问逻辑和显示逻辑的
关系过于紧密,则系统的表示层就会经常需要改动,从而系统的灵活性、重用性
会大大地受到破坏;同时在相同的模块中实现访问逻辑和显示逻辑将会影响系统
的模块化,也会使得开发团队的任务划分不清。
一个视图通常包含格式化信息,并将其处理任务分发给自己的帮助类,后者
通常是用 JavaBeans 或标记(tag)来实现的,帮助类同时可以存储视图的中间数
据模型并实现数据适配器的功能,即适当地转化数据格式;开发人员可以采用多
种方法实现视图组件,通常,开发人员可以使用 JSP 来实现,并且这也是一种值
得推荐的方法。当然,相应地开发人员也可以使用 Servlet 来实现它,将视图中
一定的程序逻辑植入到帮助类中,会有利于应用系统的模块化和可重用性。系统
可以使用同一个帮助类为不同的用户显示不同的数据信息,并在不同的显示格式
下显示;通常,如果开发人员发现视图的 JSP 页面中存在大量的脚本代码时,就
可以考虑使用视图帮助这种模式了,因为在这种情况下,基本都是程序逻辑和显
示逻辑具有过于紧密的联系;这时开发人员可以将一些适用于所有类型的请求的
5
剩余22页未读,继续阅读
资源评论
- liver772012-12-20不错,对我有所帮助····
上善_若水
- 粉丝: 1000
- 资源: 69
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
- C语言实现直接插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序、计数排序,并带图详解.zip
- 常用工具集参考用于图像等数据处理
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功