tarena讲师考评系统_第1页
tarena讲师考评系统_第2页
tarena讲师考评系统_第3页
tarena讲师考评系统_第4页
tarena讲师考评系统_第5页
已阅读5页,还剩81页未读 继续免费阅读

下载本文档

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

文档简介

摘要考评是当今教学管理的核心问题,现以成为教学管理的重要组成部分。随着教学管理的科学发展,学生对讲师进行点评,讲师对自己在教学过程中的了解,以及领导对讲师的考核,这些互动要求迫切需要一个能够真实反应学生对老师意见的考评系统。本考评系统建立在以实绩为内容、综合评分为基础、现代计算技术为手段的基础上,解决了当前考评管理中无法按实绩、无法综合评价和计量考评工作量大、不易操作等难题。在ECLIPSE开发环境下,采用了JSP、STRUTS、SPRING技术,以HIBERNATE连接,访问MYSQL数据库。功能实现方面具体分为调查管理,调查搜索,统计报表,修改密码,退出系统,管理员管理,项目经理管理,班主任管理,讲师管理,班级管理,课程管理,登录管理。该系统界面美观、操作简单、使用方便。关键词考评系统,ECLIPSE,JSP,STRUTS,SPRING,MYSQLABSTRACTEVALUATIONOFMANAGEMENTISTHECOREISSUEOFTEACHING,TEACHINGMANAGEMENTISTOBECOMEANIMPORTANTPARTWITHTHEDEVELOPMENTOFTHESCIENTIFICMANAGEMENTOFTEACHING,STUDENTSOFTHELECTURERSFORCOMMENTS,ALECTURERINTHETEACHINGOFTHEIROWNINTHEPROCESSOFUNDERSTANDING,ANDLEADINGLECTURERONTHEASSESSMENT,THESEINTERACTIONSCANREQUESTANURGENTNEEDFORAREALRESPONSETOTHEVIEWSOFSTUDENTSTOTEACHEREVALUATIONSYSTEMTHEEVALUATIONSYSTEMINORDERTOESTABLISHPERFORMANCEASTHECONTENT,THECOMPOSITESCOREISBASEDONMODERNTECHNOLOGYASAMEANSONTHEBASISOFRESOLVINGTHECURRENTEVALUATIONBYTHEMANAGEMENTOFPERFORMANCECANNOT,CANNOTBECOMPREHENSIVEEVALUATIONANDMEASUREMENTOFTHEHKEAAHEAVYWORKLOADANDDIFFICULTTOOPERATE,ANDOTHERPROBLEMSINTHEECLIPSEDEVELOPMENTENVIRONMENT,USINGTHEJSP,STRUTS,SPRING,HIBERNATECONNECTEDTOTHEVISITMYSQLDATABASEFEATURESINVESTIGATIONSINTOSPECIFICASPECTSOFMANAGEMENT,THESURVEYSEARCH,STATISTICS,MODIFYYOURPASSWORD,WITHDRAWFROMTHESYSTEM,THEADMINISTRATORMANAGEMENT,PROJECTMANAGER,TEACHERMANAGEMENT,LECTURERSMANAGEMENT,CLASSMANAGEMENT,CURRICULUMMANAGEMENT,LOGMANAGEMENTTHESYSTEMINTERFACEBEAUTIFUL,SIMPLE,EASYTOUSEKEYWORDSEVALUATIONSYSTEM,ECLIPSE,JSP,STRUTS,SPRING,MYSQL目录1绪论42开发环境及开发工具的介绍521ECLIPSE和MYECLIPSE简介522JSP概述7221JSP工作原理7222JSP的特点823STRUTS概述9231STRUCT工作原理11232STRUTS的特点1224HIBERNATE概述14241HIBERNATE的工作原理15242HIBERNATE的特点1625SPRING概述17251SPRING的工作原理18252SPRING的特点193MYSQL数据库编程2031MYSQL简介2032MYSQL数据库管理员指南214TARENA讲师考评系统需求分析2341系统设计思想2342系统流程2443TARENA讲师考评系统要求2544TARENA讲师考评系统角色及其功能分析2545TARENA讲师考评系统的数据分析305TARENA讲师考评系统的详细设计3451TARENAY讲师考评系统的数据库设计3452TARENA讲师考评系统模块的划分3853TARENA讲师考评系统主要模块的具体实现38531开始调查功能39532调查搜索功能47533MANAGER管理之统计报表功能53534角色修改密码功能58535角色退出系统功能5954TARENA讲师考评系统的测试60总结与体会61致谢62参考文献63附录一英文资料原文64附录二英文资料译文801绪论21世纪初期,既是我国经济快速、健康发展的重要时期,也是我国高等教育以及企业培训快速、健康发展的关键时期,高等学校与企业必须与时俱进,更新观念,创新制度,深化改革,努力提高人才培养质量,这不仅是新时期经济社会发展的客观要求,更是高等学校与企业改革和发展的必然选择。而由此引起的一系列问题值得我们思考怎么去管理讲师怎么去评价讲师的工作可以采用哪些有效的激励办法和因素怎么建立起讲师的绩效考核办法和激励办法这迫切需要着一个高效合理的考评系统。于是依据对达内培训公司的了解,我们选择了TARENA讲师考评系统作为毕业设计课题。通过考评系统的实现,可以真实的反应各学生对讲师的要求和意见,也能让讲师清晰的了解自己在教学过程中存在的一些问题和同学对自己的真实感受。考评系统给学生,讲师们提供了一个互动的平台,对教学工作有着很强的促进作用。2开发环境及开发工具的介绍21ECLIPSE和MYECLIPSE简介1概述ECLIPSE是个集成开发环境(INTEGRATEDDEVELOPMENTENVIRONMENT),其前身是IBM的VISUALAGEFORJAVAVA4J。ECLIPSE是可扩展的体系结构,可以集成不同软件开发供应商开发的产品,将他们开发的工具和组件加入到ECLIPSE平台中。随着JAVA应用的广泛,各大主要软件供应商都参与到ECLIPSE架构开发中,使得ECLIPSE插件数量与日增加。其中,IBM的WEBSPHERESTUDIOWORKBENCH是突出的例子。ECLIPSE平台的免费,架构的成熟,行业协会ECLIPSE基金会的支持,使得很多的JAVA开发采用了ECLIPSE架构。2ECLIPSE的结构和内核插件(PLUGIN)是遵循一定规范的应用程序结构编写出来的程序,也成为扩展,不同于组件。ECLIPSE正是一个精心设计的、可扩展的核心结构。通过插件的形式,将根据自己需要选择的扩展开发工具集成到ECLIPSE平台核心。因此使得可以避免因过去不兼容工具带来的麻烦,降低开发出成本,大幅度提高工作效率。ECLIPSE本身作为一个开放源码的软件项目,它主要包含3个子项目平台子项目,JAVA开发工具JDTJAVA子项目,插件开发环境PDEPLUGIN子项目。其中,JAVA开发工具JDT为开发人员提供大量的集成工具集,主要为JAVA应用程序提供编程接口API。ECLIPSE软件开发工具箱SDK是主要有ECLIPSE本身的项目软件和其他一些开发源吗的第三方软件组成。次者,插件开发环境JDT则为插件开发和测试提供相应的环境,如创建插件清单文件、定义扩展点等。其他的JAVA集成开发环境有JBUILDER、WEBSPHERSTUDIO、NETBEANS。然而ECLIPSE以其强大的可扩展性和开放性脱颖而出,拥有为数众多的支持者,也被许多大的企业所青睐。3ECLIPSE和MYECLIPSE的结合MYECLIPSE是一个商业的J2EE开发插件,建立在ECLIPSE的基础上,支持HTML,CSS,JS,JSP,SERVLET,JAVA,J2EE,EJB,WEBSERVICES等等,它的功能非常之强大,和ECLIPSE结合十分完美。如果安装了MYECLIPSE建议不要再用其他的插件,因为它已经包括开发需要的,不过很消耗内存的。也可以采用ECLIPSELOMBOZ,也基本能满足需要。MYECLIPSE支持STRUTS,LOMBOZ也支持,只是功能没有MYECLIPSE强大,MYECLIPSE是收费的,LOMBOZ是免费的。在MYECLIPSE里面还可以建立与数据库的连接和查询操作,而且还自带了WEB浏览器,比如你在编写一些基本SERVLET时,不用打开IE新窗口了,直接在ECLIPSE里用WEB浏览器就可以看到。ECLIPSE是一个集成的进行JAVA开发的IDE开发环境,并且是开源的,MYECLIPSE是一种插件,为J2EE开发提供一种高级编程环境,可以轻松的完成STRUTS,HIBERNATE,SPRING布局,编写STRTUSCONFIGXML。ECLIPSE是一个IDE(INTEGRATEDDEVELOPINGENVIRONMENT),而这个IDE是允许安装第三方开发的插件来使自身的功能得到扩展和增强的,而MYECLIPSE就是其中的一种有名的插件集之一,MYECLIPSE将开发者常用到的一些有用的插件都集合起来,但它是收费的。MYECLIPSE为ECLIPSE提供了一个大量私有和开源的JAVA工具的集合,这解决了各种开源工具的不一致和缺点。NITROX是一个繁杂而强大的加速JAVAWEB应用开发的工具,还包含了一个强大且能够编译所有JSP和STRUTSWEB应用的工具APPXRAY。这些工具解析JAVA和XML配置文件MYECLIPSE的实际价值来自包含的发布包中的大量的工具。如CCS/JS/HTML/XML的编辑器,帮助创建EJB和STRUTS项目的向导并产生项目的所有主要的组件如ACTION/SESSIONBEAN/FORM等。还包含编辑HIBERNATE配置文件和执行SQL语句的工具。22JSP概述JSP(JAVASERVERPAGES)是由SUN公司在JAVA语言上开发出来的一种动态网页制作技术,其可以将网页中的动态部分和静态的HTML相分离。可以按照平常的方式来书写HTML语句。然后,将动态部分用特殊的标记嵌入即可,这些标记常常以“”开始并以“”结束。例如,这儿有一个JSP页面HTMLHEADTITLEJSP教程/TITLE/HEADBODYIOUTPRINTLN“HELLOWORLD”/I/BODY/HTML它将输出“HELLOWORLD”。通常,要将文件以“JSP”为扩展名,并将它放置到任何可以放置普通WEB页面的路径下。尽管JSP文件看起来更象是HTML文件而不是SERVLET文件,但,事实上,它恰恰将转换为SERVLET文件,其中的静态HTML仅仅用来输出SERVLET服务方法返回的信息。如果JSPPAGES已经被转换为SERVLET且SERVLET被编译进而被装载(在第一次被REQUEST时),当您再次REQUEST此JSP页面时,将察觉不到一瞬的延迟。也请留意这个现象,一些WEBSERVERS允许您为它定义别名,从而,好象一个URL是指向一个HTML,但事实上它指向的是一个SERVLET或JSPPAGES构造一个JSPPAGE,除了可内嵌的规则的HTML,还有三类主要的JSP元素SCRIPTINGELEMENTS,DIRECTIVES,和ACTIONS使用SCRIPTINGELEMENTS您可以定义最终转换为SERVLET的部分,DIRECTIVES使您可以控制这个SERVLET的整体结构,而ACTIONS使您可以指定可重用的已有组件,另外,还可控制JSP引擎的运行。为了简化SCRIPTINGELEMENTS,您可以在某一段上利用一些预定义的变量,如REQUEST。221JSP工作原理在一个JSP文件第一次被请求时,JSP引擎把该JSP文件转换成为一个SERVLET。而这个引擎本身也是一个SERVLET,在JSWDK或WEBLOGIC中,它就是JSPSERVLET。JSP引擎先把该JSP文件转换成一个JAVA源文件,在转换时如果发现JSP文件有任何语法错误,转换过程将中断,并向服务端和客户端输出出错信息;如果转换成功,JSP引擎用JAVAC把该JAVA源文件编译成相应的CLASS文件。然后创建一个该SERVLET的实例,该SERVLET的JSPINIT方法被执行,JSPINIT方法在SERVLET的生命周期中只被执行一次。然后JSPSERVICE方法被调用来处理客户端的请求。对每一个请求,JSP引擎创建一个新的线程来处理该请求。如果有多个客户端同时请求该JSP文件,则JSP引擎会创建多个线程。每个客户端请求对应一个线程。以多线程方式执行可大大降低对系统的资源需求,提高系统的并发量及响应时间但应该注意多线程的编程限制,由于该SERVLET始终驻于内存,所以响应是非常快的。如果JSP文件被修改了,服务器将根据设置决定是否对该文件重新编译,如果需要重新编译,则将编译结果取代内存中的SERVLET,并继续上述处理过程。虽然JSP效率很高,但在第一次调用时由于需要转换和编译而有一些轻微的延迟。此外,如果在任何时候如果由于系统资源不足的原因,JSP引擎将以某种不确定的方式将SERVLET从内存中移去。当这种情况发生时JSPDESTROY方法首先被调用,然后SERVLET实例便被标记加入“垃圾收集“处理。JSPINIT及JSPDESTORY格式如下可在JSPINIT中进行一些初始化工作,如建立与数据库的连接,或建立网络连接,从配置文件中取一些参数等,在JSPDESTORY中释放相应的资源。222JSP的特点1将内容的生成和显示进行分离使用JSP技术,WEB页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面。使用JSP标识或者小脚本来生成页面上的动态内容。生成内容的逻辑被封装在标识和JAVABEANS组件中,并且捆绑在小脚本中,所有的脚本在服务器端运行。如果核心逻辑被封装在标识和BEANS中,那么其他人,如WEB管理人员和页面设计者,能够编辑和使用JSP页面,而不影响内容的生成。在服务器端,JSP引擎解释JSP标识和小脚本,生成所请求的内容(例如,通过访问JAVABEANS组件,使用JDBCTM技术访问数据库,或者包含文件),并且将结果以HTML(或者XML)页面的形式发送回浏览器。这有助于作者保护自己的代码,而又保证任何基于HTML的WEB浏览器的完全可用性。2强调可重用的组件绝大多数JSP页面依赖于可重用的,跨平台的组件(JAVABEANS或者ENTERPRISEJAVABEANSTM组件)来执行应用程序所要求的更为复杂的处理。开发人员能够共享和交换执行普通操作的组件,或者使得这些组件为更多的使用者或者客户团体所使用。基于组件的方法加速了总体开发过程,并且使得各种组织在他们现有的技能和优化结果的开发努力中得到平衡。3采用标识简化页面开发WEB页面开发人员不会都是熟悉脚本语言的编程人员。JAVASERVERPAGE技术封装了许多功能,这些功能是在易用的、与JSP相关的XML标识中进行动态内容生成所需要的。标准的JSP标识能够访问和实例化JAVABEANS组件,设置或者检索组件属性,下载APPLET,以及执行用其他方法更难于编码和耗时的功能。通过开发定制化标识库,JSP技术是可以扩展的。今后,第三方开发人员和其他人员可以为常用功能创建自己的标识库。这使得WEB页面开发人员能够使用熟悉的工具和如同标识一样的执行特定功能的构件来工作。JSP技术很容易整合到多种应用体系结构中,以利用现存的工具和技巧,并且扩展到能够支持企业级的分布式应用。作为采用JAVA技术家族的一部分,以及JAVA2(企业版体系结构)的一个组成部分,JSP技术能够支持高度复杂的基于WEB的应用。由于JSP页面的内置脚本语言是基于JAVA编程语言的,而且所有的JSP页面都被编译成为JAVASERVLET,JSP页面就具有JAVA技术的所有好处,包括健壮的存储管理和安全性。23STRUTS概述1、MODEL2STRUTS是基于MODEL2之上的,而MODEL2是经典的MVC(模型视图控制器)模型的WEB应用变体,这个改变主要是由于网络应用的特性HTTP协议的无状态性引起的。MODEL2的目的和MVC一样,也是利用控制器来分离模型和视图,达到一种层间松散耦合的效果,提高系统灵活性、复用性和可维护性。在多数情况下,你可以将MODEL2与MVC等同起来。下图表示一个基于JAVA技术的典型网络应用,从中可以看出MODEL2中的各个部分是如何对应于JAVA中各种现有技术的。在利用MODEL2之前,我们是把所有的表示逻辑和业务逻辑都集中在一起(比如大杂烩似的JSP),有时也称这种应用模式为MODEL1,MODEL1的主要缺点就是紧耦合,复用性差以及维护成本高。2、STRUTS11和MODEL2既然STRUTS11是基于MODEL2之上,那它的底层机制也就是MVC,首先,控制器(ACTIONSERVLET)进行初始化工作,读取配置文件(STRUTSCONFIGXML),为不同的STRUTS模块初始化相应的MODULECONFIG对象。比如配置文件中的ACTION映射定义都保存在ACTIONCONFIG集合中。相应地有CONTROLCONFIG集合、FORMBEANCONFIG集合、FORWARDCONFIG集合和MESSAGERESOURCESCONFIG集合等。提示模块是在STRUTS11中新提出的概念,在稍后的内容中我们将详细介绍,你现在可以简单地把模块看作是一个子系统,它们共同组成整个应用,同时又各自独立。STRUTS11中所有的处理都是在特定模块环境中进行的。模块的提出主要是为了解决STRUTS10中单配置文件的问题。控制器接收HTTP请求,并从ACTIONCONFIG中找出对应于该请求的ACTION子类,如果没有对应的ACTION,控制器直接将请求转发给JSP或者静态页面。否则控制器将请求分发至具体ACTION类进行处理。在控制器调用具体ACTION的EXECUTE方法之前,ACTIONFORM对象将利用HTTP请求中的参数来填充自己(可选步骤,需要在配置文件中指定)。具体的ACTIONFORM对象应该是ACTIONFORM的子类对象,它其实就是一个JAVABEAN。此外,还可以在ACTIONFORM类中调用VALIDATE方法来检查请求参数的合法性,并且可以返回一个包含所有错误信息的ACTIONERRORS对象。如果执行成功,ACTIONFORM自动将这些参数信息以JAVABEAN(一般称之为FORMBEAN)的方式保存在SERVLETCONTEXT中,这样它们就可以被其它ACTION对象或者JSP调用。STRUTS将这些ACTIONFORM的配置信息都放在FORMBEANCONFIG集合中,通过它们STRUTS能够知道针对某个客户请求是否需要创建相应的ACTIONFORM实例。ACTION很简单,一般只包含一个EXECUTE方法,它负责执行相应的业务逻辑,如果需要,它也进行相应的数据检查。执行完成之后,返回一个ACTIONFORWARD对象,控制器通过该ACTIONFORWARD对象来进行转发工作。我们主张将获取数据和执行业务逻辑的功能放到具体的JAVABEAN当中,而ACTION只负责完成与控制有关的功能。遵循该原则,所以在上图中我将ACTION对象归为控制器部分。提示其实在STRUTS11中,ACTIONMAPPING的作用完全可以由ACTIONCONFIG来替代,只不过由于它是公共API的一部分以及兼容性的问题得以保留。ACTIONMAPPING通过继承ACTIONCONFIG来获得与其一致的功能,你可以等同地看待它们。同理,其它例如ACTIONFORWARD与FORWARDCONFIG的关系也是如此。下图给出了客户端从发出请求到获得响应整个过程的图解说明。下面我们就来详细地讨论一下其中的每个部分,在这之前,先来了解一下模块的概念。3、模块我们知道,在STRUTS10中,我们只能在WEBXML中为ACTIONSERVLET指定一个配置文件,但是在实际的应用开发过程中,可能会有些麻烦。因为许多开发人员都可能同时需要修改配置文件,但是配置文件只能同时被一个人修改,这样肯定会造成一定程度上的资源争夺,势必会影响开发效率和引起开发人员的抱怨。在STRUTS11中,为了解决这个并行开发的问题,提出了两种解决方案1多个配置文件的支持2模块的支持一个模块就是一个独立的子系统,你可以在其中进行任意所需的配置,同时又不必担心和其它的配置文件产生冲突。因为前面我们讲过,ACTIONSERVLET是将不同的模块信息保存在不同的MODULECONFIG对象中的。231STRUCT工作原理一个请求在STRUTS2框架中的处理大概分为以下几个步骤1客户端初始化一个指向SERVLET容器(例如TOMCAT)的请求2这个请求经过一系列的过滤器(FILTER)(这些过滤器中有一个叫做ACTIONCONTEXTCLEANUP的可选过滤器,这个过滤器对于STRUTS2和其他框架的集成很有帮助,例如SITEMESHPLUGIN)3接着FILTERDISPATCHER被调用,FILTERDISPATCHER询问ACTIONMAPPER来决定这个请是否需要调用某个ACTION4如果ACTIONMAPPER决定需要调用某个ACTION,FILTERDISPATCHER把请求的处理交给ACTIONPROXY5ACTIONPROXY通过CONFIGURATIONMANAGER询问框架的配置文件,找到需要调用的ACTION类6ACTIONPROXY创建一个ACTIONINVOCATION的实例。7ACTIONINVOCATION实例使用命名模式来调用,在调用ACTION的过程前后,涉及到相关拦截器(INTERCEPTER)的调用。8一旦ACTION执行完毕,ACTIONINVOCATION负责根据STRUTSXML中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个ACTION链)一个需要被表示的JSP或者FREEMARKER的模版。在表示的过程中可以使用STRUTS2框架中继承的标签。在这个过程中需要涉及到ACTIONMAPPER在上述过程中所有的对象(ACTION,RESULTS,INTERCEPTORS,等)都是通过OBJECTFACTORY来创建的。232STRUTS的特点1中心控制2处理流程和业务逻辑相分离3表示逻辑和业务逻辑相分离4数据和表示逻辑相分离5丰富的标签库6支持显示模板7内建对国际化的支持8内建对数据校验的支持如下的类图分析ACTIONSERVLET类STRUTS的控制器是将事件(事件通常是HTTPPOST)映射到类的一个SERVLET。正如您所料控制器使用配置文件以使您不必对这些值进行硬编码。ACTIONSERVLET是该MVC实现的COMMAND部分,它是这一框架的核心。在一个WEB应用中,应用服务器启动时将加载控制器。ACTIONSERVLETCOMMAND创建并使用ACTION、ACTIONFORM和ACTIONFORWARD。如前所述,STRUTSCONFIGXML文件配置该COMMAND。在创建WEB项目时,您将扩展ACTION和ACTIONFORM来解决特定的问题。文件STRUTSCONFIGXML指示ACTIONSERVLET如何使用这些扩展的类。这种方法有几个优点应用程序的整个逻辑流程都存储在一个分层的文本文件中。这使得人们更容易查看和理解它,尤其是对于大型应用程序而言。网页设计人员不必费力地阅读JAVA代码来理解应用程序的流程。JAVA开发人员也不必在更改流程以后重新编译代码。可以通过扩展ACTIONSERVLET来添加COMMAND功能。ACTIONFORM类ACTIONFORM维护WEB应用程序的会话状态。ACTIONFORM是一个抽象类,必须为每个输入表单模型创建该类的子类。输入表单模型是指ACTIONFORM所表示的,由HTML表单设置或更新的一般意义上的数据。例如,您可能有一个由HTML表单设置的USERACTIONFORM。STRUTS框架将执行以下操作检查USERACTIONFORM是否存在;如果不存在,它将创建该类的一个实例。STRUTS将使用HTTPSERVLETREQUEST中相应的域设置USERACTIONFORM的状态。没有太多讨厌的REQUESTGETPARAMETER调用。例如,STRUTS框架将从请求流中提取FNAME,并调用USERACTIONFORMSETFNAME。STRUTS框架在将USERACTIONFORM传递给业务包装USERACTION之前将更新它的状态。在将它传递给ACTION类之前,STRUTS还会对USERACTIONFORM调用VALIDATION方法进行表单状态验证。注这并不总是明智之举。别的网页或业务可能使用USERACTIONFORM,在这些地方,验证可能有所不同。在USERACTION类中进行状态验证可能更好。可在会话级维护USERACTIONFORM。注STRUTSCONFIGXML文件控制HTML表单请求与ACTIONFORM之间的映射关系。可将多个请求映射到USERACTIONFORM。USERACTIONFORM可跨多页进行映射,以执行诸如向导之类的操作。ACTION类ACTION类是业务逻辑的一个包装。ACTION类的用途是将HTTPSERVLETREQUEST转换为业务逻辑。要使用ACTION,请创建它的子类并覆盖PROCESS方法。ACTIONSERVLETCOMMAND使用PERFORM方法将参数化的类传递给ACTIONFORM。仍然没有太多讨厌的REQUESTGETPARAMETER调用。当事件进展到这一步时,输入表单数据(或HTML表单数据)已被从请求流中提取出来并转移到ACTIONFORM类中。注扩展ACTION类时请注意简洁。ACTION类应该控制应用程序的流程,而不应该控制应用程序的逻辑。通过将业务逻辑放在单独的包或EJB中,我们就可以提供更大的灵活性和可重用性。考虑ACTION类的另一种方式是ADAPTER设计模式。ACTION的用途是“将类的接口转换为客户机所需的另一个接口。ADAPTER使类能够协同工作,如果没有ADAPTER,则这些类会因为不兼容的接口而无法协同工作。”(摘自GOF所著的DESIGNPATTERNSELEMENTSOFREUSABLEOOSOFTWARE)。本例中的客户机是ACTIONSERVLET,它对我们的具体业务类接口一无所知。因此,STRUTS提供了它能够理解的一个业务接口,即ACTION。通过扩展ACTION,我们使得我们的业务接口与STRUTS业务接口保持兼容。(一个有趣的发现是,ACTION是类而不是接口)。ACTION开始为一个接口,后来却变成了一个类。真是金无足赤。)ERROR类UML图还包括ACTIONERROR和ACTIONERRORS。ACTIONERROR封装了单个错误消息。ACTIONERRORS是ACTIONERROR类的容器,VIEW可以使用标记访问这些类。ACTIONERROR是STRUTS保持错误列表的方式。以上是STRUTS基本结构的类图分析,在STRUTS中,还有一组重要的类,即动作映射类。如下图所示ACTIONMAPPING类输入事件通常是在HTTP请求表单中发生的,SERVLET容器将HTTP请求转换为HTTPSERVLETREQUEST。控制器查看输入事件并将请求分派给某个ACTION类。STRUTSCONFIGXML确定CONTROLLER调用哪个ACTION类。STRUTSCONFIGXML配置信息被转换为一组ACTIONMAPPING,而后者又被放入ACTIONMAPPINGS容器中。(您可能尚未注意到这一点,以S结尾的类就是容器)ACTIONMAPPING包含有关特定事件如何映射到特定ACTION的信息。ACTIONSERVLETCOMMAND通过PERFORM方法将ACTIONMAPPING传递给ACTION类。这样就使ACTION可访问用于控制流程的信息。ACTIONMAPPINGSACTIONMAPPINGS是ACTIONMAPPING对象的一个集合。24HIBERNATE概述LWHATISHIBERNATEHIBERNATE是用于简化数据库操作的第三方开源工具它实现ORMOBJECTRELATIONALMAPPING,对象关系映射,在具体的操作业务对象时,就不需要和复杂的SQL语句打交道,只要像平时操作对象一样2WHYUSEHIBERNATE如果不使用HIBERNATE的话,那么就会出现很多重复的代码,EG在DAO中,假设存在CREATEUSER,UPDATEUSER,REMOVEUSER方法,则在每个方法里,我们都需要使用JDBC连接数据库,我们需要重复装载类,使用连接字符串、用户名、密码来连接数据库的工作,很繁琐使用HIBERNATE可以解决这个问题3HIBERNATE5个核心接口的类关系图241HIBERNATE的工作原理HIBERNATE技术本质上是一个提供数据库服务的中间件。它的架构如图1所示图1图1显示了HIBERNATE的工作原理,它是利用数据库以及其他一些配置文件如HIBERNATEPROPERTIES,XMLMAPPING等来为应用程序提供数据持久化服务的。HIBERNATE具有很大的灵活性,但同时它的体系结构比较复杂,提供了好几种不同的运行方式。在轻型体系中,应用程序提供JDBC连接,并且自行管理事务,这种方式使用了HIBERNATE的一个最小子集;在全面解决体系中,对于应用程序来说,所有底层的JDBC/JTAAPI都被抽象了,HIBERNATE会替你照管所有的细节,整个流程如下242HIBERNATE的特点一、HIBERNATE是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,和APPSERVER,和EJB没有什么必然的联系。HIBERNATE可以用在任何JDBC可以使用的场合,例如JAVA应用程序的数据库访问代码,DAO接口的实现类,甚至可以是BMP里面的访问数据库的代码。从这个意义上来说,HIBERNATE和EB不是一个范畴的东西,也不存在非此即彼的关系。二、HIBERNATE是一个和JDBC密切关联的框架,所以HIBERNATE的兼容性和JDBC驱动,和数据库都有一定的关系,但是和使用它的JAVA程序,和APPSERVER没有任何关系,也不存在兼容性问题。三、HIBERNATE不能用来直接和ENTITYBEAN做对比,只有放在整个J2EE项目的框架中才能比较。并且即使是放在软件整体框架中来看,HIBERNATE也是做为JDBC的替代者出现的,而不是ENTITYBEAN的替代者出现的,框架结构传统的架构1SESSIONBEANENTITYBEANDB为了解决性能障碍的替代架构2SESSIONBEANDAOJDBCDB使用HIBERNATE来提高上面架构的开发效率的架构3SESSIONBEANDAOHIBERNATEDB就上面3个架构来分析1、内存消耗采用JDBC的架构2无疑是最省内存的,HIBERNATE的架构3次之,EB的架构1最差。2、运行效率如果JDBC的代码写的非常优化,那么JDBC架构运行效率最高,但是实际项目中,这一点几乎做不到,这需要程序员非常精通JDBC,运用BATCH语句,调整PREAPREDSTATEMENT的BATCHSIZE和FETCHSIZE等参数,以及在必要的情况下采用结果集CACHE等等。而一般情况下程序员是做不到这一点的。因此HIBERNATE架构表现出最快的运行效率。EB的架构效率会差的很远。3、开发效率在有JBUILDER的支持下以及简单的项目,EB架构开发效率最高,JDBC次之,HIBERNATE最差。但是在大的项目,特别是持久层关系映射很复杂的情况下,HIBERNATE效率高的惊人,JDBC次之,而EB架构很可能会失败。4、分布式,安全检查,集群,负载均衡的支持25SPRING概述SPRING是指一个用于构造JAVA应用程序的轻量级框架,不限定于只编写WEB应用。它的核心是个轻量级(LIGHTWEIGHT)的容器(CONTAINER),它是实现IOC(INVERSIONOFCONTROL)容器、非侵入性(NOINTRUSIVE)的框架,并提供AOP(ASPECTORIENTEDPROGRAMMING)概念的实现方式,提供对持久层(PERSISTENCE)、事务(TRANSACTION)的支持,提供MVCWEB框架的实现,并对一些常用的企业服务API(APPLICATIONINTERFACE)提供一致的模型封装,是一个全方位的应用程序框架(APPLICATIONFRAMEWORK),除此之外,对于现存的各种框架(STRUTS、JSF、HIBERNATE等),SPRING也提供了与它们相整合的方案。本质上讲,SPRING是IOCINVERSIONOFCONTROL和面向切面编程AOP的组合体。它是一个非侵入式的框架,增强了POJO的功能。从服务上讲WITHASERVICEABSTRACTION,它将程序代码从J2EE环境解耦到普通的JAVA对象(自然,这些代码可以脱离J2EE而在多种环境中运行)。它还在很多功能上提供了除EJB之外的选择比如为所有的POJO提供声明式事务。SPRING被广泛运用到很多项目中,从小的WEB程序到大的企业应用程序。251SPRING的工作原理IOC容器INTERFACE21公司推出的SPRING开发框架(以下简称SPRING)经过开放源代码社区和众多项目的应用和实际检验,历经多个版本的发展,已经成长为使用开源技术开发J2EE应用的事实标准。SPRING运用“控制反转(以下缩写为IOC)”和“面向方面编程”(以下缩写为AOP)的理念,在正规的设计模式和一整套最佳实践的支持下,为普通JAVA对象提供了包括轻量级IOC容器、AOP支持、声明式事务、对象关系模型映射、J2EE集成工具、WEB开发框架集成工具和基本的MVC实现等7个主要方面的特性和服务。IOC的概念最早来自于2004年MARTINFOWLER提出的一种组件装配模式,其核心观点是将组件的配置与使用分开1。SPRING的IOC容器提供这样一种功能为那些组成应用程序的主体和其他需要由容器管理的对象(称为BEAN)提供实例化、定位、配置支持,并通过容器核心接口ORGSPRINGFRAMWORKBEANSFACTORYBEANFACTORY的多个实现的支持,描述并建立并管理这些对象之间的依赖关系。最常见的方式是通过XML配置元数据来对容器管理的BEAN进行定义,通过SETTER注入和构造器注入两种主要的依赖注入方式实现BEAN之间的依赖管理,从而实现高层次的松耦合。SPRING20版本为元数据的XML配置方式提供基于XMLSCHEMA的“自定义标签”功能,即通过第三方命名空间将自定义BEAN的配置引入IOC容器的元数据配置,在应用程序开发中更好的融合SPRING的IOC功能。动态语言支持动态类型语言的优点在于方便阅读,不需要写非常多的类型相关的代码,但是不方便调试,命名不规范时往往难于理解;而静态类型语言则具有结构非常规范,便于调试,方便类型安全等优点,缺点是为此需要写更多的类型相关代码,导致不便于阅读。诸如JAVASCRIPT,RUBY等动态语言具有动态类型、解释执行等优点,并且在多个领域中具有独特的优势,在JAVA语言中提供对动态语言的支持,其初衷来自于使用动态语言访问JAVA平台中的信息,并且可以在JAVA平台的应用服务器中运行动态语言编写的页面。此需求后来形成名为JSR223的请求正式提交至JAVA社区,目前已经形成以JAVAXSCRIPT命名的一套编程接口,并且JAVA社区为多种不同动态语言提供了该接口的参考实现,其中对JAVASCRIPT的支持目前直接包含在JDK6的正式版本中。结合SPRING提供的XML元数据配置的可扩展性,从对SCRIPTBEANDEFINITIONPARSER类的代码分析可以看出,IOC容器通过如下步骤注册动态语言实现的BEAN对象在IOC容器中创建一个SCRIPTFACTORYPOSTPROCESSOR类型的对象实例作为基础设施获取注入依赖能力;获取脚本代码片断;为SCRIPTFACTORY实例配置基本属性;包括刷新脚本资源的时间间隔、指定构造方法等等;解析元数据配置中注入的属性。通过如上步骤,IOC中采用动态语言支持的BEAN定义就与其他JAVA语言构造的BEAN定义没有本质区别了。SPRING的优点在于可以通过注入依赖的方式,使用动态语言编写BEAN实现,和其他JAVA对象毫无差别的轻易获取SPRING提供的各项特性支持。包括在BEAN的一个生命周期内修改其实现逻辑、简化实现步骤、减少代码规模等等。252SPRING的特点1控制反转IOCINVERSEOFCONTROL,依赖注入DIDEPENDENCEINJECTION。注释由容器控制程序之间的关系,而非传统实现中,有程序代码直接操控。控制权有应用代码中转到了外部容器,控制权的转移,是所谓反转。注入类型接口注入,设置注入,构造子注入。而SPRING则是IOC的一个容器。在SPRING中,所谓依赖注入,即在运行期由容器将依赖关系注入到组件之中。讲的通俗点,就是在运行期,由SPRING根据配置文件,将其他对象的引用通过组件的提供的SETTER方法进行设定。2SPRINGBEAN封装机制SPRING从核心而言,是一个DI容器,其设计哲学是提供一种无侵入式的高扩展性框架。即无需代码中涉及SPRING专有类,即可将其纳入SPRING容器进行管理。作为对比,EJB则是一种高度侵入性的框架规范,它制定了众多的接口和编码规范,要求实现者必须遵从。侵入性的后果就是,一旦系统基于侵入性框架设计开发,那么之后任何脱离这个框架的企图都将付出极大的代价。为了避免这种情况,实现无侵入性的目标。SPRING大量引入了JAVA的REFLECTION机制,通过动态调用的方式避免硬编码方式的约束,并在此基础上建立了其核心组件BEANFACTORY,以此作为其依赖注入机制的实现基础。ORGSPRINGFRAMEWORKBEANS包中包括了这些核心组件的实现类,核心中的核心为BEANWRAPPER和BEANFACTORY类。这两个类从技术角度而言并不复杂,但对于SPRING框架而言,却是关键所在。SPRING的好处1,SPRING能有效地组织你的中间层对象;2,SPRING能消除在许多工程中常见的对SINGLETON的过多使用;3,通过一种在不同应用程序和项目间一致的方法来处理配置文件,消除各种自定义格式的属性文件的需要,仅仅需要看看类的JAVABEAN属性。INVERSIONOFCONTROL的使用帮助完成了这种简化;(使用的是TYPE2的IOC)4,能够很容易培养你面向接口而不是面向类的编程习惯。5,SPRING的设计会让使用它创建的应用尽可能少的依赖于它的APIS,在SPRING应用中的大多数业务对象没有依赖于SPRING。6,使用SPRING构建的应用程序易于单元测试;7,SPRING使EJB成为一个实现选择,而不是必需的选择。你可以用POJOS或LOCALEJBS来实现业务接口,却不会影响到调用代码。8,SPRING提供一些WEB应用上的EJB的替代方案,比如用AOP提供声明性事务管理;9,SPRING为数据存取提供了一个一致的框架,不论是使用JDBC还是O/RMAPPING的产品(HIBERNATE,JDO)。3MYSQL数据库编程31MYSQL简介1、数据类型支持大量数据类型。通常的整数、浮点数、字符串和数字均以多种长度表示,并支持变长的BLOB(BINARYLARGEOBJECT)类型。对整数字段由自动增量选项,日期时间字段也能很好的表示。MYSQL与大多数其他数据库系统不同的是提供两个相对不常用的字段类型ENUM和SET。ENUM是一个枚举类型,非常类适于PASCAL语言的枚举类型,它允许程序员看到类似于RED、GREEN、BLUE的字段值,而MYSQL只将这些值存储为一个字节。SET也是从PASCAL借用的,它也是一个枚举类型,但一个单独字段一次可存储多个值,这种存储多个枚举值的能力也许不会给你一些印象(并可能威胁第三范式定义),但正确使用SET和CONTAINS关键字可以省去很多表连接,能获得很好的性能提高。2、SQL兼容性MYSQL包含一些与SQL标准不同的转变,他们的大多数被设计成是对SQL语言脚本语言的不足的一种补偿。然而,另一些扩展确实使MYSQL与众不同,例如,LINK子句搜索是自动地忽略大小写的。MYSQL也允许用户自定义的SQL函数,换句话说,一个程序员可以编写一个函数然后集成到MYSQL中,并且其表现的与任何基本函数如SUM或AVG没有什么不同。函数必须被编译道一个共享库文件中SO文件,然后用一个LOADFUNCTION命令装载。它也缺乏一些常用的SQL功能,没有子选择在查询中的查询。视图VIEW也没了。当然大多数子查询可以用简单的连接JOIN子句重写,但有时用两个嵌套的查询思考问题比一个大连接容易。同样,视图仅仅为程序员隐蔽WHERE子句,但这正是程序员们期望的另一种便利。3、存储过程和触发器MYSQL没有一种存储过程STOREDPROCEDURE语言,这是对习惯于企业级数据库的程序员的最大限制。多语句SQL命令必须通过客户方代码来协调,这种情形是借助于相当健全的查询语言和赋予客户端锁定和解锁表的能力,这样才允许的多语句运行。4、参考完整性(REFERENTIALINTEGRITYRI)MYSQL的主要的缺陷之一是缺乏标准的RI机制;然而,MYSQL的创造者也不是对其用户的愿望置若罔闻,并且提供了一些解决办法。其中之一是支持唯一索引。RULE限制的缺乏在给钉字段域上的一种固定的范围限制通过大量的数据类型来补偿。不简单地提供检查约束一个字段相对于同一行的另一个字段的之值的限制、外部关键字和经常与RI相关的“级联删除”功能。有趣的是,当不支持这些功能时,SQL分析器容忍这些语句的句法。这样做目的是易于移植数据库到MYSQL中。这是一个很好的尝试,并且它确实未来支持该功能留下方便之门;然而,那些没有仔细阅读文档的的人可能误以为这些功能实际上是存在的。5、安全性自始至终我对MYSQL最大的抱怨是其安全系统,它唯一的缺点是复杂而非标准,另外只有到调用MYSQLADMIN来重读用户权限时才发生改变。通常的SQLGRANT/REVOKE语句到最近的版本才被支持,但是至少他们现在有了。MYSQL的编写者广泛地记载了其特定的安全性系统,但是它确实需要一条可能是别无它法的学习过程。6、备份和恢复、数据导入/导出强制参考一致性的缺乏显著地简化备份和恢复,单靠数据导入/导出就可完美复制这一功能。LOADDATAINF

温馨提示

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

评论

0/150

提交评论