下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 jsp在线问卷调查系统的分析与实现毕业论文

jsp在线问卷调查系统的分析与实现毕业论文.doc

jsp在线问卷调查系统的分析与实现毕业论文

Hedda凡凡
2017-09-02 0人阅读 举报 0 0 暂无简介

简介:本文档为《jsp在线问卷调查系统的分析与实现毕业论文doc》,可适用于职业岗位领域

太原理工大学毕业设计(论文)用纸在线问卷调查系统的分析与实现摘要在校园、机关或企业里由于各种调查研究的需要经常会有各种各样的调查问卷在传统模式下人们不但要花费不少的费用印刷问卷而且还要消耗大量时间和精力发放问卷、回收问卷、统计问卷并且问卷可控性差容易产生漏卷、废卷等问题。本系统建立在信息技术基础上构建一个在线的问卷设计、分发、调查、回收、统计的系统基本解决了传统问卷的上述老大难问题。本文首先对当今计算机发展的现状进行了分析,并阐述了在线问卷调查的必要性。在对本系统进行了项目可行性分析后对用户需求进行分析并阐述了系统的设计与实现对系统中出现的重难点问题进行研究最后对系统测试进行了解释。本文着重介绍了JEE体系架构接着探讨了在面向对象软件开发过程中设计模式的重要作用叙述了在JEE平台下一些常用的设计模式以及如何在一个问卷调查系统项目中如何运用这些设计模式接着讨论了软件测试的概念最后研究和设计了一个建立在JEE平台上的通用框架。从而建立了一个能够快速开发业务应用程序的开发环境。关键词:JEE体系结构问卷调查设计模式通用框架I太原理工大学毕业设计(论文)用纸DesignandImplementationofOnlineQuestionnaireSurveySystemAbstractOncampus,authoritiesorenterprisesinChina,duetoavarietyofresearchneeds,oftenhaveavarietyofquestionnaires,thetraditionalmodel,peoplenotonlyhavetospendalotofthecostofprintingthequestionnaires,butalsospendalotoftimeandIssuedonthequestionnaire,therecoveryofthequestionnaire,statisticalsurvey,questionnairesandcontrolpoor,pronetoleakagevolume,thevolumeofwasteThesystembuiltonthebasisofinformationtechnology,tobuildanonlinequestionnairedesign,distribution,inveesforindividualclassesYoualsoneedsomewaytobeassuredthatthenameyouchooseforaclasswillbereasonablyuniqueandnotcollidewithclassnameschosenbyot太原理工大学毕业设计(论文)用纸herprogrammers(Imagineasmallgroupofprogrammersfightingoverwhogetstousethename―Foobar‖asaclassnameOr,imaginetheentireInternetcommunityarguingoverwhofirstnamedaclass―Espresso‖)Thankfully,JavaprovidesamechanismforpartitioningtheclassnamespaceintomoremanageablechunksThismechanismisthepackageThepackageisbothanamingandavisibilitycontrolmechanismYoucandefineclassesinsideapackagethatarenotaccessiblebycodeoutsidethatpackageYoucanalsodefineclassmembersthatareexposedonlytoothermembersofthesamepackageThisallowsyourclassestohaveintimateknowledgeofeachother,butnotexposethatknowledgetotherestoftheworldTocreateapackageisquiteeasy:simplyincludeapackagecommandasthefirststatementinaJavasourcefileAnyclassesdeclaredwithinthatfilewillbelongtothespecifiedpackageThepackagestatementdefinesanamespaceinwhichclassesarestoredIfyouomitthepackagestatement,theclassnamesareputintothedefaultpackage,whichhasnoname(Thisiswhyyouhaven’thadtoworryaboutpackagesbeforenow)Whilethedefaultpackageisfineforshort,sampleprograms,itisinadequateforrealapplicationsMostofthetime,youwilldefineapackageforyourcodeThisisthegeneralformofthepackagestatement:packagepkgHere,pkgisthenameofthepackageForexample,thefollowingstatementcreatesapackagecalledMyPackage:packageMyPackageJavausesfilesystemdirectoriestostorepackagesForexample,theclassfilesforanyclassesyoudeclaretobepartofMyPackagemustbestoredinadirectorycalledMyPackageRememberthatcaseissignificant,andthedirectorynamemustmatchthepackagenameexactlyThischapterexaminestwoofJava’smostinnovativefeatures:packagesandinterfacesPackagesarecontainersforclassesTheyareusedtokeeptheclassnamespacecompartmentalizedForexample,apackageallowsyoutocreateaclassnamedList,whichyoucanstoreinyourownpackagewithoutconcernthatitwillcollidewithsomeotherclassnamedListstoredelsewherePackagesarestoredinahierarchicalmannerandareexplicitlyimportedintonewclassdefinitions太原理工大学毕业设计(论文)用纸Inpreviouschapters,youhaveseenhowmethodsdefinetheinterfacetothedatainaclassThroughtheuseoftheinterfacekeyword,JavaallowsyoutofullyabstractaninterfacefromitsimplementationUsinginterface,youcanspecifyasetofmethodsthatcanbeimplementedbyoneormoreclassesTheinterface,itself,doesnotactuallydefineanyimplementationAlthoughtheyaresimilartoabstractclasses,interfaceshaveanadditionalcapability:AclasscanimplementmorethanoneinterfaceBycontrast,aclasscanonlyinheritasinglesuperclass(abstractorotherwise)Intheprecedingchapters,thenameofeachexampleclasswastakenfromthesamenamespaceThismeansthatauniquenamehadtobeusedforeachclasstoavoidnamecollisionsAfterawhile,withoutsomewaytomanagethenamespace,youcouldrunoutofconvenient,descriptivenamesforindividualclassesYoualsoneedsomewaytobeassuredthatthenameyouchooseforaclasswillbereasonablyuniqueandnotcollidewithclassnameschosenbyotherprogrammers(Imagineasmallgroupofprogrammersfightingoverwhogetstousethename―Foobar‖asaclassnameOr,imaginetheentireInternetcommunityarguingoverwhofirstnamedaclass―Espresso‖)Thankfully,JavaprovidesamechanismforpartitioningtheclassnamespaceintomoremanageablechunksThismechanismisthepackageThepackageisbothanamingandavisibilitycontrolmechanismYoucandefineclassesinsideapackagethatarenotaccessiblebycodeoutsidethatpackageYoucanalsodefineclassmembersthatareexposedonlytoothermembersofthesamepackageThisallowsyourclassestohaveintimateknowledgeofeachother,butnotexposethatknowledgetotherestoftheworldTocreateapackageisquiteeasy:simplyincludeapackagecommandasthefirststatementinaJavasourcefileAnyclassesdeclaredwithinthatfilewillbelongtothespecifiedpackageThepackagestatementdefinesanamespaceinwhichclassesarestoredIfyouomitthepackagestatement,theclassnamesareputintothedefaultpackage,whichhasnoname(Thisiswhyyouhaven’thadtoworryaboutpackagesbeforenow)Whilethedefaultpackageisfineforshort,sampleprograms,itisinadequateforrealapplicationsMostofthetime,youwilldefineapackageforyourcodeThisisthegeneralformofthepackagestatement:packagepkg太原理工大学毕业设计(论文)用纸Here,pkgisthenameofthepackageForexample,thefollowingstatementcreatesapackagecalledMyPackage:packageMyPackageJavausesfilesystemdirectoriestostorepackagesForexample,theclassfilesforanyclassesyoudeclaretobepartofMyPackagemustbestoredinadirectorycalledMyPackageRememberthatcaseissignificant,andthedirectorynamemustmatchthepackagenameexactlyThischapterexaminestwoofJava’smostinnovativefeatures:packagesandinterfacesPackagesarecontainersforclassesTheyareusedtokeeptheclassnamespacecompartmentalizedForexample,apackageallowsyoutocreateaclassnamedList,whichyoucanstoreinyourownpackagewithoutconcernthatitwillcollidewithsomeotherclassnamedListstoredelsewherePackagesarestoredinahierarchicalmannerandareexplicitlyimportedintonewclassdefinitionsInpreviouschapters,youhaveseenhowmethodsdefinetheinterfacetothedatainaclassThroughtheuseoftheinterfacekeyword,JavaallowsyoutofullyabstractaninterfacefromitsimplementationUsinginterface,youcanspecifyasetofmethodsthatcanbeimplementedbyoneormoreclassesTheinterface,itself,doesnotactuallydefineanyimplementationAlthoughtheyaresimilartoabstractclasses,interfaceshaveanadditionalcapability:AclasscanimplementmorethanoneinterfaceBycontrast,aclasscanonlyinheritasinglesuperclass(abstractorotherwise)太原理工大学毕业设计(论文)用纸外文文献翻译JSP的技术发展历史作者:KathySierraandBertBates来源:ServletJSPJavaServerPages(JSP)是一种基于web的脚本编程技术类似于网景公司的服务器端Java脚本语言serversideJavaScript(SSJS)和微软的ActiveServerPages(ASP)。与SSJS和ASP相比JSP具有更好的可扩展性并且它不专属于任何一家厂商或某一特定的Web服务器。尽管JSP规范是由Sun公司制定的但任何厂商都可以在自己的系统上实现JSP。在Sun正式发布JSP(JavaServerPages)之后这种新的Web应用开发技术很快引起了人们的关注。JSP为创建高度动态的Web应用提供了一个独特的开发环境。按照Sun的说法JSP能够适应市场上包括ApacheWebServer、IIS在内的的服务器产品。本文将介绍JSP相关的知识以及JavaBean的相关内容当然都是比较粗略的介绍其中的基本内容仅仅起到抛砖引玉的作用如果读者需要更详细的信息请参考相应的JSP的书籍。JSP(JavaServerPages)是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态网页技术标准其在动态网页的建设中有其强大而特别的功能。JSP与Microsoft的ASP技术非常相似。两者都提供在HTML代码中混合某种程序代码、由语言引擎解释执行程序代码的能力。下面我们简单的对它进行介绍。JSP页面最终会转换成servlet。因而从根本上JSP页面能够执行的任何任务都可以用servlet来完成。然而这种底层的等同性并不意味着servlet和JSP页面对于所有的情况都等同适用。问题不在于技术的能力而是二者在便利性、生产率和可维护性上的不同。毕竟在特定平台上能够用Java编程语言完成的事情同样可以用汇编语言来完成但是选择哪种语言依旧十分重要。和单独使用servlet相比JSP提供下述好处:JSP中HTML的编写与维护更为简单。JSP中可以使用常规的HTML:没有额外的反斜杠没有额外的双引号也没有暗含的Java语法。能够使用标准的网站开发工具。即使是那些对JSP一无所知的HTML工具我们也可以使用因为它们会忽略JSP标签(JSPtags)。太原理工大学毕业设计(论文)用纸可以对开发团队进行划分。Java程序员可以致力于动态代码。Web开发人员可以将经理集中在表示层(presentationlayer)上。对于大型的项目这种划分极为重要。依据开发团队的大小及项目的复杂程度可以对静态HTML和动态内容进行弱分离(weakerseparation)和强分离(strongerseparation)。此处的讨论并不是说人们应该放弃使用servlet而仅仅使用JSP。事实上几乎所有的项目都会同时用到这两种技术。在某些项目中更适宜选用servlet而针对项目中的某些请求我们可能会在MVC构架下组合使用这两项技术。我们总是希望用适当的工具完成相对应的工作仅仅是servlet并不一定能够胜任所有工作。Sun公司的JSP技术使Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面。使用JSP标识或者小脚本来生成页面上的动态内容(内容是根据请求来变化的)。JavaServlet是JSP技术的基础而且大型的Web应用程序的开发需要JavaServlet和JSP配合才能完成Servlet这个名称源于Applet现在国内的翻译方式很多本书为了避免误会决定直接采用Servlet而不做任何翻译读者如果愿意可以称之为―小服务程序‖。Servlet其实和传统的CGI、ISAPI、NSAPI等Web程序开发工具的作用是相似的在使用JavaServlet以后用户不必再使用效率低下的CGI方式也不必使用只能在某个固定Web服务器平台运行的API方式来动态生成Web页面。许多Web服务器都支持Servlet即使不直接支持Servlet的Web服务器也可以通过附加的应用服务器和模块来支持Servlet。得益于Java的跨平台的特性Servlet也是平台无关的实际上只要符合JavaServlet规范Servlet是完全与平台无关且是与Web服务器无关的。由于JavaServlet内部是以线程方式提供服务不必对于每个请求都启动一个进程并且利用多线程机制可以同时为多个请求服务因此JavaServlet效率非常高。但JavaServlet也不是没有缺点和传统的CGI、ISAPI、NSAPI方式相同JavaServlet是利用输出HTML语句来实现动态网页的如果用JavaServlet来开发整个网站动态部分和静态页面的整合过程会非常难以实现。为了解决JavaServlet的这种缺点SUN推出了JSP。许多年前Marty受到邀请,参加一个有关软件技术的小型研讨会坐在Marty旁边的人是JamesGoslingJava编程语言的发明者。隔几个位置,是来自华盛顿一家大型软件公司的高级经理。在讨论过程中,研讨会的主席提出了Jini的议题,这在当时是一项新的Java技术。主席向该经理询问他的想法他回答说,虽然现在言之过早但这看起来会是非常有前途的一项技术。他们会持续关注这项技术,如果这项技术变得流行起来,他们会遵循公司的―接受并扩充(embraceandextend)‖的策略此时,Gosling随意地插话说―你的意思其实就是不接受且不扩充(disgraceanddistend)。‖太原理工大学毕业设计(论文)用纸在此,Gosling的抱怨显示出他感到这个公司会从其他公司那里拿走技术,用于他们自己的目的出人意料的是形势已经完全不同。Java团队并没有发明这一思想将页面设计成由静态HTML和用特殊标签标记的动态代码混合组成。ColdFusion多年前就已经这样做了。甚至ASP(来自于前述经理所在公司的一项产品)都在JSP出现之前推广了这种方式。实际上,JSP不只采用了这种通用概念,它甚至使用许多和ASP相同的特殊标签。JSP是建立在Javaservlets模型之上的表达层技术它使编写HTML变得更简单。像SSJS一样它也允许你将静态HTML内容与服务器端脚本混合起来生成动态输出。JSP把Java作为默认的脚本语言然而就像ASP可以使用其他语言(如JavaScript和VBScript)一样JSP规范也允许使用其他语言。按照脚本语言是服务于某一个子系统的语言这种论述JSP应当被看作是一种脚本语言。然而作为一种脚本语言JSP又显得过于强大了在JSP中几乎可以使用全部的Java类。作为一种基于文本的、以显示为中心的开发技术JSP提供了JavaServlet的所有好处并且当与一个JavaBeans类结合在一起时JSP提供了一种使内容和显示逻辑分开的简单方式。分开内容和显示逻辑的好处是更新页面外观的人员不必懂得Java代码而更新JavaBeans类的人员也不必是设计网页的行家里手就可以用带JavaBeans类的JSP页面来定义Web模板以建立一个由具有相似的外观的页面组成的网站。JavaBeans类完成数据提供这样在模板中就没有Java代码这意味着这些模板可以由一个HTML编写人员来维护。当然也可以利用JavaServlet来控制网站的逻辑通过JavaServlet调用JSP文件的方式来将网站的逻辑和内容分离。一般来说在实际的JSP引擎中JSP页面在执行时是编译式而不是解释式的。解释式的动态网页开发工具如ASP、PHP等由于速度等原因已经满足不了当前大型电子商务应用的需要了传统的开发技术都在向编译执行的方式改变如ASPASPPHPPHP。在JSP规范书中并没有明确要求JSP中的程序代码部分(称为Scriptlet)一定要用Java来写。实际上有一些JSP引擎就是采用的其他脚本语言如EMACScript、WebL等但实际上这几种脚本语言也是构建在Java上面编译为Servlet来实现的。按照JSP规范书写和Java没有任何关系的Scriptlet也是可以的不过由于JSP的强大功能主要在于能和JavaBeans、EnterpriseJavaBeans共同运转所以即使是Scriptlet部分不使用Java编译成的执行代码也应该是与Java相关的。要理解JSP怎样联合以上各种所提到的技术的优点从而轻而易举地实现各种效果用户必须首先了解―组件为中心的网页开发‖和―页面为中心的网页开发‖的区别。太原理工大学毕业设计(论文)用纸SSJS和ASP都是在几年前推出的那时网络还很年轻没有人知道除了把所有的商务、数据和表达逻辑统统堆进原始网页中之外还有什么更好的解决方法。这种以页面为中心的模型容易学习并且得到相当快速的发展。然而随着时间的推移人们认识到这种方法不适于构建大型的、可升级的Web应用程序。在脚本环境中书写的表达逻辑被锁在页面内只有通过剪切和粘贴才能被重用。表达逻辑通常和商务及数据逻辑混在一起这使得当程序员试图改变一个应用程序的外观而不想破坏与之紧密结合的商务逻辑时应用程序的维护就变得十分艰难。其事实上企业中可重用组件的应用早已经很成熟没有人愿意为它们的应用程序重写那些逻辑。HTML和图形设计师把它们的设计的实施工作交给了Web编写者使他们不得不加倍工作常常是手工编写因为没有合适的工具可以把服务器端脚本与HTML内容结合起来。简而言之随着Web应用程序的复杂性不断提升以页面为中心的开发方式的局限性变得明显起来。与此同时人们一直在寻找建立Web应用程序的更好方法组件在客户机服务器领域流行起来。JavaBeans和ActiveX被―快速应用程序开发‖(RAD)工具发行商推广给Java和Windows应用程序开发者用来快速开发复杂的程序。这些技术使某领域内的专家可以为本领域内的垂直应用编写组件而开发者可以直接拿来使用而不必掌握这一领域的专门技术。作为一种以组件为中心的开发平台JSP出现了。它以JavaBeans和EnterpriseJavaBeans(EJB)组件包含商务和数据逻辑的模型为基础提供大量标签和一个脚本平台用来在HTML页中显示由JavaBeans产生或回送的内容。由于JSP的以组件为中心的性质它可以被Java和非Java开发者同样使用。非Java开发者可以通过JSP的标签(Tags)来使用高级Java开发者创建的JavaBeans。Java开发者不仅可以创建和使用JavaBeans还能在JSP页中使用Java语言来更精密地控制基于底层JavaBeans的表达逻辑。现在来看看JSP是如何处理HTTP请求的。在基本请求模型中一个请求直接被送到JSP页中。JSP代码控制着进行逻辑处理时与JavaBeans组件的交互并在动态生成的、混合了静态HTML代码的HTML页中显示结果。Beans可以是JavaBeans或EJB组件。另外更加复杂的请求模型可看作从被请求页呼叫其他JSP页或JavaServlets。JSP引擎实际上要把JSP标签、JSP页中的Java代码甚至连同静态HTML内容都转换为大块的Java代码。这些代码块被JSP引擎组织到用户看不到的JavaServlet中去然后Servlet自动把它们编译成Java字节码。这样当网站的访问者请求一个JSP页时在它不知道的情况下一个已经生成的、预编译过的Servlet实际上将完成所有的工作非常隐蔽而又高效。因为Servlet是编译过的所以网页中的JSP代码不需要在每次请求该页时被解释一遍。JSP引擎只需在Servlet代码最后被修改后编译一次然后这个太原理工大学毕业设计(论文)用纸编译过的Servlet就可以被执行了。由于是JSP引擎自动生成并编译Servlet不用程序员动手编译代码所以JSP能带给你高效的性能和快速开发所需的灵活性。和传统的CGI相比较JSP有相当的优势。首先在速度上传统的CGI程序需要使用系统的标准输入输出设备来实现动态网页的生成而JSP是直接和服务器相关联的。而且对于CGI来说每一个访问就需要新增加一个进程来处理进程不断地建立和销毁对于作为Web服务器的计算机将是不小的负担。其次JSP是专门为Web开发而设计的其目的是为了建立基于Web的应用程序其中包含了一整套的规范和工具。使用JSP技术可以很方便地将一大堆JSP页面组合成为一个Web应用程序。为什么面向对象语言有如此广泛的影响力之于软件开发社区,面向对象程序设计吸引着多个层面。对于经理人(managers)它提供了更快速、更廉价的开发和维护(maintenance)费用。对于分析员和设计人员建模过程(themodelingprocess)变得更简单而且可以创建一个有序而可控的设计。对于程序员而言简洁而优雅的对象强有力的面向对象工具和开发库将为他们创造一个愉快的开发环境并且体验到生产效率的提高。它将会使每个人都受益。如果说有不好的一面那就是昂贵的学习曲线(learningcurve)。用对象的方式来思考问题相比于过程化的思考问题方式有着很大的差别而且设计一个对象比起设计一个过程来说是一个很大的挑战特别是当你要设计一个可复用的对象(reusableobjects)的时候。在过去一个从事面向对象程序设计的初级从业人员面对着两大难题:、选择一个像是Smalltalk一样的语言如果你想要用它来进行生产你就必须要学习一个很大型的库。、选择一个像是C语言一样的语言几乎没有任何的库。你必须去设法了解深涩的语言本身以便于去编写你自己的对象库。事实上把设计对象好是一件很难的事情。而且设计每个东西其实都是很难的。这就是它的目的所在让相对很少的一部分专家去设计最好的对象让其余的人去使用它们。幸运的是面向对象程序设计语言并不只是有其语法和一个编译器而是有一个完整的开发环境包含一个被设计良好并且专业的库使调用对象变得很简单。因此对于大多数程序员来说主要的工作是使用这些现成的对象去处理他们的程序所要解决的问题。本章的木的正是要告诉你什么是面向对象程序设计然后如何简化它。所有的程序设计语言都提供了抽象。通常你能处理的问题的复杂度的争议是直接与抽象的类型和质量有关。我之于―kind‖的定义是:那些你正在抽象的东西比如说:汇编语言是一种针对于底层机器的小型抽象。很多被称作命令式(―imperative‖)语言如(FORTRANBASIC,或C)是基于汇编语言之上的抽象。这些语言是在汇编语言之上的一个大的提升但是它们的主要抽象依据仍然是汇编语言我们仍然要在考虑如何太原理工大学毕业设计(论文)用纸用程序解决问题的同时考虑程序在计算机结构上的实现。程序员必须建立一个在机器模型(解空间)和问题模型(问题空间)之间的关联。这种努力需要创建一个关联图这其实是程序设计语言本身之外的东西创建程序变得难于书写而且需要花费昂贵的代价用于维护这对于整个程序设计方法工业是一个副作用。我们应该把对机器建模替换为对对我们所要处理的问题进行建模。早期的语言如LISP和APL选择特殊的对世界的视角(―所有的问题都是无限序列‖或者―所有的问题都可以用算法来表达‖)。PROLOG把所有的问题都归类为决策链。语言被创造为基于约束的编程并且有专门用来操作图形对象的编程。(后来增加了更多的限制)。以上这些每一种都是为了达到一个处理特殊种类问题的目的而创建一旦你的问题在其处理范围之外它们将不再有用武之地。面向对象的方法更进了一步通过向提供程序员一些用于表示元素的工具。这种程度的表示形式基本上足够程序员不受约束的处理各种特殊类型的问题。我们引用那些问题空间中的元素和它们的表现形式作为对象(当然你仍然可以使用不在问题空间中有对应元素的对象)。这种概念允许程序去适应它自己方言通过增加新类型的对象所以当你在读一段关于描述问题的处理方法的代码时你也正在阅读描述问题的语言。这将更灵活而且强有力的语言级抽象甚于之前我们所遇到的。因此OOP允许你在问题中描述问题而不用在解决组中去描述它。什么是应用框架:框架(framework)是可重用的半成品的应用程序可以用来产生专门的定制程序。象人一样软件应用的相似性比不同点要多。它们运行在相似的机器上期望从相同的设备输入信息输出到相同的显示设备并且将数据存储到相同的硬盘设备。开发传统桌面应用的开发人员更习惯于那些可以涵盖应用开发同一性的工具包和开发环境。构架在这些公共基础上的应用框架可以为开发人员提供可以为他们的产品提供可重用服务的基础架构。框架向开发人员提供一系列具有以下特征的骨架组件:(已经知道它们在其它程序上工作得很好(它们随时可以在下一个项目中使用(它们可以被组织的其它团队使用对于框架是典型的构建还是购买命题。如果你自己构建它在你完成时你就会理解它但是在你被融入之前又将花费多长时间呢,如果要购买你必须得克服学习曲线太原理工大学毕业设计(论文)用纸同样在你可以用它进行工作之前又得花多长时间,这里没有所谓正确答案但许多观察者都会同意象Struts这样的框架能提供比从头开始开发更显著的投资回报特别是对于大型项目来说。其它类型的框架:框架的概念不仅用于应用程序也可用于组件。在其它的资料里面我们也介绍了一些可以和Struts一起使用的框架。这些包括Lucene搜索引擎Scaffold工具包Struts验证器以及Tiles标签库。与应用框架一样这些工具也提供了一些半完成的版本可以用在用户的定制组件之中。某些框架被限制于专门的开发环境中。Struts以及本文中涉及的组件却不是这样。你可以在很多环境中来开发Struts:VisualAgeforJava,JBuilder,Eclipse,Emacs,甚至使用Textpad。对于你的工具如果你可以用来开发Java,你就可以用它来开发Struts。使用的技术:使用Struts的应用开发使用了大量的其他基础技术。这些技术并不是专门针对Struts而是所有Javaweb应用都可以使用的。开发者使用Struts之类的框架是为了隐藏在诸如HTTPCGI以及JSP之类技术后面的繁琐的细节。作为一个Struts开发者你并不需要知晓所有的相关知识但是这些基本技术的工作原理可能有助于你针对棘手问题设计出创造性的方案。超文本传输协议(HTTP):当两个国家之间进行调解时外交官们总是遵循一定的正式协议。外交协议主要设计来避免误解以及防止谈判破裂。同样当计算机间需要对话它们也遵循一个正式的协议。这个协议定义数据是如何传输以及它们到达后如何进行解码。Web应用程序就是使用HTTP协议在运行浏览器的计算机和运行的服务器的程序间传输数据。很多服务器应用程序使用HTTP之外的其他协议。他们在计算机之间维护一个持久性的连接。应用服务器可以清楚的知道是谁连接上来而且何时中断连接。因为它们知道每一个连接的状态以及每一个使用它的人。这称之为状态协议。相反HTTP是一个无状态协议。HTTPServer可以接受来自于各种客户的各种请求并提供各种响应即使是这个响应仅仅是说No。没有大量的协商和连接持久性无状态协议可以处理大量的请求。这也是Internet可以扩展到很多计算机的原因。太原理工大学毕业设计(论文)用纸HTTP成为通用标准的原因是其简单性。HTTP请求看起来就像一个平常的文本文档。这使应用程序很容易创建HTTP请求。你甚至可以通过标准的程序如Telnet来手动传递一个HTTP请求。当HTTP响应返回时它也是一个开发者可以直接阅读的平面文本。HTTP请求的第一行包含方法其后是请求的来源地址和HTTP版本。HTTP请求头跟在首行后面可以没有也可以有多个。HTTP头向服务器提供额外的信息。可以包括浏览器的种类和版本可接受的文档类型浏览器的cookies等等。种请求方法中GET和POST是用得最多的。一旦服务器接收到请求它就要产生一个HTTP响应。响应的第一行称为状态行包含了HTTP协议的版本数字型状态以及状态的简短描述。状态行后服务器将返回一个HTTP响应头类似于HTTP请求头。如上所述HTTP并不在请求间保持状态信息。服务器接受请求发出响应并且继续愉快地处理文本请求。因为简单和效率无状态协议不适合于需要跟踪用户状态的动态应用。Cookies和URL重写是两个在请求间跟踪用户状态的方式。cookie是一种特殊的信息包存储于用户的计算机中。URL重写是在页面地址中存储一个特殊的标记Java服务器可以用它来跟踪用户。这两种方法都不是无缝的是用哪一个都意味着在开发时都要进行额外的工作。对其本身来说标准的HTTPweb服务器并不传输动态内容。它主要是使用请求来定位文件资源并在响应中返回此资源。通常这里的文件使用HypertextMarkupLanguage(HTML)WC,HTML格式化以使浏览器可以显示它们。HTML页面通常包含一些到其他页面的超文本连接也可以显示其他一些内容比如图像和视频等等。用户点击连接将产生另一个请求就开始一个新的处理过程。标准web服务器处理静态内容处理得很好但处理动态内容时则需要额外的帮助手段了。定义静态内容直接来自于文本或数据文件比如HTML或者JPEG文件。这些文件可以随时改变但通过浏览器请求时却不能自动改变。相反动态内容是临时产生的典型地它是针对浏览器的个别请求的响应。公共网关接口(CGI):第一个普遍用来产生动态内容的标准是通用网关接口(CommonGatewayInterface(CGI))。CGI使用标准的操作系统特征比如环境变量和标准输入输出在Web服务器间以及和主机系统间创建桥接和网关。其他程序可以看到webserver传递过来的请求并创建一个定制的响应。当web服务器接收到一个对CGI程序的请求时它便运太原理工大学毕业设计(论文)用纸行这个程序并向其提供它请求里面所包含的信息。CGI程序运行并将输出返回给Webserverwebserver则将输出响应给浏览器。CGI定义了一套关于什么信息将作为环境变量传递以及它希望怎样使用标准输入和输出的惯例。与HTTP一样CGI是灵活和易于实现的并且已经有大量现成的CGI程序。CGI的主要缺点是它必须为每个请求运行一个程序。这是一个相对昂贵的处理方法对大容量站点来说每分钟有数千个请求有可能使站点瘫痪。CGI程序的另一个缺点是平台依赖性一个平台上开发的程序不一定在另一个平台上能运行。Javaservlet:Sun公司的JavaServlet平台直接解决了CGI程序的两个主要缺点:首先servlet比常规CGI程序提供更好的性能和资源利用。其次一次编写随处运行的JAVA特性意味着servlet在有JVM的操作系统间是轻便的可移动的。Servlet看起来好像是一个微小的webserver。它接受请求并产生响应。但和常规webserver不同servletAPI是专门设计来帮助Java开发人员创建动态应用的。Servlet本身是要编译成字节码的Java类就像其他Java对象一样。Servlet访问HTTP特定服务的API但它仍然是一个运行于程序之中的Java对象并可以利用所有的Java资产。为了使常规webservers能访问servletservlet被安插在一个容器之中。Servlet容器连接到Web服务器。每servlet都可以声明它可以处理何种样式的URL。当符合所注册样式的请求到达webserver将请求传递给容器容器则调用响应的servlet。但和CGI程序不同并不是针对每个请求都要创建一个新的servlet。一旦容器实例化了一个servlet它就仅为每个新的请求创建一个新的线程。Java线程可比使用CGI程序的服务器处理开销小多了。一旦servlet被创建使用它处理额外的请求仅带来很小的额外开销。Servlet开发人员可以使用init()方法保持对昂贵资源的引用比如到数据库或者EJBHome接口的连接,以便它们可以在不同的请求之间进行共享。获得这些资源要耗费数秒时间这比大多数冲浪者愿意等的时间要长些。Servlet的另一个好处是它是多线程的servlet开发人员必须特别注意确保它们的servlet是线程安全的。学习servlet编程我们推荐JavaServletsbyExample,作者AlanRWilliamsonWilliamson。太原理工大学毕业设计(论文)用纸JavaServerPages:虽然servlets对CGI程序来说前进了一大步但它也不是万能灵药。为了产生响应开发人员不得不使用大量的println语句来生成HTML。比如这样的代码:outprintln("<P>OnelineofHTML<P>")outprintln("<P>AnotherlineofHTML<P>")在产生HTTP响应的Servlet中是很普遍的。也有一些库有助于你产生HTML。随着应用越来越复杂Java开发人员将不再扮演HTML页面设计的角色。同时大多数项目经理更喜欢将团队分成不同的小组。它们喜欢HTML设计人员处理表现层的工作而Java工程师则专注于业务逻辑。单独使用servlet的做法鼓励混合标记和业务逻辑很难区分团队人员的专业工作。为解决这个问题Sun提出了一个将脚本和模板技术结合到一个组件中的服务器页面技术(JavaServerPages)。为创建JSP页面,开发者按创建HTML页面类似的方式创建页面使用相同的HTML语法。为将动态内容引入页面开发人员可以将脚本元素置入页面之中。脚本元素是一些标记封装了可以被JSP识别的逻辑。你可以在JSP页面中很容易的识别出脚本元素他们被封装在一对<和>标记中。为了识别JSP页面文件需要保存为扩展名jsp。当一个客户请求JSP页面时容器将页面翻译成Javaservlet源代码文件并将它编译成Java类文件就象你写的servlet文件一样。在运行时容器也能检测JSP文件和相应的类的最后更新时间。如果JSP文件自上次编译以来被修改了容器将重新翻译和编译JSP文件。项目经理现在可以将表现层分派给HTML开发人员将业务逻辑工作分派给JAVA开发人员。重要的是记住JSP页面事实上是一个servlet。你可以在servlet做的也可以在JSP中做。JavaBean:JavaBean是一种Java类它遵从一定的设计模式使它们易于和其他开发工具和组件一起使用。定义JavaBean是一种JAVA语言写成的可重用组件。要编写JavaBean类必须是具体类和公共类并且具有无参数的构造器(NONARGSCONSTRUCTOR)。JavaBean通过提供符合一致性设计模式的公共访问方法将内部字段暴露称为属性。众所周知属性名称也符合这种模式其他JAVA类可以通过自省机制发现和操作这些太原理工大学毕业设计(论文)用纸JavaBean属性。我们必须做的如下:(编写一个类通过实现doStart()或者doEnd()方法来实现javaxservletjsptagextTagSupport或者javaxservletjsptagextBodyTagSupport接口。这些方法获得一个JspWriter对象你可以用它来输出你需要的HTML内容。(创建一个标签库描述文件(TLD)来将你的新建的类映射到一个标签名称。(在你的Web应用描述符(webxml)中定义你的<taglib>元素。通过在JSP页面的顶部放置下面的语句:<tagliburi="tagsapptldprefix="app">来告诉JSP页面你将使用你自己的标签库。(这个语句导入将在本页中使用的标签库并分配给它一个前缀。关于更多细节请参考JSP标签库技术页面。JavaBean设计模式提供两种类型的方式来访问bean的内部状态:访问器(accessor)用来读JavaBean的状态修改器(mutator)用来改变JavaBean的状态。Mutator通常以小写的set前缀开始后跟属性名。属性名的第一个字母必须大写。返回值通常是void因为mutator仅仅改变属性的值而不返回它们。简单属性的mutator在其方法体中可能只有一个参数该参数可以是各种类型。Mutator也可根据其前缀称为设置器setters。例如对Double类型的属性weight的mutator方法体可能是:publicvoidsetWeight(Doubleweight)相似的设计模式也用于访问器方法的创建。Accessor通常以小写的get为前缀后跟属性名。属性名的第一个字母必须大写。返回值必须匹配相应的修改器方法的参数。简单属性的Accessor在其方法体中不能接受参数。同样访问器accessor也经常称为获取器getter。属性weight的访问器方法体可能是:publicDoublegetWeight()如果访问器返回一个逻辑值这种情况下有个变体模式。不使用小写的get逻辑属性的访问器可以使用小写的is前缀后跟属性名。属性名的首字母必须大写。返回值肯定是逻辑值不管是boolean还是Boolean。逻辑访问器在其方法体中不能接受参数。On属性的逻辑访问器的方法体可能是:publicbooleanisOn()在使用JavaBean时规范的方法体签名扮演了极为重要的角色。其他组件可以使太原理工大学毕业设计(论文)用纸用Java的反射API通过查找前缀为set、is或者get的方法来发现JavaBean的属性。如果一个组件在一个JavaBean中发现一个这样的方法它就知道这个方法可以用来访问或者改变JavaBean的属性。Sun引入JavaBean是为了用于GUI组件但它们已经用在Java开发的各个方面包括Web应用。Sun的工程师在开发JSP标签的扩展类时也被设计来可以和JavaBean一起工作。一个页面的动态数据可以使用一个JavaBean来传递并且JSP标记可以随后使用bean的属性来定制页面的输出。Model:ServletJSP规范的版描述了在一个应用中使用Servlet和JSP的架构。在其后的规范中Model这个叫法消失了但它已经在Javaweb开发人员中非常通用了。根据ModelServlet处理数据存取和导航流JSP处理表现。Model使Java工程师和HTML设计者分别工作于它们所擅长和负责的部分。Model应用的一部分发生改变并不强求其他部分也跟着发生改变。HTML开发人员可以改变程序的外观和感觉并不需要改变后端Servlet的工作方式。Struts框架是基于Model的架构。它提供一个控制器Servlet来处理导航流和一些特殊类来帮助数据访问。随框架也提供一个丰富的标签库以使Struts易于和JSP一起使用。数据持久层及HibernateHibernate是一个数据持久层框架是一种实现对象和关系之间映射(ORMapping)的工具它对JDBC进行了轻量级的对象封装使程序员可以使用对象编程思想来操作数据库。它不仅提供了从Java类到数据表的映射也提供了数据查询和恢复机制。相对于使用JDBC和SQL来操作数据库使用Hibernate能大大的提高实现的效率。Hibernate框架用配置文件的形式来定义Java对象和数据表之间的映射关系同时在更深的层面将数据表之间的关系解释为Java对象之间的继承及包含等关系。通过使用HQL语句将复杂的关系算法用对象的方式描述在很大程度上简化了对数据的查询加快了开发的效率。在Hibernate中有一个简单而直观的API用于对数据库所表示的对象执行查询。要创建或修改这些对象只需在程序中与它们进行交互然后告诉Hibernate保存即可。这样大量封装持久化操作的业务逻辑不再需要编写烦琐的JDBC语句从而使数据持久层得到了极大的简化。用Struts实现MVC架构MVC(ModelViewController)由TrygveReenskaug提出首先被应用在SmallTalk环境中是许多交互和界面系统的构成基础。根据界面设计可变性的需求MVC把交互系统的组成分解成模型、视图、控制器三部分。模型(Model)太原理工大学毕业设计(论文)用纸是软件所处理问题逻辑在独立于外在显示内容和形式情况下的内在抽象封装了问题的核心数据、逻辑和功能的计算关系独立于具体的界面表达和IO操作。视图(View)把表示模型数据及逻辑关系和状态的信息及特定形式展示给用户。它从模型获得显示信息对于相同的信息可以有多个不同的显示形式或视图。控制器(Controller)是处理用户与软件的交互操作的其职责是控制提供模型中任何变化的传播确保用户界面于模型间的对应联系它接受用户的输入将输入反馈给模型进而实现对模型的计算控制是使模型和视图协调工作的部件。通常一个视图对应一个控制器。模型、视图与控制器的分离使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据所有其它依赖于这些数据的视图都应反映到这些变化。因此无论何时发生了何种数据变化控制器都会将变化通知所有的视图导致显示的更新。这实际上是一种模型的变化传播机制。小结:在本文中我们介绍了Struts应用框架。并介绍了一些基本知识关于HTTP,CGI,Javaservlet,JSP,以及JavaBean。我们也说明了Model应用架构以及它如何用来将servlets和JSP在结合在同一个应用之中。现在你已经有关于StrutsWeb应用程序模样的初步印象以后我们将更深入的讨论Struts框架的理论和具体实践

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/111

jsp在线问卷调查系统的分析与实现毕业论文

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利