javaweb 电子相册 报告poa.docx
河北科技技大学信息科学学与工程程学院实 训 报告学生姓名名:王 伟 学 号:008L0070552199专业班级级:软 件件 工 程 L0082 实训地点点:信息楼楼A3003 实训时间间: 20111.112.55 -220122.011.133 指导教师师:张 晓晓 明 20122 年 1 月实训成绩绩评定表表学生姓名名王伟学号08L0070552199成绩专业班级级软件L0082起止时间间20111.122.055-20012.01.13实训地点点信息楼AA3033指导教师评语指导教师师: 年 月 日日目录一、实训训目的44二、实训训任务与与要求44三、实训训过程与与内容441、需求求分析441.1总总体需求求41.2功能能需求51.3 系统用用例图552、Jaava Webb 应用用程序工工程制作作流程662.1开开发环境境搭建662.2 系统设设计63、实现现过程993.1 JDBBC连接接数据库库93.2 创建数数据库的的连接993.3创创建一个个Staatemmentt103.4 执行SQQL语句句103.5JJavaaBeaan与DAOO模式1113.6文文件上传传114、关键键问题与与实现结结果122四、实训训总结与与心得体体会133五、参考考文献114一、实训训目的本实训课课程是在在学生具具备了JJavaa 程序序设计知知识与面面向对象象技术的的基础上上,为进进一步提提高项目目实践能能力、开开拓创新新能力而而设置的的实践性性环节课课程。目目的掌握握使用JJSP应应用程序序设计的的基本技技能,熟熟练使用用MyEcclippse进进行Weeb应用用程序的的编写、调调试,详详细说明明Javva WWeb软软件项目目的整个个开发过过程,在在项目开开发过程程中逐步步熟悉知知识点,掌掌握Jaava B/SS结构程程序的运运行原理理和应用用技能,最最后完成成一个完完整的软软件开发发项目二、实训训任务与与要求掌握Jaava集集成开发发环境(IIDE)EEcliipsee的使用用和调试试方法,利用JJSP+Serrvleet+JJavaaBeaan实现现Webb应用开开发,掌握分分层体系系结构开开发的技技巧,完成教教师指定定的开发发任务,本本实训课课程是围围绕一个个完整的的Javva项目目而展开开的,虽虽然每部部分内容容相对独独立,但但通过几几次迭代代开发后后,最后后形成一一个完整整的软件件系统。任任务:通通过实训训课程结结合实际际案例独独立完成成webb电子相相册前台台、后台台的设计计制作,并并编码实实现。三、实训训过程与与内容1、需求求分析1.1总总体需求求该设计系系统要具具有实用用性,功功能完善善,界面面良好。设设计该系系统的流流程如图图1所示示。功能需要流程设计计: 程序序设计:开始程序初始化页面设计条件数据库设计代码操作代码设计图1 程序序设计流流程图1.2功功能需求求本系统应应该具有有登录验验证、修修改密码码、创建建相册、浏浏览相片片、上传传相片、删删除相册册或相片片、发表表留言等等功能,详详见图22。电子相册系统退出登录添加评论删除相册相片添加图片查看图片创建相册修改密码登录验证图2 电子相相册系统统功能结结构图1.3 系统用用例图1.3.1 用用户用例例普通用户户登录系系统后,可可以点击击缩略图图的图片片名称或或者图片片进而浏浏览大图图,并在在此基础础上为此此大图添添加评论论,同样样,用户户也可以以在查看看大图的的同时,查查看其他他用户对对该图片片的评论论,如图图3所示示图3.普普通用户户用例图图1.3.2 管管理员用用例管理员需需要验证证登录密密码登录录后台,当当然可以以修改管管理员密密码,然然后,管管理员可可以创建建、删除除、修改改图片分分类,进进而可以以在每个个分类目目录下上上传自己己喜欢的的图片,其其中,管管理员还还有权删删除游客客对所上上传照片片的负面面评论,如如图4 所示。图4管理理员用例例图2、Jaava Webb 应用用程序工工程制作作流程2.1开开发环境境搭建在MyEEcliipsee中配置置好Toomcaat服务务器,配配置好MMySQQL数据据库在MMyEcclippse中中利用jjdbcc驱动访访问MyySQLL数据库库,利用用MyEEcliipsee部署WWeb应应用程序序,在MMySQQL创建建用户表表。MyySQLL的数据据库编码码设置为为UTFF-8,这这样有利利于Weeb项目目开发时时,中文文编码的的一致性性。MyyEcllipsse中TTomccat服服务器的的设置时时,要将将JVMM设置为为本机的的JDKK安装路路径,而而非JRRE的路路径,使使用naaviccatee liite创创建用户户表。2.2 系统设设计该项目页页面设计计上,采采用了“障眼法法”,在用用户点击击导航栏栏上的相相应链接接时,页页面会跳跳转到各各个相应应模块,但但是用户户感觉只只是其中中一部分分变化而而已,实实则不然然,在页页面布局局设计上上,应用用jspp 的iinclludee功能,预预先做出出页面头头,导航航,以及及尾部的的jspp文件,并并inccludde进所所有的jjsp文文件,在在用户点点击导航航条时,其其实各个个页面的的头,导导航,尾尾部也被被该页面面内inncluude的的头,导导航,尾尾部所替替代,只只是在用用户感官官上没有有差异而而已。2.2.1 登登录验证证登录页面面是电子子相册的的首页,这这是对浏浏览该电电子相册册的用户户的筛选选一个步步骤,用用户只有有提供正正确的密密码才能能进入相相册主页页进行其其他操作作。流程描述述在URLL栏里输输入htttp:/llocaalhoost/ephhotoo/looginn.httml便便可进入入“登录页页面”,如果果在密码码框内输输入密码码,系统统会把其其与之前前给密码码赋的值值进行比比对,相相匹配则则登录成成功,跳跳转至相相册主页页;否则则返回登登录页面面。流程程、代码码及运行行结果详详见图55、图66、图77所示。输入正确输入密码进入相册主页YESNO登录页面开始登录登录结束图 5 登登录验证证图图 6 验证登登录用户户名密码码代码图 7 电子相相册登录录页面2.2.2 相相册主页页相册主页页是用户户展示相相片的页页面,对对该系统统的相册册和相片片一览无无余。同同时它也也是电子子相册的的“导航”,可以以链接到到上传照照片、创创建相册册、修改改密码、发发表留言言、返回回主页、退退出登录录等功能能。在“登录录页面”输入正正确的密密码后方方可进入入“相册主主页”,如图88所示。用用户可直直接或用用打开相相册的方方式浏览览主页上上的照片片和相册册里的照照片,如如图9所所示。点点击主页页左方的的各种链链接可以以进入相相应的操操作,进进入其他他功能界界面。图8 管管理员进进入相册册主页图 9 用户(游游客)进进入相册册主页2.2.3 修修改密码码用户可以以根据自自己的需需要来修修改自己己的登录录密码。通过“相相册主页页”左侧的的链接点点击“修改密密码”进入到到“修改密密码页面面”,根据据提示输输入修改改后的密密码,选选择提交交,则显显示“密码修修改成功功!”。修改改密码完完成后,可可选择界界面上方方的“返回主主页”和“退出登登录”执行相相关的操操作。操操作代码码及运行行结果如如图100、图111所示示。图10 管理员员修改密密码代码码图11 修改密密码页面面2.2.4创建建相册用户可以以根据自自己的需需要来创创建新的的相册,把把照片分分类。通过“相相册主页页”左侧的的链接点点击“创建相相册”进入到到“创建目目录页面面”,根据据提示输输入新创创建的相相册名称称,选择择创建,则则新建相相册成功功,转到到新建的的相册里里。创建建相册完完成后,可可选择界界面上方方的“返回主主页”和“退出登登录”执行相相关的操操作。操操作代码码及运行行结果如如图122、图113所示示。图12 添加分分类 代代码图13添添加分类类页面2.2.5 上上传照片片用户可以以根据自自己的需需要上传传照片。通过“相相册主页页”左侧的的链接点点击“上传照照片”进入到到“上传照照片页面面”,根据据提示输输入选择择上传方方式。如如果从本本地上传传,选择择“浏览”在本地地打开一一张照片片,点击击“上传”则上传传照片成成功,否否则提示示“上传文文件出错错”。上传传照片完完成后,返返回到相相册主页页或某相相册。如如果使用用URLL方式上上传,输输入网址址选择“传送”则上传传照片成成功,否否则提示示“文件出出错”。创建建相册完完成后,可可选择界界面上方方的“返回主主页”和“退出登登录”执行相相关的操操作。操操作代码码及运行行结果如如图144、图115所示示。图14 上传图图片代码码图15 添加图图片页面面2.2.6 删删除相册册、照片片用户可以以根据自自己的需需要删除除相册或或照片。每个相册册和每张张照片后后面都有有“删除”的字样样,点击击后会出出现提示示“是否删删除”,选择择确认则则删除成成功,返返回相册册主页;选择取取消则无无变化,返返回相册册主页。图片操作代码及运行界面如图16、图17所示。图 166删除图片片代码图17 图片操操作页面面2.2.7 退退出登录录用户可以以根据自自己的需需要退出出登录。用户只要要点击“退出登登录”,就返返回到“登入页页面”。2.2.8 数数据库设设计本系统的的数据库库MySSQL是是链接到到留言板板的功能能,创建建表、编编写代码码、链接接数据库库是DAAO类实实现的。只要输入入正确的的口令、进进入“相册主主页”,就可可通过“相册主主页”左侧的的链接点点击“发表留留言”进入到到“我的留留言板”,根据据界面上上的提示示,可选选择“发表留留言”、“浏览留留言”、“返回主主页”、“退出登登录”中的任任一项进进行相应应的操作作。选择择界面上上方的“发表留留言”后会出出现用户户、标题题、内容容提示框框,填写写内容后后提交留留言,成成功则出出现“浏览留留言页面面”,否则则则提示示错误。选选择“浏览留留言”,直接接转至“浏览留留言页面面”,可浏浏览所有有的留言言,点击击“下一页页”则跳转转至第二二页的留留言内容容,同样样还可选选择“上一页页”、“首页”、“尾页”,执行行相应的的操作。选选择“返回主主页”和“退出登登录”也分别别对应着着相关的的操作。数据库表如下表所示表1类别别表表2 图图片表表3 用用户表表4 评评论表3、实现现过程3.1 JDBBC连接接数据库库创建一个个以JDDBC连连接数据据库的程程序,包包含7个个步骤:加载JJDBCC驱动程程序:在在连接数数据库之之前,首首先要加加载想要要连接的的数据库库的驱动动到JVVM(JJavaa虚拟机机),这通过过javva.llangg.Cllasss类的静静态方法法forrNamme(SStriingcclasssNaame)实现。 例如:try /加加载MyySqll的驱动动类 Claass.forrNamme(""comm.myysqll.jddbc.Driiverr") caatchh(CllasssNottFouundEExceeptiion e) Sysstemm.ouut.pprinntlnn("找找不到驱驱动程序序类 ,加加载驱动动失败!"); e.pprinntSttackkTraace() 成功加载载后,会会将Drriveer类的的实例注注册到DDrivverMManaagerr类中。提提供JDDBC连连接的UURL 连接URRL定义义了连接接数据库库时的协协议、子子协议、数数据源标标识。书书写形式式:协议议:子协协议:数数据源标标识。协议:在JDDBC中中总是以以jdbbc开始始。子协议议:是桥桥连接的的驱动程程序或是是数据库库管理系系统名称称。数据源源标识:标记找找到数据据库来源源的地址址与连接接端口。例如:(MMySqql的连连接URRL) jdbcc:myysqll:/loccalhhostt:33306/tesst?uuseUUniccodee=trrue&&chaaraccterrEnccodiing=gbkk uuseUUniccodee=trrue:表示使使用Unnicoode字字符集。如如果chharaacteerEnncoddingg设置为为gb223122或GBBK,本本参数必必须设置置为trrue 。chharaacteerEnncoddingg=gbbk:字字符编码码方式。3.2 创建数数据库的的连接要连接数数据库,需需要向jjavaa.sqql.DDrivverMManaagerr请求并并获得CConnnecttionn对象,该对象就代表一个数据库的连接。使用DrriveerMaanagger的的gettConnnecctinn(Sttrinng uurl , SStriing useernaame ,Striing passswoord )方法法传入指指定的欲欲连接的的数据库库的路径径、数据据库的用用户名和和密码来获获得。例例如:/连接接MySSql数数据库,用用户名和和密码都都是roootStriing urll = "jddbc:myssql:/llocaalhoost:33006/ttestt" Striing useernaame = ""rooot" Striing passswoord = ""rooot" tryy Connnecttionn coon =DriiverrMannageer.ggetCConnnecttionn(urrl , ussernnamee , passswoord ) cattch(SQLLExccepttionn see) Systtem.outt.prrinttln("数据据库连接接失败!"); se.pprinntSttackkTraace() 3.3创创建一个个Staatemmentt要执行SSQL语语句,必必须获得得javva.ssql.Staatemmentt实例,SStattemeent实实例分为为以下33种类型型:(1)、执执行静态态SQLL语句。通通常通过过Staatemmentt实例实实现。(2)、执执行动态态SQLL语句。通通常通过过PreeparredSStattemeent实实例实现现。(3)、执执行数据据库存储储过程。通通常通过过CalllabbleSStattemeent实实例实现现。具体的实实现方式式:Stattemeent stmmt = coon.ccreaateSStattemeent(); PreppareedSttateemennt ppstmmt = coon.ppreppareeStaatemmentt(sqql); CalllablleSttateemennt ccstmmt = coon.ppreppareeCalll(""CAALL demmoSpp(? , ?)"")3.4 执行SSQL语语句Stattemeent接接口提供供了三种种执行SSQL语语句的方方法:eexeccuteeQueery 、exxecuuteUUpdaate 和exeecutte(1)、RResuultSSet exeecutteQuueryy(Sttrinng ssqlSStriing):执行行查询数数据库的的SQLL语句,返返回一个个结果集集(ReesulltSeet)对对象。(2)、iint exeecutteUppdatte(SStriing sqllStrringg):用用于执行行INSSERTT、UPPDATTE或DDELEETE语语句以及及SQLL DDDL语句句,如:CREEATEE TAABLEE和DRROP TABBLE等等。(3)、eexeccutee(sqqlSttrinng):用于执执行返回回多个结结果集、多多个更新新计数或或二者组组合的语语句。3.5JJavaaBeaan与DDAO模模式JavaaBeaan是数数据的承承载体,负负责把一一组有逻逻辑的数数据从一一个层传传到另一一个层。 DAOO的出现现是对持持久层的的变动的的一个解解决方案案。对于于不同的的持久介介质(RRDBMMS、XXML、OODBMMS等)、不同同的提供供厂商(Oraaclee、Myysqll等)提提供的产产品,进进行持久久化操作作时,对对于业务务逻辑层层应该是是统一的的,于是是DAOO模式就就出现了了。对于于同一个个业务操操作,例例如添加加一个用用户,请请求到达达业务层层,只需需调用DDAO层层的adddUsser()即可可。而到到底是怎怎么添加加的、以以及添加加到哪里里,是业业务层不不用关心心的,也也是不要要关心的的。于是是,持久久层将利利用业务务层传递递来的请请求数据据,即封封装了要要添加的的用户信信息JaavaBBeann,添加加到持久久层:OOraccle就就要取序序列,MMysqql会自自动增长长,XMML就要要手动控控制了。这这些实现现细节对对业务逻逻辑层是是一样的的效果。但但是DAAO模式式中也会会有一些些数据承承载体,不不过它们们承载的的不是业业务数据据,而是是持久化化操作的的相关对对象,例例如DAAO对象象,DAAO工厂厂,连接接对象等等。表面面上看,这这些也承承载数据据,但它它实际是是包含了了内在的的逻辑和和操作。例例如连接接对象的的打开和和关闭,事事务的回回滚和提提交等。所以,严严格意义义上来说说,它们们不是纯纯粹的JJavaaBeaan。纯纯粹的JJavaaBeaan是只只包含属属性和这这些属性性对应的的gettterr和seetteer。3.6文文件上传传这部分比比较不容容易实现现,需要要非常的的有耐心心和毅力力,计算算用户上上传的原原图和缩缩放后的的小图,并并把图片片改成jjpegg的编码码。现在在将关键键代码附附上:new_w = Maath.rouund(oldd_w / ttemppdouublee);new_h = Maath.rouund(oldd_h / ttemppdouublee);/计算算新图长长宽BufffereedImmagee taag = neew BBufffereedImmagee(neew_ww, nnew_h,BuffferredIImagge.TTYPEE_INNT_RRGB);taag.ggetGGrapphiccs().drrawIImagge(ssrc, 0, 0, neew_ww, nnew_h,nulll); /绘制缩缩小后的的图FiileOOutpputSStreeam newwimaage = nnew FilleOuutpuutSttreaam(ssaveeurll+neewfiilennamee_miin ); JPPEGIImaggeEnncodder enccodeer = JPPEGCCodeec.crreatteJPPEGEEncooderr(neewimmagee);enncodder.enccodee(taag); /近JPPEG编编码下面代码码是将取取得的文文件重新新以上传传时间命命名,并并用原图图的扩展展名加载载取得的的时间后后面形成成新文件件的名称称,同时时在文件件夹内生生成缩略略图,Striing filledNNamee=ittem.gettFieeldNNamee();Strringg fiileNNamee=ittem.gettNamme();Filee f=neww Fiile(filleNaame);Strringg exxt =filleNaame.subbstrringg(fiileNNamee.laastIIndeexOff(".");Strringg coonteentTTypee=ittem.gettConntenntTyype();boooleaan iisInnMemmoryy=ittem.isIInMeemorry();lonng ssizeeInBBytees=iitemm.geetSiize();PhootoDDAO phootoDDAO=neww PhhotooDAOO();Striing savveurrl=rrequuestt.geetSeessiion().ggetSServvlettConntexxt().geetReealPPathh("/")+"upploaadimmagee""Striing newwfillenaamewwithhextt=neewphhotoonamme + exxt;4、关键键问题与与实现结结果在serrvleet中,一一般跳转转都发生生在dooGett, ddoPoost等等方法里里面。rrediirecct 方方式:ressponnse.senndReedirrectt("/a.jjsp""),页面的的路径是是相对路路径。ssenddReddireect可可以将页页面跳转转到任何何页面,不不一定局局限于本本webb应用中中跳转后后浏览器器地址栏栏变化。这这种方式式要传值值出去的的话,只只能在uurl中中带paarammeteer或者者放在ssesssionn中,无无法使用用reqquesst.ssetAAttrribuute来来传递。Forward 方式,RequestDispatcher dispatcher =request.getRequestDispatcher(“a.jsp”);disppatccherr .fforwwardd(reequeest, reespoonsee),页面的的路径是是相对路路径。fforwwardd方式只只能跳转转到本wweb应应用中的的页面上上。跳转转后浏览览器地址址栏不会会变化。使使用这种种方式跳跳转,传传值可以以使用三三种方法法:urrl中带带parrameeterr,seessiion,rrequuestt.seetAtttriibutte。本次项目目的关键键问题在在于图片片上传以以及通过过图片管管理显示示图片的的缩略图图,图片片上传后后会在对对应文件件夹内生生成两张张一上传传时间为为名称的的图片,其其中一张张是后缀缀有_mmin的的,这就就是缩略略图,另另外一张张则是管管理员上上传的大大图,通通过点击击缩略图图或其名名称打开开,用户户可以查查看大图图,并针针对相应应的图片片添加评评论,其其次,在在分类管管理中,管管理员可可以对分分类的名名称和分分类的说说明进行行修改删删除等操操作,特特别需要要注意的的是,在在用户点点击删除除分类时时,程序序会将该该分类下下所有图图片一并并删除,这这也是该该程序的的缺点所所在。该该程序所所实现的的结果是是管理员员通过管管理员登登录,成成功登录录系统后后,添加加分类、说说明,并并在该分分类中成成功添加加、删除除图片,并并可进入入相应的的分类内内管理图图片,可可对图片片进行编编辑,删删除评论论等操作作。游客客进入系系统,可可以查看看自己喜喜欢的图图片,并并可点击击查看大大图,在在大图中中添加自自己的评评论,同同时游客客也可注注册用户户名,进进而登录录系统,创创建自己己的分类类,上传传自己的的图片等等完成管管理员的的所有操操作。实实现结果果如图118、图图19所所示。图18 实现用用户浏览览图片图19用用户评论论图片页页面四、实训训总结与与心得体体会通过这一一个月的的实训,虽虽然倍感感纠结,但但是却收收获颇丰丰,我不不仅有了了学习上上的成果果的喜悦悦,而且且自己也也日渐成成熟,较较之参加加实训之之前,有有种说不不出的成成就感。当我正式式准备接接受jaava webb 的实实训课程程时,让让我倍感感兴奋,虽虽然平时时也学jjavaa编程,但但是那些些都是学学的皮毛毛而已,没没有真正正应用到到实际例例子中,也也很难发发现自己己的不足足,这次次实训,老师先教我们配置JAVA的编程工具和运行环境,然后教我们学JSP,在此期间,我们自学了JAVA,又学了Tomcat的使用及MySql和HTML语言,当我们JSP入门后,教我们学会了Javaweb的使用。老师的细心辅导下,我们有了很大的进步,知识得到了扩充,认识得到了加深,也使得我们的自学能力得到了很大的提高,在此,我向老师表示由衷地感谢。开始的学学习让我我感到任任务的艰艰巨,遇遇到了平平时学习习未遇到到过的困困难,有有时冥思思苦想也也无济于于事,通通过请教教老师和和其他同同学,我我顺利攻攻破一道道道难关关。特别别是对于于文件上上传的代代码,由由于老师师给的参参考文件件与自己己所做的的项目文文件差别别很大,所所以在上上传文件件时,错错误总是是层出不不穷,让让我深受受打击,好好在在老老师的帮帮助下,终终于发现现原来是是图片的的扩展名名不匹配配造成。这次学习习让我对对javva wweb 技术又又有了新新的认识识,我们们必需边边总结边边学习,遇遇到问题题要虚心心请教老老师,学学习知识识的过程程其实就就是相互互学习相相互进步步的过程程。这次次实训,我我学到的的更多的的是不懂懂就问和和尽最大大努力尝尝试,哪哪怕是失失败,老老师经常常说的一一句话就就是:错错了没关关系不可可怕,至至少你要要知道错错在哪。只只要尽自自己的努努力,一一定可以以运行成成功的。有些知识识点以前前没有学学过,但但我也没没有去研研究,实实训时突突然间觉觉得自己己真的有有点无知知,虽然然现在去去看依然然可以解解决问题题,但要要浪费许许多时间间,这一一点是我我必须在在以后的的学习中中加以改改进的地地方,同同时也要要督促自自己在学学习的过过程中不不断的完完善自我我。 另另外一点点,也是是在实训训中必不不可少的的部分,就就是同学学之间的的互相帮帮助。所所谓“当局者者迷,旁旁观者清清”,有有些东西西感觉自自己做的的是时候候明明没没什么错错误,偏偏偏程序序运行时时就是有有错误,让让其他同同学帮忙忙看了一一下,发发现其实实是个很很小的错错误。所所以说,相相互帮助助是很重重要的一一点,这这在以后后的工作作或生活活中也是是很关键键的。 俗话说说:“要要想为事事业多添添一把火火,自己己就得多多添一捆捆材”。 此次实实训,我我深深体体会到了了积累知知识的重重要性。在在实训当当中我们们遇到了了不少难难题,但但是经过过我们大大家的讨讨论和老老师细心心的一一一指导,问问题得到到了解决决。 两两个月的的实训结结束了,收收获颇丰丰,同时时也更深深刻的认认识到要要做一个个合格的的程序员员并非我我以前想想像的那那么容易易,最重重要的还还是细致致严谨。社社会是不不会要一一个一无无是处的的人的,所所以我们们要更多多更快地地从一个个学生向向工作者者转变在这里非非常感谢谢老师对对我的悉悉心指导导,让我我对jaavawweb 技术更更加熟悉悉,虽然然实训结结束了,但但是对于于刚毕业业的我来来说,这这只是个个开始,我我一定会会我一定定要努力力学好,虽虽然路还还有很长长,但是是经过这这一个月月的实训训让我更更加坚定定了我的的信念,那那就是在在javva学习习的路上上勇往直直前。五、参考考文献1. 孙孙卫琴.精通SStruuts基基于MVVC的Javva WWeb设设计与开开发电子工工业出版版社,220044年08月2 .孙孙卫琴 jaava面面向对象象编程 电子子工业出出版社 20006年年7月3. 孙孙卫琴 李洪洪城 TTomccat与与JavvaWeeb开发发技术详详解电电子工业业出版社社 20004年年4月4. (美)JJasoon BBritttaiin,IIan F.DDarwwin TOOMCAAT权威威指南中国电电力出版版社 220044年7月月29