admin 管理员组

文章数量: 887021


2024年1月12日发(作者:boot menu)

第27卷第10期 甘肃科技 Vo1.27 Ⅳ0.1O 2011年5月 Gansu Science and Technol May. 2011 MVC设计模式及其改进版 在Java Web开发中的应用 郑福传 (兰州交通大学,甘肃兰州730070) 摘要:对MVC的定义、功能以及所包含的三部分内容进行了阐述,并通过其在Java应用程序中的演化过程予以示 例解析,从MVC在Java单机版上的应用,即观察者模式,逐步过渡到Java Web开发应用中,并给予详细的示例演示 和说明。 关键词:计算机应用技术;MVC;观察者;设计模式;JSP;Servlet;Java Web;事件驱动机制 中图分类号:TP311 对比:纯jsp页面中事件处理与页面展示混杂 1 定义阐述 在一起,MVC中事件处理由Controller承担,从而达 设计模式:是经过验证的,用于解决特定环境 到逻辑与页面相分离的效果。 下、重复出现的特定问题的解决方案。经过验证:说 (3)Controller:事件处理过程。 明这个设计模式是相对比较优秀的方案,是可行的 功能:验证HTML请求的数据、将用户数据与 方案,这样才具有学习、研究和使用价值。 模型更新相映射、选择用于响应的视图。 MVC设计模式:是一种架构型设计模式,它本 身不引入新的功能,只是指导我们把Web应用结构 3 MVC演化过程及示例 做的更加合理,实现逻辑与页面相分离。 3.1 没有使用MVC,做纯JSP应用时。系统结构 功能型设计模式:如单例(保证类的实例唯 如图1所示 一)、工厂(选择实现)、值对象(封装数据)、DAO(屏 蔽变化)等等。 架构型设计模式:结构性的设计模式,只是让程 图1系统结构 序更具有结构化。 这种结构不太合理,在JSP页面写的代码太多, Java中MVC来源思路及进化过程:Servlet= 尤其是控制器代码,页面和逻辑太过于混杂,因此引 Java+HTML字符串,问题产生拼字符串太麻烦一+ 入一个中间层——控制器来专门处理控制器代码。 解决方案:HTML独立出来从而得到一JSP—HTML 3.2标准的MVC的组件关系如图2所示 +Java脚本(能解决Servlet问题,但是带来了页面 和逻辑混杂)一解决方案:MVC(指导我们让Web 应用程序结构更加合理)。 2 MVC三部分内容及各部分功能 图2标准的MVC的组件关系 (1)Model:VO+逻辑层:可以理解为后台部分。 View用户请求到控制器,控制器状态改变通知 功能:封装应用状态、响应状态查询、暴露应用 Model,Model主动通知View说Model自身已改变, 功能。 View主动去Model里面去状态查询。 (2)View:视图层的三大功能,典型的如修改页 下面先看个标准的MVC单机版的示例: 面,触发事件而不处理,纯jsp自己处理,提交给 Eclipse本身就是基于MVC做的,打开Eclipse Controller处理。 时修改编辑区的代码时,左边的Navigator视图和右 功能:产生HTML响应、请求模型更新、提供 边的Outline视图等都会自动更新而随着编辑区的 HTML表单用于用户请求。 代码改变而改变。实际上这些窗口观察的都是同一 

甘肃科技 第27卷 个Model,即观察XX.java代码文件的内容,这种多 个View观察者观察同一个Model文件的在设计模 式中也有个设计模式与其对应即观察者设计模式。 观察者设计模式Java代码示例如下: (1)根据前面的内容抽象,首先必须有个被观 察的对象,即目标对象叫做MySubjeet.java,如图3 然后注册观察者相当于订报纸,然后报社出报纸即 内容改变时触发观察者,当被观察的对象改变时需 要通知观察者也即对应MySubject.java的1 1、12行 代码。 代码输出结果,如图6所示。 愿 蒜 熏 所示。 图3目标对象 观察者观察的为目标对象的内容Content,当内 容改变了即有人setContent需要通知所有的观察 者。 (2)其次应该有些观察者,叫做MyObserver,如 图4所示。 图4观察者 MyObserver实现一个update回调方法,即 MyObserver去观察MySubject,观察到后采取的处理 即这个update方法。这里的观察者又有两种模型, 一种是被观察者主动推过来的消息即推模型,另一 种就是观察者主动去拉内容即拉模型。其实观察者 模式也叫出版订阅模式,推模型即订报的意思,即报 刊发行商将报纸送上门服务,拉模型即某个时刻大 家主动去报刊亭买报的这种模型。 (3)客户端测试代码,Client.java,如图5所示。 图5客户端测试代码 首先创建一个目标对象,然后创建三个观察者, ¨幡££ ∞———Ⅱnl 《 畦站蠢拉_—・孵lf戤 . -t,■琏 竹—_l1 }l 主辞去乜 ̄--.-4tltt.g' ̄ }.¨埘l∞t —-・¨l 。 -”主姊鲁幢——嚷 誊薯砖 图6代码输出结果 当将Client.java文件中的第8、l2行注释掉时, 输出结果中间2行随之也不显示出来,即所谓的lis 退订。 3.3 改进版MVC 在Java WEB开发中会产生一个问题:就是为 什么Model会主动通知View自身已经改变了呢? 因为Java中标准的MVC起源于Swing,这种标准的 MVC只能适应于单机版,在WEB开发中无法实现, 因为WEB是基于请求应答模式的环境,Model不会 在没有请求的情况下直接通知View自身的改变。 改进版MVC组件关系如图7所示。 用 序接r_] 图7改进版MVC组件关系 在实际开发WEB应用的时候,由于无法按照 标准的MVC去实现,通常我们会把逻辑部分转移到 逻辑层去实现,所以Model就退变成只用来封装数 据,也就是我们常写的VO;此时View一般不直接和 逻辑层交互,所有跟逻辑层的交互都由控制器来实 现,View只和控制器交互,如图7所示。 改进版后的MVC一般实现方式:View用JSP 来实现,Controller由Servlet来实现,Model由Jav. aBean来实现。 撇开现在流行的SSH三大框架,下面是一个 MVC的修改功能前台的实现(后台省略),此MVC 为JS I'L+Model2的实现方式。 参考文献: [1]http://www.javaeye.com/wiki/topic/812914. [2]hup://www.1inux521.com/2009/java/200906/4655. htm1. [3]http://tech.it168.com/zx/2008—03—03,/20080302 1420599.shtm1. [4]http://semzon.javaeye.com/blog/572146. (下转第29页) 

