基于JSPServlet 的Web 应用框架的设计与实现.doc_第1页
基于JSPServlet 的Web 应用框架的设计与实现.doc_第2页
基于JSPServlet 的Web 应用框架的设计与实现.doc_第3页
基于JSPServlet 的Web 应用框架的设计与实现.doc_第4页
基于JSPServlet 的Web 应用框架的设计与实现.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

360文档中心 word文档下载网站/本文档下载自360文档中心,更多免费文档请访问网址/doc/info-ef96cceb19e8b8f67c1cb914.html基于JSP_Servlet的Web应用框架的设计与实现计算机技术与发展第17卷第4期17No.4Vol.2007年4月Apr.2007COMPUTERTECHNOLOGYANDDEVELOPMENT基于JSP/Servlet的Web应用框架的设计与实现周云,余青松,敬宗儒(华东师范大学计算中心,上海200062)摘要:Web应用程序的开发过程中存在着Framework的应用。这些Framework了部分非业务逻辑的过程,Frame2work模型,实现了部分的自动化处理。该模型的构建,Framework的可能性。关键词:Web应用框架;MVC;设计和实现中图分类号:TP311:A文章编号:1673-629X(2007)04-0243-04FrameworkBasedonJSP/Servlet:DesignandImplementationZHOUYun,YUQing2song,JINGZong2ru(ComputerCenter,EastChinaNormalUniversity,Shanghai200062,China)Abstract:ThereremanyframeworksappliedduringthedevelopmentprocessoftheWebapplications.Theseframeworksmakethedevel2opmentmorenormative.Theydoalotofdrudgeryworksfortheprogrammersautomatically,whichhavenothingtothebusinesslogic.Sotheprogrammerscanconcentrateondevelopingthebusinesslogic.Inthispaper,asimpleframeworkmodelwithsomeautomaticfunc2tionisdesignedandrealized.ItprovesthatwecanbuildaframeworkwithbasicJavatoolsanddesign.Keywords:Webapplicationframework;MVC;designandimplementation0引言在开发Web应用程序的过程中,特别是JSP应用程序,到处充斥着Framework的应用。这些Frame2work的技术相当成熟,规范十分完整。它们对于程序与数据库打交道的数据Model也应该得到妥善管理。另外,这些操作的共通特性都是高于模块级别但又属于代码级别的。所以,应该设计出一个类似于规约性质同时又是以实际代码形式出现的管理体制。于是,Framework便诞生了。员的编码规范以及后台Model实体的管理相当完善。文中关注的重点是如何用最基本的Java语言工具和设计方式来设计和实现一个带有自动化操作功能的Framework,从而深入理解一些Framework内在的处目前流行的Framework有很多,比如Struts,Spring,JSF等等1。它们使JSP程序员从散兵游勇转化为了正规军。它们的共同点都是拥有自动化操作2“前端”以及资源管理的“后端”。理机制。笔者参照Struts的前端自动化操作过程设计并且1Framework概述人们需要一个Framework来对软件开发提供支持,并且对程序员所书写的代码进行规范。一些公共的非逻辑的处理过程应该做成共通模块,一些不好的编成习惯应该得到限制和纠正。同时,实现了一个Framework模型,希望借此深入了解一些Framework的内部实现机制。2Framework模型的设计原则最根本的原则是Framework要给开发过程带来便利,使得开发过程更加规范完善。为了实现这个根本原则,必须解决两个问题:(1)尽量将非业务逻辑自动化处理;(2)将程序员的发挥空间进行限制。对于第一个问题,通过对比研究可以发现,前台视收稿日期:2006-06-23作者简介:周云(1981-),男,四川犍为人,硕士研究生,研究方向为Web应用;余青松,高级工程师,研究方向为计算机系统分析与集成、Web应用技术。计算机技术与发展第17卷?244?图层回传参数Servlet接受参数,并将参数封装到一个对象当中Servlet选择正确的视图,并且进行显示,这三个步骤与业务逻辑没有关系2。不管你是什么业务逻辑,这三个步骤总会独立地执行。业务逻辑只会出现在这三个步骤的间隙之间。应该据此对这三个步骤分别进行封装,实现自动化处理。对于第二个问题,可以提出一个简单的解决办法:让程序员“只可能将正确的代码写在正确的地方”。把其他与业务逻辑没有关系的代码全部进行封装即可。综上所述,文中所描述的Framework模型的设计原则就是,封装非业务逻辑的操作,度。当然,这只是一个Framework现,进一步的应用,Framework模型图3FrameworkUML类图,。的2实体(数据缓冲区)引用HttpServletRequest当中所有的参数名字以及值,那么就可以把它们封装到一个具体的实体当中。简言之,这个实体就是一个普通的Java类实体。那么,这一步所遇到的问题就是如何获得这个实体的引用。因为这个实体的创建应该由程序员完成,所以实体的类型就是千差万别的。针对这种情况,应该把这些类做统一的管理,即把它们全部继承自一个Framework系统当中定义的基类。同时,由于Action2Form只是纯粹的数据实体,业务处理方法没有存在的3Framework模型的设计Web程序的设计遵循现在成熟的MVC设计模式。Model的设计组合独立于Framework之外。View是属于前台视图层。Controller负责接收参数,调用对应的业务模型实体进行处理,返回对应的视图。由此可见,对于业务模型实体的设计重要的一点就是它要能够自动地生成并且被Controller自动地调用,同时Controller还必须将对应的数据缓冲区传递给它。那必要,所以ActionForm当中没有对方法进行扩展的必要。因此,规定所有的ActionForm实体均继承自Framework当中指定的基类,这样就可以获取所有Ac2tionForm实体的引用了。3.3获取相应的Action实体(业务实体)的引用么业务模型所需要的就是一个标记,一个能够表明它身份的标记。Framework模型的框架如图1所示1;其Sequence图如图2所示1;其UML类图如图3所示。3.1获取前台视图传回的参数创建了ActionForm实体之后,应该创建Action实体进行业务逻辑的处理。为了获取Action实体的引用,可以采用类似于获取ActionForm引用的处理方法。另外,Action实体当中的业务处理方法也是千差万别,没有任何规律。为了保证这些业务方法都被系统调用,可以采用类似于Servlet类的处理方式定义一个被Framework调用的方法,其余的业务方法均被此方法调用。这个被Framework调用的方法叫做executeAction,并且这个方法应该在基类当中定义。Framework在获取了Action的引用之后,立即调用这先从获取前台视图传回的参数开始进行分析。既然要对这个过程进行自动处理,那么程序要获取HttpServletRequest当中各个参数的名字,进行数据缓冲的实体的引用,进行数据缓冲实体当中各个对应图1Framework模型的框架个方法,从而执行所需的业务操作。3.4创建视图层使用的PageBean实体PageBean应该是在Action实体当中创建的。它是属于视图层的。其实Action2Form也可以用作PageBean,只是笔者认为一个独立的PageBean使得流程更为清晰1。PageBean只是一个POJO而已。3.5返回到对应的视图层图2Framework模型的Sequence图在Action当中进行完业务处理之后,第4期周云等:基于JSP/Servlet的Web应用框架的设计与实现?245?返回一个新的视图层的url给Controller,以便Con2troller进行正确的response导向。3.6小结这些数据缓冲区和业务实体必须继承自指定的类。笔者一向认为继承的作用是便于管理而不是扩展功能扩展功能最好用复合5。这里暂时称呼这些基类为FrameActionForm和FrameAction6。这些基类当中可以指定一些基本的方法,当然也可以不指定6。只要实际程序中使用的ActionForm和Action继承自上面的基类,那么它们就会被Framework调用管理。FrameAction当中的方法供Con2,。4.综合分析可知,所需要知道和掌握的变量是:HttpServletRequest当中的参数的名字,数据缓冲区中相应属性名字,数据缓冲区的引用,进行数据缓冲区操作的接口的名字,业务实体的引用。JAVA的RTTI机制提供一些“盲操作”可供使用3。另外,有些信息可以放置在外部的文件存储当中。这些存储信息的文件,可以称之为配置文件。具体的代码实现请参见下文。ActionForm以及Action的。那么问题就演化成为:如何根据一个名字来创建对应的实体。这样看来,似乎只要再次使用Class.forName函数4,问题就解决了。为了给程序足够的信息创建对象,Framework使用配置文件。当然,为了读取这些配置信息,需要一个专门的类进行处理2。这个类的作用就是专门负责读取配置信息。4.4整合Framework模型4Framework,4.1获取前台视图传回的参数以及设置数据缓冲区属性值前台回传的参数会被读取到一个数据缓冲区当中进行缓存,从而可以利用RTTI机制进行获取一个实体类的数据属性的名字4。这里对编程的规范再次进行限制:对于进行属性设置的函数必须是setter形式的函数,否则将不会进行调用。这样,可以使用以下代码获取函数的入口3:Methodm=c.getMethods();Methodmethods=newMethodm.length;StringpropertiesName=newStringm.length;Stringargs=newStringm.length;intcount=0;obj=c.newInstance();bean=(Buffer)obj;for(inti=0;i<m.length;i )既然进行框架的整合,那么有必要提及BruceEckel在他的巨作ThinkinginJava当中提及的原则6。那就是使用innerclass对框架进行封装管理,也就是Factory设计模式6。所有的innerclass都应该继承自各自的外部基类,然后再在封装类当中进行定义体的实现。下面是Controller的代码演示4:packagecontrollers;importclassespublicclassFrameControllerextendsHttpServletstaticfinallongserialVersionUID=0;FrameActionaction=null;FrameActionFormbean=null;FrameConfigurationconfig=null;Hashtablehtbl=null;publicvoiddoGet(HttpServletRequestrequest,HttpServletRe2sponseresponse)throwsIOException,ServletExceptionpropertiesNamei=mi.toString();)!=-1)if(propertiesNamei.indexOf(”set”methodscount=mi;argscount=propertiesNamei.substring(propertiesName) 3,propertiesNamei.indexOf();i.indexOf(“set”“(”count ;doPost(request,response);publicvoiddoPost(HttpServletRequestrequest,HttpServle2tResponseresponse)throwsIOException,ServletException得到了属性设置函数,便可以获取对应的属性。接下来,就可以对缓冲区进行设置了。调用Method类当中的invoke方法可以对缓冲区进行设置3。4.2获取数据缓冲区的引用及业务实体的代码实现StringmappingName=null;Stringpath=null;)=null)if(request.getParameter(“pathName”mappingName=“/jsp/src.jsp”;getServletConfig().getServletContext().getRequestDispatcher(mappingName).forward(request,response);在实际的应用中,数据缓冲区以及业务实体必须生成实际的对象实体,并且有显式的应用。否则,无法找到该内存块。else计算机技术与发展第17卷?246?config=newFrameConfiguration();try/GettheconfiguartioninformationfromtheXMLfile设计与实现进行隔离。所以这样的代码最多只能存在于演示模型中。实际上,至少也得采用一下Factory设计模式来对Framework进行封装。另外,为了进行规整的操作,根据这个模型的特性,需要一个Tag设定表单提交的url以及后台所需要的索引信息。到现在为止,设计出的框架模型组件包括Con2troller,ActionForm,Action,(负责读取catch(Exceptione)e.printStackTrace();System.exit(1);bean=getActionFormBean(request);action=getAction();mappingName=action.executeAction(request,re2sponse,bean);成jar。getServletConfig().getServletContext().Dispatcher(mappingName).forward(;work模型的应用与验证由于篇幅的限制,实际验证的过程就不再叙述了。验证的结果是:前台采用指定的标签,后台程序当中创建继承自ActionForm和Action的类以及进行了正确的配置之后,程序正常运行。在建立这个Framework模型的过程中,已经从理论上证明了这个模型的正确性了,虽然这个模型没有实际应用价值。/333GetActionFormBean3/privateFrameActionFormgetActionFormBean(HttpServle2tRequestrequest)Objectobj=null;FrameActionFormbean=null;).Classc=Class.forName(htbl.get(“actionFormType”toString();6结束语Web程序的开发几乎已经离不开Framework了。.returnbean;/333GetFrameAction3/privateFrameActiongetAction()FrameActionaction=null;Class

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论