




已阅读5页,还剩50页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章ECLIPSE开发实例电子会议厅在这一章,我们将通过设计一个实例加强在ECLIPSE中进行WEB开发的训练。通过这个实例的开发,读者可以将前一章学习到的知识再次运用到设计过程中,既是对已学内容的应用,又是掌握WEB开发技巧的好机会。实例的开发将以MVC结构为设计思路,遵循MVC的协作与处理规则,将视图、控制器、模型三者有机地结合起来,形成清晰、明确的层次结构,突出可扩展功能的设计优势。电子会议厅系统对某个班级的事务管理采取了网上发布和讨论的手段,以便征求广大同学对班级事务的建议和意见,从而加强班委工作的有效性。这个系统的实现过程涉及了数据存储、维护、浏览、评论、查询等功能,是一个具有典型WEB特点的管理系统。通过较为完整的开发,读者将掌握基本的分析方法、设计步骤和策略,对其它WEB项目的设计会有极大的帮助。本章内容包括MVC处理模型的结构系统功能描述与分析数据库设计功能的设计与实现51MVC设计模式MVC模式的核心思想是有效地组合“视图”、“模型”和“控制器”,即模型视图控制器(MODELVIEWCONTROLLER),简称MVC。它是20世纪80年代SMALLTALK80出现的一种软件设计模式,现在已经被广泛应用。典型的MVC模式所包含的模块、每个模块的功能以及模块之间的协作关系如图51所示。图51MVC组件的关系和功能模型是整个应用程序的核心,应用程序是围绕模型来建立的。它用来完成应用程序的主要功能,接受由视图发出的请求,并将处理请求的结果返回视图。通常情况下,视图发出的请求通过控制器对象来转发,所以模型的操作对于视图来说是不可见的。这也就意味着模型可以用来封装应用程序的状态和数据状态可以用来控制对模型的调用,而数据是视图中要向客户端展示的内容。视图是用来显示模型内容的组件,是用来显示用户数据并且与用户进行交互的前端。在设计过程中,可以把它形象地理解为页面,如HTML、JSP、XML等。视图只是用来收集用户的数据和显示模型,并且将用户的请求转交给控制器,而不能参与到业务处理流程中。控制器用来对用户的请求做出反应,创建和设定模型,协调模型和视图之间的行为,三者共同为用户服务。MVC模式的出现不仅实现了功能模块和显示模块的分离,同时它还提高了应用系统的可维护性、可扩展性、可移植性和组件的可复用性。MVC的框架结构如图52所示,可以很清楚地看出它的工作流程。图52MVC框架结构在第六章的讲解中,实际上已经运用了MVC的设计模式。63节中运用SERVLETJAVABEAN的设计思想解决了用户登录问题,而这种模式在643小节中得到了更加充分地运用。在实训六的实验项目中,还要求为数据库连接再编写一个BEAN文件,使得这项工作做得更加细致。从下面的章节开始,我们将以MVC模式为设计框架,继续开发新的WEB项目。52系统分析521任务描述为某个班级创建一个“电子会议厅”,实现对班级事务的管理和讨论,加强班级事务管理的有效性。按照使用者的身份将用户划分为两类管理员和普通用户;按照功能划分,涉及到的开发工作有信息发布、信息维护(包括修改和删除)、信息浏览、信息评论和信息查询。鉴于讲解和实践相结合的考虑,我们把用户的工作划分留到实训中,由读者自己完成。为了实现各种功能,在这里我们用管理员的身份进行操作。按照类别,我们将班级事务分成4部分学习竞赛、文体活动、社会事务和各类补助,每一块都要实现发布、维护、浏览、评论和查询功能。其中对事务评论的操作不在页面中单另设计选择项,而是将此功能放在浏览中完成。当用户浏览到某条信息时,可以看见其他同学的评论,自己也可以随时发表评论。功能结构设计如图53所示。图53“电子会议厅”实现的功能结构522功能分析根据要实现的功能要求,将它们集中设计在同一个视图中,如图54所示。根据视图页面呈现的效果可以看出这样的操作用户是管理员的身份。如果以普通同学的身份登录进来,则没有信息发布和信息维护功能。在这里,我们强调了功能的实现,而弱化了系统安全的概念。图54项目运行主界面功能模块说明班级事务发布系统提供的后台维护模块,由管理员进行信息的发布。班级事务维护由管理员对已经发布了的信息进行修改或删除,为了操作的方便性,将这两个功能做到了一起,从后面的设计中可以看到。班级事务浏览是本系统一个很重要的模块,为班级成员参与班级事务管理提供了平台。用户可以通过它查看到信息的细节。班级事务评论在界面上看不到它的提示,但是随着用户对事务的浏览,在显示每条信息的内容时,便可以看到评论功能的提示了。用户可以通过该功能发表对班级事务的看法,提出建议和意见。班级事务查询用户输入信息标题中的关键字,就可以将符合条件的所有班级事务显示出来,供用户浏览或评论。53数据库设计在系统开发之初,首先要明确用户需求,确定系统要实现的功能;接下来就要根据功能要求,分析数据来源和处理过程,最后规划出合理的数据库系统。由于数据库处于系统实现过程的最底层,所以它的稳定性是保证顺利开发的前提。通过数据分析,要制定出合理的表结构、表关系,使得功能实现即顺利又符合数据库设计原则。我们将通过以下两个步骤完成数据库的设计数据库需求分析分析本系统所需的数据库实体,并设计数据库实体之间的关系,给出ER图;数据库逻辑结构设计详细描述数据库表的基本结构。531数据库需求分析对数据库做细致地需求分析、准确理解和把握数据关系,对于软件的成功至关重要。由于本系统简化了用户需求,是一个功能较为简单的管理系统,所以数据关系、数据库设计都较为简单。一些细致的功能要求将在实训环节中给出,请读者结合自己的使用经验,再参考其它成型的应用模式,完成实训中的题目要求。在数据库需求分析阶段,需要查阅相关说明书,分析系统中出现的名词和术语,如事务、事务类别、发布、评论等。对这些信息的掌握有助于进行模块划分和功能实现,这里直接给出分析后得到的数据信息。班级事务信息包括事务号、事务标题、事务内容、发布时间、所属的事务类别号;事务类别信息包括事务类别号、事务类别名称;事务评论信息包括评论号、事务号、评论内容、评论时间、评论者。通过这样的规划,实际上就形成了系统的整体概念模型。如果以实体的概念加以描述,即得到了3个实体对象,再通过分析它们的关系,得到如图55所示的实体关系图。图55数据库的ER模型图从表中可以看出三个实体之间的关系如下RELATIONSHIP_1确定SORT实体与AFFAIR实体之间是一对多的关系,即一个事务类别中有多条事务信息,而每条事务信息只能从属于某个类别;RELATIONSHIP_2确定AFFAIR实体与COMMENT实体之间是一对多的关系,即一条事务信息可以对应多个评论,而每个评论只能从属于一条事务信息。532数据库逻辑结构设计根据已经得到的ER模型图,现在来进行数据库的结构设计,即生成数据库的物理模型。以3个实体为基础,需要设计3张数据表,分别是SORT表存储关于事务类别的信息;AFFAIR表存储具体的班级事务信息;COMMENT表存储关于事务信息的评论。这个系统只需要上述的3张表就够了。SORT表存储班级事务类别信息,包括类别号、类别内容,其表结构如表51所示。表51SORT事务类型表序号字段描述类型和长度其它默认值1SORTID事务类别号INT主键、非空无2NAME事务类别名称VARCHAR20无AFFAIR表存储具体的班级事务信息,包括事务号、事务标题、事务内容、发布时间、所属的事务类别号,其表结构如表52所示。表52AFFAIR事务表序号字段描述类型和长度其它默认值1AFFAIRID事务号INT主键、非空无2TITLE事务标题VARCHAR50无3CONTENT事务内容VARCHAR300无4FBTIME发布时间DATAEIME无5SORTID事务类别号INT无COMMENT表存储对班级事务的评论信息,包括评论号、评论内容、评论时间、评论者、所评论的事务号,其表结构如表53所示。表53COMMENT评论表序号字段描述类型和长度其它默认值1COMMENTID评论号INT主键、非空无2CONTENT评论内容VARCHAR300无3PLTIME评论时间DATETIME无4AUTHOR评论者VARCHAR20无5AFFAIRID事务号INT无完成了对数据库表的初步设计后,接下来要在MYSQL中完成具体的创建工作。创建数据库和表可以在NAVICAT前台操作环境中按照它提供的向导做,也可以让它执行SQL脚本。如图56所示,打开“创建查询”窗口,输入SQL脚本代码后,点击“运行”,得到创建结果。图56执行SQL脚本下面给出对应的SQL脚本代码。创建数据库CLASS_AFFAIR1CREATEDATABASECLASS_AFFAIR2USECLASS_AFFAIR创建事务分类表SORT1DROPTABLEIFEXISTSSORT2CREATETABLESORTSORTIDINT4NOTNULL,NAMEVARCHAR20,PRIMARYKEYSORTIDENGINEINNODBDEFAULTCHARSETGB2312创建事务信息表AFFAIR1DROPTABLEIFEXISTSAFFAIR2CREATETABLEAFFAIRAFFAIRIDINT4NOTNULL,TITLEVARCHAR50,CONTENTVARCHAR300,FBTIMEDATETIME,SORTIDINT4,PRIMARYKEYAFFAIRIDENGINEINNODBDEFAULTCHARSETGB2312创建事务评论表COMMENT1DROPTABLEIFEXISTSCOMMENT2CREATETABLECOMMENTCOMMENTIDINT4NOTNULL,CONTENTVARCHAR300,PLTIMEDATETIME,AUTHORVARCHAR20,AFFAIRIDINT4,PRIMARYKEYCOMMENTIDENGINEINNODBDEFAULTCHARSETGB2312执行脚本后,建立了数据库和相应的表,三个表结构如图57所示。图57创建成功后的表结构温馨提示图58查看数据表中字符集选项图59修改MYINI中的编码格式在创建表结构的脚本中,有“ENGINEINNODBDEFAULTCHARSETGB2312”语句,目的是解决数据库中的中文问题,使得数据库中的字符集是“GB2312”类型,这可以在图58中看到结果。最好把MYSQL安装目录下的“MYINI”配置文件中的默认编码格式修改为相同的类型,如图59所示。54框架结构设计在MVC结构的实现过程中,要划分各个子模块,明确每个模块实现的细节,再按照既定的处理模式编写程序代码。根据第6章的经验,要设计每个模块的视图、控制及模型部分,在衔接处根据配置文件、BEAN的引用形式等要素,完成逻辑控制和处理。本节将对“电子会议厅”系统作层次结构上的分析。541框架结构分析常用的WEB三层框架解决方案把系统分成MODEL模型层、VIEW视图层和CONTROL控制层,其中MODEL层只关注数据的存储;VIEW层只关注内容的显示;CONTROL层作为协调者,调度视图和模型,实现业务流程。视图层采用JSP页面表示数据,SERVLET构成控制层的主要素,而模型层在MVC中的身份和应用比较抽象,需要深刻理解。下面对模型层做一个剖析。模型层又叫业务逻辑层,负责实现具体的业务逻辑和数据状态管理,可以被划分为数据访问和其他业务处理两部分。在具体操作中如何实现呢只要抓住模型层的这两个功能,设计好既定的处理策略就可以了。数据访问对数据的访问就是对后台数据库表的操作。在处理过程中,对数据表要进行数据存储、查询、更新、删除等操作,在写SQL语句时根据特定操作要有处理依据,如数据在哪里存储、根据什么条件查询、更新或删除哪些数据,这些处理细节要反映在SQL语句中。操作前提是操作数据往往要先被存储在某个数据结构中,被带进处理方法中进行操作。在第6章,我们已经有一种解决方式根据表结构建立数据BEAN,将被处理数据存储到BEAN对象中,传递给处理方法;在处理方法里,根据需要从对象中取出数据参与处理。即把对数据库表的访问,先转换成对数据BEAN的访问。依据这样的思路,在设计项目之初,我们要针对数据表建立标准的数据BEAN,为后面的数据操作提前做好准备。业务处理按照一定的业务处理逻辑,完成对数据BEAN的操作,实现具体的功能要求,并将结果回传到上一层业务逻辑层或控制层。根据这样的要求,按照下面的策略设计针对某个数据表,设计对应的处理BEAN;在BEAN中,结合功能要求,逐步补充和完善各个方法。所以,在设计项目之初,我们最好针对数据表建立这样的操作BEAN,为后面的设计做好准备。根据前期分析和设计,系统的总体框架如图510所示。图510系统总体框架结构完成了结构上的分析,接下来针对功能模块再做细化,制定出MVC的实现要素。系统要实现5个功能事务发布、事务维护、事务浏览、事务评论、事务查询。针对这些功能的选择,至少需要5个SERVLET,同时中间过程也需要其他的SERVLET处理,经过分析和整理,SERVLET的设计及功能如表54所示。表54SERVLET列表序号SERVLET类功能描述1AFFAIRSADD将事务信息添加到数据表中2SORTLIST得到事务类别信息,用于在页面上显示,供用户选择3AFFAIRSMAINTAIN响应主页面上的“班级事务维护”链接,为用户提供维护类别选择4AFFAIRSLISTMAINTAIN得到事务维护功能中某个类别的所有事务信息列表5AFFAIRSMODIFY响应某条事务的“编辑”按钮,调用编辑界面6AFFAIRSUPDATE响应修改页面的“提交修改”功能,使数据在数据表中更新7AFFAIRSDELETE从数据表中删除指定的事务信息,同时调用页面显示结果8AFFAIRSLISTVIEW得到事务浏览功能中某个类别的所有事务信息列表9AFFAIRDETAIL得到要显示的指定事务信息的细节10COMMENTADD将用户评论添加到数据表中,并调用页面显示结果11QUERYTITLE根据用户给出的标题关键字,在数据表中进行搜索,并调用页面显示结果12QUERY获取班级事务所记录的年份数据,同时准备时间段数据13QUERYTIME根据用户选择的时间段,在数据表中进行搜索,并调用页面显示结果经过SERVLET的控制,要得到正确结果必须还要有JAVABEAN的配合。根据模型层的分析,有两类BEAN数据BEAN和处理BEAN。在处理BEAN中要根据对数据表的操作添加合理的方法,以期配合SERVLET的工作。经过分析和整理,JAVABEAN的设计及功能如表55所示。表55JAVABEAN列表序号BEAN类型JAVABEAN类功能描述1AFFAIR与AFFAIR数据表形成映射关系2COMMENT与COMMENT数据表形成映射关系3数据BEANSORT与SORT数据表形成映射关系1AFFAIRHANDLE集合了针对AFFAIR数据表的所有操作方法2COMMENTHANDLE集合了针对COMMENT数据表的所有操作方法3处理BEANSORTHANDLE集合了针对SORT数据表的所有操作方法542WEB项目建立与目录结构设计本节将根据前一小节的分析,开始创建WEB项目,并做前期的设计工作。FOLLOWME请跟着小向导做一做建立名为MEETING_HALL的WEB项目。建立JAVABEAN。在SRC目录下,分别建立TABLEAFFAIR包、TABLECOMMENT包和TABLESORT包。包名明确地表示了针对特定的数据表做关于BEAN的设计。在各自的包中,建立数据BEAN和处理BEAN。其中数据BEAN遵循标准的书写规范,包含所有的表字段数据和一系列的GETXXX方法及SETXXX方法;由于还没有展开具体的设计,所以处理BEAN仅仅是一个没有任何方法的类,具体的方法随着设计的深入慢慢补充。以TABLESORT包为例,包含两个JAVABEAN,代码如下所示数据BEAN代码SORTJAVA1PACKAGETABLESORT2PUBLICCLASSSORT3PRIVATEINTEGERSORTID4PRIVATESTRINGNAME5PUBLICINTEGERGETSORTID6RETURNTHISSORTID78PUBLICVOIDSETSORTIDINTEGERSORTID9THISSORTIDSORTID1011PUBLICSTRINGGETNAME12RETURNTHISNAME1314PUBLICVOIDSETNAMESTRINGNAME15THISNAMENAME1617处理BEAN代码SORTHANDLEJAVA1PACKAGETABLESORT2PUBLICCLASSSORTHANDLE3其它两个包中的BEAN请读者自己创建,只需注意属性的类型与数据表中的字段类型保持一致即可。设计数据库操作类。在系统设计中,时刻要和数据库连接并进行数据操作。如果在实现方法中每次都要做这样的工作势必会增加设计工作量,并造成代码“冗余”。基于这样的情况,设计一个类,专门用于数据库连接,形成连接对象,只要在需要的地方通过这个类得到该连接对象即可。由于这个操作是公共的,所以将这个数据库连接BEAN放在单独的数据包中,如DATABASE。设计的类代码如下数据库连接BEANDATABASEFACTORYJAVA1PACKAGEDATABASE2IMPORTJAVASQLCONNECTION3IMPORTJAVASQLDRIVERMANAGER4PUBLICCLASSDATABASEFACTORY5PUBLICSTATICCONNECTIONGETCONNECTION6CONNECTIONCONNULL7TRY8CLASSFORNAME“COMMYSQLJDBCDRIVER“NEWINSTANCE9STRINGURL“JDBCMYSQL/LOCALHOST3306/CLASS_AFFAIR“10CONDRIVERMANAGERGETCONNECTIONURL,“ROOT“,“11CATCHEXCEPTIONE12SYSTEMOUTPRINTLNEGETMESSAGE1314RETURNCON1516连接方法被定义为STATIC类型,且返回类型为CONNECTION对象,所以在调用这个方法时要注意调用形式和接收变量所属类型的一致性。这部分工作完成以后,目录结构如图511所示。图511建立完JAVABEAN的项目结构图512WEBROOT的项目结构创建主界面,形成JSP文件。根据图54的界面形式,编写相应的JSP代码,使得界面运行无误,以便后面做深入设计。由界面可知,这是一个框架设计,读者可以在网页设计工具中设计好以后复制到项目的WEBROOT目录下,关键代码如下LEFTJSP程序的部分代码1278910班级事务发布11班级事务维护12班级事务浏览13学习竞赛14文体活动15社会事务16各类补助1718班级事务查询1920这部分工作完成以后,WEBROOT的目录结构如图512所示。55功能设计与实现551班级事务发布功能事务发布功能的实现,其本质就是在数据表中添加数据。根据MVC的结构,首先要设计视图部分,以便用户提交数据;在SERVLET中接收用户数据,存储到数据BEAN对象中,调用处理BEAN完成数据在表中的存储;根据存储结果,调用视图进行显示。处理流程如图513所示。图513存储班级事务流程图下面将进行详细设计。5511视图设计用户在录入数据时,要有输入页面,如图514所示。图514事务发布页面在这个页面中有两个问题需要注意在点击了“事务发布”按钮后,应该转向SEVLET去处理,所以在程序的表单提交中,要设置ACTION属性值。假设将这个SERVLET的URL名称设定为AFFAIRSADD,则代码为。下拉列表“栏目”中出现的数据是动态从数据表中获得的。假设在设计前期,已经在数据库的SORT表中录入了一些数据,如图515所示。图515数据表SORT的数据当在主页面点击“班级事务发布”时,就要获得栏目分类数据以便在图514中显示。所以,在AFFAIRS_ADDJSP页面显示之前,应该有一个SERVLET能够获取分类的数据,再调用该视图进行数据显示。即LEFTJSP中的代码补充为班级事务发布这里先假定这个SERVLET的URL名称为SORTLIST,即要获取分类列表,下一小节将讲述如何编写控制器。AFFAIRS_ADDJSP文件的关键代码如下12LISTARRAYLISTREQUESTGETATTRIBUTE“SORTLIST“45班级事务发布67事务标题89栏目10111617181920212223242526从代码第3行可以看出,分类信息以SORTLIST的名称被存储在了内置对象中,并形成LIST表,基类型是SORT类型。通过循环控制(第13第18行),将LIST表中的数据逐一取出,由SORT类对象接收,在下拉列表项的设计中被显示出来。5512控制器设计SORTLISTJAVA的设计这个SERVLET的功能是要得到SORT表中的数据,再传递给AFFAIRS_ADDJSP页面进行类别选择。由于超链的默认方式是GET,所以要编写SERVLET的GOGET方法。SERVLET中DOGET方法的代码如下1PUBLICVOIDDOGETHTTPSERVLETREQUESTREQUEST,HTTPSERVLETRESPONSERESPONSETHROWSSERVLETEXCEPTION,IOEXCEPTION2SORTHANDLEHANDLENEWSORTHANDLE3LISTLISTHANDLEGETSORTS4REQUESTSETATTRIBUTE“SORTLIST“,LIST5REQUESTGETREQUESTDISPATCHER“AFFAIRS_ADDJSP“FORWARDREQUEST,RESPONSE6通过分析,这个SERVLET的操作步骤是创建处理BEAN的对象,并调用其中的GETSORTS方法获得事务类别信息,赋给集合数据对象LIST;将LIST对象以“SORTLIST”的名字存储到REQUEST中,再转发给页面AFFAIRS_ADDJSP进行显示。这里的SORTLIST就与前面AFFAIRS_ADDJSP中的代码相呼应了LISTLISTARRAYLISTREQUESTGETATTRIBUTE“SORTLIST“通过这一层处理,用户就会看到图514的页面。WEBXML文件中关于这个SERVLET的配置如下12OBTAINSORTS3OBTAINSORTS4SORTLIST5ACTIONSORTLIST678SORTLIST9/SORTLIST10将源文件包按照功能划分,把SERVLET放在了ACTION包中,以后的设计也是如此。AFFAIRSADDJAVA的设计这个SERVLET的功能是通过REQUEST对象获取图514中用户提交的数据,再将这些信息存储到数据BEAN对象中,把这个对象作为参数传递到处理BEAN的方法中进行数据存储,根据存储结果调用视图进行显示,即图513的处理流程。SERVLET中DOPOST方法的代码如下1PUBLICVOIDDOPOSTHTTPSERVLETREQUESTREQUEST,HTTPSERVLETRESPONSERESPONSETHROWSSERVLETEXCEPTION,IOEXCEPTION2AFFAIRAFFAIRNEWAFFAIR3AFFAIRHANDLEHANDLENEWAFFAIRHANDLE4INTNUMHANDLERECORDCOUNT5STRINGTITLEREQUESTGETPARAMETER“TITLE“6STRINGCONTENTREQUESTGETPARAMETER“CONTENT“7INTSORTIDINTEGERPARSEINTREQUESTGETPARAMETER“SORT“8AFFAIRSETAFFAIRIDNUM9AFFAIRSETTITLENEWSTRINGTITLEGETBYTES“ISO88591“10AFFAIRSETCONTENTNEWSTRINGCONTENTGETBYTES“ISO88591“11AFFAIRSETFBTIMENEWDATE12AFFAIRSETSORTIDSORTID13IFHANDLESAVEAFFAIR14REQUESTSETATTRIBUTE“RESULT“,“OK,添加记录成功“15ELSE16REQUESTSETATTRIBUTE“RESULT“,“SORRY,添加记录失败“17REQUESTGETREQUESTDISPATCHER“RESULTJSP“FORWARDREQUEST,RESPONSE18这段代码有几点需要说明在往数据表中添加记录时,事务号没有采取自动编号,而是根据当前数据表中记录的数量,采用加1的方式作为下一条记录的事务号,所以调用了处理BEAN中的RECORDCOUNT方法得到记录数。将视图中用户输入的事务标题和内容接进来后,进行了编码处理,使得中文数据有效。通过数据BEAN提供的SETXXX方法,将各个信息存储到了BEAN对象AFFAIR中。将AFFAIR作为参数传递给处理BEAN的SAVA方法,根据返回值进行显示结果的处理。建立了这个SERVLET后,WEBXML文件中关于它的配置如下12AFFAIRSISSUING3AFFAIRSISSUING4AFFAIRSADD5ACTIONAFFAIRSADD678AFFAIRSADD9/AFFAIRSADD105513处理BEAN设计根据前面的分析,程序中涉及到两个处理BEAN的方法设计针对SORT表的处理BEAN(SORTHANDLEJAVA)它要完成SORT表所有数据的提取,供用户在视图中选择事务类别;针对AFFAIR表的处理BEAN(AFFAIRHANDLEJAVA)到目前为止,在这个BEAN中需要完成两项工作一是统计目前数据表中的记录数;一是完成事务信息的存储。根据这两个要求,分别编写各自的方法,代码如下。SORTHANDLEJAVA中的方法GETSORTS方法1PUBLICCLASSSORTHANDLE2CONNECTIONCON3STATEMENTSTMT4RESULTSETRS56PUBLICLISTGETSORTS7LISTLISTNEWARRAYLIST8SORTSORT9TRY10CONDATABASEFACTORYGETCONNECTION11STMTCONCREATESTATEMENT12STRINGSTR“SELECTFROMSORT“13RSSTMTEXECUTEQUERYSTR14WHILERSNEXT15SORTNEWSORT16SORTSETSORTIDRSGETINT“SORTID“17SORTSETNAMERSGETSTRING“NAME“18LISTADDSORT1920CATCHEXCEPTIONE21EPRINTSTACKTRACE22FINALLY23TRY24RSCLOSE25STMTCLOSE26CONCLOSE27CATCHSQLEXCEPTIONE28EPRINTSTACKTRACE293031RETURNLIST32这段代码有以下几点需要说明GETSORTS方法要与数据库连接,取得表SORT中的记录,是通过公共的数据库连接BEAN操作的,即DATABASEFACTORYGETCONNECTION。借助LIST接口存储集合数据,并利用接口回调技术实现了LIST对象的创建。LIST接口的使用需要标明其存储数据的基类型。由于存储的是表中的记录,而一条记录又被映射成SORT类的一个对象,所以LIST将要存储的数据是SORT类的对象,所以出现了“LIST”这样的数据形式,ARRAYLIST的使用亦如此。最终通过循环,将所有的对象依次加入到了LIST表中,形式为LISTADDSORT。在完成对数据表的操作后,关闭用到的操作对象RS、STMT、CON等,并将列表对象返回给SERVLET。AFFAIRHANDLEJAVA中的方法RECORDCOUNT方法1PUBLICINTRECORDCOUNT2INTNUM03TRY4CONDATABASEFACTORYGETCONNECTION5STMTCONCREATESTATEMENT6STRINGSTR“SELECTFROMAFFAIR“7RSSTMTEXECUTEQUERYSTR8WHILERSNEXT9NUM1011CATCHEXCEPTIONE12EPRINTSTACKTRACE13FINALLY14TRY15RSCLOSE16STMTCLOSE17CONCLOSE18CATCHSQLEXCEPTIONE19EPRINTSTACKTRACE202122RETURNNUM23SAVE方法1PUBLICBOOLEANSAVEAFFAIRAFFAIR2BOOLEANBOOFALSE3INTNUMAFFAIRGETAFFAIRID4STRINGTITLEAFFAIRGETTITLE5STRINGCONTENTAFFAIRGETCONTENT6DATEFBTIMEAFFAIRGETFBTIME7INTSORTIDAFFAIRGETSORTID8TRY9CONDATABASEFACTORYGETCONNECTION10STMTCONCREATESTATEMENT11STRINGSTR“INSERTINTOAFFAIRVALUES“12STRNUM“,“TITLE“,“CONTENT“,“FBTIME“,“SORTID“13STMTEXECUTEUPDATESTR14BOOTRUE15CATCHEXCEPTIONE16EPRINTSTACKTRACE17FINALLY18TRY19STMTCLOSE20CONCLOSE21CATCHSQLEXCEPTIONE22EPRINTSTACKTRACE232425RETURNBOO26至此,这一模块的编程工作全部完成,涉及到的所有文件在图516所示的目录结构中看得很清楚。图516目录结构图517添加断点5514运行项目现在跟着小向导做以下工作FOLLOWME请跟着小向导做一做在AFFAIRADDJAVA的DOPOST方法中添加断点(第23行),如图517所示;部署项目,并在MYECLIPSE中启动服务器;在浏览器中运行项目,添加数据,点击“事务发布”按钮,启动调试透视图,如图518所示;点击“单步跳过”,使程序逐条执行,观察各个变量的值是否正确;在执行HANDLESAVEAFFAIR语句时,点击“单步跳入”,进入到AFFAIRHANDLEJAVA的SAVE方法;点击“单步跳过”,使程序逐条执行,观察各个变量的值,在STMTEXECUTEUPDATESTR语句前停下来,这时“变量”视图中显示的情况如图519所示;图518录入事务信息图519调试中的变量情况通过观察,说明数据被正确地带进了SAVE方法。读者可以展开“变量”视图中各变量的结构进行观察。此时形成的SQL语句为(STR的值)INSERTINTOAFFAIRVALUES15,国家困难补助开始评选,评选条件学习成绩在年度综合测评前20名;没有受过任何处分;家庭经济困难,有特困证明的优先考虑。请申请补助的同学写好书面申请交上来;欢迎同学们对困难补助的评选方法提出好的建议,使得评选工作尽量客观、公正。,FRIDEC03093303CST2010,4点击“单步跳过”,执行STMTEXECUTEUPDATESTR语句,发生异常,异常的具体描述为COMMYSQLJDBCMYSQLDATATRUNCATIONDATATRUNCATIONINCORRECTDATETIMEVALUEFRIDEC03093303CST2010FORCOLUMNFBTIMEATROW1如果读者将上面形成的SQL语句放到数据库中去测试,结果也是不正确的,错误的原因是形成的时间格式不符合字段的类型要求。按照DATETIME的要求,应该形成诸如“20101201160345”的时间格式。接下来进行错误处理,用DATEFORMAT类生成需要的时间数据。在AFFAIRSADDJAVA中,加入以下程序语句获取时间,并屏蔽以前设置时间的语句1DATEFORMATDATEFORMATDATEFORMATGETDATETIMEINSTANCE2DATEDATENEWDATE3AFFAIRSETFBTIMEDATEFORMATFORMATDATE4/AFFAIRSETFBTIMENEWDATE由于FORMATDATE方法的返回类型是STRING类型,所以根据错误提示,将AFFAIRJAVA中的FBTIME属性更改为STRING类型,同时修改方法中的类型;修改处理BEAN中SAVE方法的语句,将“DATEFBTIMEAFFAIRGETFBTIME”语句修改为“STRINGFBTIMEAFFAIRGETFBTIME”。重新部署项目,运行视图程序,发布后的结果如图520所示。图520事务发布成功后的页面此时查询数据库中的AFFAIR数据表,记录已经被正确地存储了,结果如图521所示。图521添加记录成功后的数据表温馨提示552班级事务维护功能从操作手段上划分,事务维护功能分为“编辑”和“删除”两种操作。事务编辑对已经“入库”的数据进行各项修改操作,使其满足要求后再次被存储,更新表中的原有数据。根据操作设计,在主界面点击了“班级事务维护”链接后,要出现事务分类列表,以便用户选择对哪种事务进行修改;接下来从某种事务的事务列表中点击将要修改的事务信息的“编辑”链接,以便进入到编辑界面,用户进行修改操作;SERVLET接收用户的修改数据后,存储到数据BEAN对象中,调用处理BEAN完成数据在表中的更新;根据更新结果,调用视图显示结果。处理流程如图522所示。根据事务发布的设计经验,在后面做事务评论时,也存在着将评论存储到数据表中涉及到时间存储的问题。按照上面解决问题的方法,这时请读者将COMMENT类中关于“PLTIME”的属性改为STRING类型,并修改相应方法的类型。图522编辑事务流程图事务删除对已经“入库”的数据进行删除操作。根据操作设计,在主界面点击了“班级事务维护”链接后,要出现事务分类列表,以便用户选择对哪种事务进行修改;接下来从事务列表中点击将要删除的事务信息的“删除”链接,出现询问提示;SERVLET接收了确定信息后,将该条事务信息及与之相关的所有评论一并删除;调用视图显示事务列表,以便进行结果对比。处理流程如图523所示。图523删除事务流程图下面将进行详细设计。5521视图设计事务修改和删除的页面在前期操作中是相同的,只有在具体选择了以后呈现出差别。下面是这两个功能的相同视图部分,如图524所示。图524事务维护页面在这连续出现的视图操作中,有几个问题需要注意在点击了“班级事务维护”按钮后,应该转向SEVLET去处理,以便得到分类信息,在右边的框架中显示出分类列表。所以在LEFTJSP文件中关于“班级事务维护”的超级链接应该补充为班级事务维护。这里将SERVLET的URL名称设定为AFFAIRSMAINTAIN。当AFFAIRSMAINTAIN得到分类信息后,交给SORTS_LISTJSP视图去显示,以便用户先选择维护类别,例如图524中用户选择了“学习竞赛”栏目。SORTS_LISTJSP的关键代码如下12LISTARRAYLISTREQUESTGETATTRIBUTE“SORTLIST“56781213“TARGET“MAINFRAME“1415181920从代码中可以看出,SERVLET将分类信息存储在了SORTLIST变量中,通过循环控制,将LIST表中的数据逐一取出,由SORT类对象接收,在表中的每一列中显示出了分类的名称。在显示名称的同时程序设计了超链接,并且交给一个名为AFFAIRSLISTMAINTAIN的SERVLET,同时将分类号也传了过去,目的是要获得这个分类下的所有事务信息,以便在视图中显示,供用户浏览,如图524中的“学习竞赛”栏目里的3条信息。这个视图对应AFFAIRS_LIST_MAINTAINJSP文件,关键代码如下12LISTARRAYLISTREQUEST5GETATTRIBUTE“AFFAIRLIST“678910事务编号11事务标题12发布时间13编辑14删除15162223242526“编辑277INTEGERSORTIDAFFAIRGETSORTID8STRINGSORTNAMESORTLISTGETSORTID1GETNAME910班级事务修改更新11“STYLE“12事务标题13“14栏目1516“171823“24272829303132如果点击“删除”按钮,会出现图526所示的视图图526删除指定事务从图中可以看出,将要删除第一条记录。这个操作将由SERVLET完成,只是在这个步骤之后,应该再次显示图524中的事务列表信息,以便加强对比,看到删除数据后的效果,如图527所示。图527删除后的视图显示这个页面的设计就是前面讲过的AFFAIRS_LIST_MAINTAINJSP文件,在后面的控制器设计中可以看到对它的调用。在做这个功能时,为了更好地测试程序设计思路,在COMMENT表中应该事先输入一些评论数据。从图526可以看出,要删除第一条数据,那么对这条信息的所有评论都将删除,所以在COMMENT表中先录入若干条针对这条事务的评论,由于评论的删除是根据AFFAIRID值操作的,需要正确录入这个字段值。5522控制器设计AFFAIRSMAINTAINJAVA的设计这个SERVLET的功能是要得到SORT表中的数据,再传递给SORTS_LISTJSP页面进行类别显示。SERVLET中GOGET方法的代码如下1PUBLICVOIDDOGETHTTPSERVLETREQUESTREQUEST,HTTPSERVLETRESPONSERESPONSETHROWSSERVLETEXCEPTION,IOEXCEPTION2SORTHANDLEHANDLENEWSORTHANDLE3LISTLISTHANDLEGETSORTS4REQUESTSETATTRIBUTE“SORTLIST“,LIST5REQUESTGETREQUESTDISPATCHER“SORTS_LISTJSP“FORWARDREQUEST,RESPONSE6通过这一层处理,用户就会看到图524中上半部分的页面。请注意上面第4行代码与SORTS_LISTJSP文件中的第4行代码的对应关系。AFFAIRSLISTMAINTAINJAVA的设计这个SERVLET的功能是当用户点击了某一个事务类别后,根据视图传递过来的类别号SORTID,再调用处理BEAN中的相应方法,得到所有隶属于这个类别号的事务信息,并调用视图进行显示,即图524中的列表结果。SERVLET中的DOGET方法的代码如下1PUBLICVOIDDOGETHTTPSERVLETREQUESTREQUEST,HTTPSERVLETRESPONSERESPONSETHROWSSERVLETEXCEPTION,IOEXCEPTION2INTEGERSORTIDINTEGERVALUEOFREQUESTGETPARAMETER“SORTID“3SORTHANDLESORTHANDLENEWSORTHANDLE4SORTSORTSORTHANDLEGETSORTINFORSORTID5STRINGSORTNAMESORTGETNAME6AFFAIRHANDLEAFFAIRHANDLENEWAFFAIRHANDLE7LISTLISTAFFAIRHANDLEAFFAIRSLISTSORTID8REQUESTSETATTRIBUTE“AFFAIRLIST“,LIST9REQUESTSETATTRIBUTE“SORTNAME“,SORTNAME10REQUESTGETREQUESTDISPATCHER“AFFAIRS_LIST_MAINTAINJSP“FORWARDREQUEST,RESPONSE11这段代码有几点需要说明由于在视图中要明确地显示出分类名称,所以第4行代码根据SORTID号,调用针对SORT表的处理BEAN中的GETSORTINFOR方法,得到一个SORT类对象,并取出它的NAME属性,存储到内置对象中。根据SORTID号,程序在第7行调用针对AFFAIR表的处理BEAN中的AFFAIRSLIST方法,得到隶属于这个类别的所有事务信息,并存储到内置对象中。AFFAIRSMODIFYJAVA的设计当用户点击“编辑”链接时,由这个SERVLET接收视图传递过来的参数AFFAIRID,根据这个AFFAIRID号调用处理BEAN中的方法得到这条事务的全部信息,交给视图去显示。SERVLET中的DOGET方法的代码如下1PUBLICVOIDDOGETHTTPSERVLETREQUESTREQUEST,HTTPSERVLETRESPONSERESPONSETHROWSSERVLETEXCEPTION,IOEXCEPTION2INTEGERAFFAIRIDINTEGERVALUEOFREQUESTGETPARAMETER“AFFAIRID“3AFFAIRHANDLEAFFAIRHANDLENEWAFFAIRHANDLE4AFFAIRAFFAIRAFFAIRHANDLEGETAFFAIRAFFAIRID5REQUESTSETATTRIBUTE“AFFAIR“,AFFAIR6SORTHANDLESORTHANDLENEWSORTHANDLE7LISTLISTSORTHANDLEGETSORTS8REQUESTSETATTRIBUTE“SORTLIST“,LIST9REQUESTGETREQUESTDISPATCHER“AFFAIR_MODIFYJSP“FORWARDREQUEST,RESPONSE10代码说明第4行代码根据AFFAIRID号,调用处理BEAN中的GETAFFAIR方法,得到了指定的事务信息,形成一个AFFAIR类的对象被存储到内置对象中。第7行代码调用GETSORTS方法,得到事务类别列表,为视图显示列表信息做好了准备。AFFAIRSUPDATEJAVA的设计当用户修改完事务信息,点击“提交修改”按钮后,表单的ACTION参数会指向这个SERVLET,并将AFFAIRID参数也传递过来ACTION“AFFAIRSUPDATEAFFAIRID“此时的工作与事务发布的工作几乎相同,所以下面的代码用省略号代替,表示准备数据对象AFFAIR,用于后台存储1PUBLICVOIDDOPOSTHTTPSERVLETREQUESTREQUEST,HTTPSERVLETRESPONSERESPONSETHROWSSERVLETEXCEPTION,IOEXCEPTION2INTEGERAFFAIRIDINTEGERVALUEOFREQU
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 星级服务员培训与管理制度
- 杭州培训机构消防管理制度
- 民办培训机构资金管理制度
- 法律规定小区养犬管理制度
- 渔政管理机构设备管理制度
- 燃气公司员工规章管理制度
- 物业蚊虫消杀设备管理制度
- 生产车间公司6s管理制度
- 电解车间自动化设备管理制度
- 社区小型自动化设备管理制度
- 义务教育历史课程标准(2022年版)
- 消防行业特有工种职业技能鉴定申报登记表参考模板范本
- 石油化工工艺管道安装施工方案【实用文档】doc
- 第4章 带传动设计 (1)课件
- 人教版七年级下册英语单词辨音训练题(一)
- 公共政策的经济学分析课件
- 新世纪健康饮食课件
- 上海市2013年基准地价更新成果
- 道德与法治四年级(下)第二单元单元备课
- 苏州市吴江区2021-2022苏教版五年级数学下册期末试卷真题
- “363生态课堂”模式及流程
评论
0/150
提交评论