第iO期 柴成博等:Crystal Reports在LIMS中的应用 29 由于各企业报表的形式多样、样品类型不同、生 产厂不同、化验标准不同、审核人不同等等原因,使 各企业的报表模版杂,为了能够更快、更准确的生成 所需的报表,在LIMS中开发报表自动生成程序,以 便能够识别报表模块,并与报表生成菜单相关联。 在LIMS中subroutines表中建立子程序NEW— COA(名称可以修改),点击组态进人程序开发界 面,根据不同需求,并指定各类别样品报表生成所需 图2节选项示例 的报表模版开发完成报表自动生成程序。 按照原报表格式和要求,开发完成水晶报表模 版,刷新数据,即可显示新的报表样式,满足开发要 4 总结 Crystal Reports在中国石油LIMS实施建设中的 求,开发完成的报表如图3所示。 应用,优化了报表生成流程,减少报表生成时间,同 时减少了报表生成出错率,提高了质检人员的工作 效率。为生产部门及时准确的提供了产品的分析信 息,为公司产品出厂及客户提供保障。 参考文献: [1]邹立梅,赵丽.LabWare LIMS的组态实施[J].现代科 学仪器,2004(5):l4—17. [2]冯金辉.数字实验室一uMs未来发展趋势[J].现代 图3水晶报表示例 科学仪器,2002(2):6. [3]杨海鹰,沈彤,陆婉珍.从LIMS到Lims Solution[J]. 3 LIMS中水晶报表的生成 为了能够更好、更快捷的生成报表、导出报表, 我们将利用LIMS个性化开发工具,实现“一键生成 报表”的功能。 3.1设计报表生成菜单 现代科学仪器,2002(2):4. [4]鄢国强,牛兴荣,张斌.检测实验室与实验室认可 [J].理化检验,2004,4JD(1):49. [5] 尚凡一,王兆文.实验室信息管理系统(LIMS)的设计 及实现[J].中国环境监测,2000(4):25. 在LIMS系统中,设计报表生成菜单,实现一键 生成按钮。在LIMS中subroutines表中的AS— FOLDER中编写菜单程序,并定义其菜单显示的位 置和链接的报表生成程序。在开发完成菜单显示程 序后,可以在样品文件夹中看到定义的菜单名称。 3.2开发报表生成程序 ‘‘●…’●…‘●…‘■…’●…‘●… ●…‘●‘…●…’●’…●… “●… ■…’●…‘■…‘■…‘■…’■…‘■…’■…‘●…‘■…[6]钱榕,熊丽红,方昌志.实验室信息管理系统在血站 实验室管理工作中的应用[J].实验与检验医学,2009 (4):20—21. [7] 张志檩,王群,王海芹,化工实验室信息管理系统 LIMS[M].化工出版社. [8]汤立,郦伟.实验室信息管理系统(LIMS)在环境监测 系统的应用探讨[J].江苏环境科技,2007(4):38. ’●…‘■…‘●…。■…‘■…‘●…●■…’■…‘■………■‘……‘0■…‘…一…‘…一…’…一…。…一…。…一” (上接第24页) [5]Robert Lafore.Java数据结构与算法[M].计晓云赵研 等译.北京:中国电力出版社,2003. REC—html401—19991224/>. [8]Java Platform,Standard Edition 6 API Specification.Sun. Microsystems.March 2006. <http://java.sun.corn/ [6] Bloch,Joshua.Effective Java Programming Language javase/6/docs/api/>・ Guide.Addison—Weslev.Boston。2001.ISBN: 0201310058. f7 1 HTML 4.01 Speciifcation.World Wide Web Consorti. um.December 1999.<http://www.w3.0rg/TR/1999/ [9]赵玉伟,肖敏,熊前兴.一种简单MVC框架的实现方 案[J].交通与计算机,2006(4). [10] 于天恩.Ruby Al'-J权威经典[M].北京:北京航空航 天大学出版社,2009. 


本文标签: 报表 生成 观察者 实现 应用