实例讲解SSH技术架构_第1页
实例讲解SSH技术架构_第2页
实例讲解SSH技术架构_第3页
实例讲解SSH技术架构_第4页
实例讲解SSH技术架构_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、实例讲解SSH技术架构王青 2007-08-04、八 、亠刖言Struts + Spring + Hibernate 是近两年在 Web Application中使用的比较多的技术,虽然新的技术不断涌现,SSH可能终将成为昨日黄花,但是在其框架间的思想却是不会过时的。故而希望借此机会与师弟妹们共同学习注:部分资料和图片来自In ternet在此向原作者表示诚挚的感谢!简介我是个懒人, 认识:没有仔细地查 Struts,Spring和Hibernate的准确定义;这里和大家分享下我的StrutsStruts是一个建立在 Servlet和JSP技术基础上的 Web Application表示层的技

2、术框架,它实 现了 MVC2的模式,从而使得表示层中的视图和表示逻辑较好的分离(换言之,就是说你 不用写大量的java代码在你的JSP中了)Response图表 1 Struts MVC2SpringSpring是一个轻量级的模块化框架,我们常用它来取代业务逻辑层的应用服务器,由它来提供原来由应用服务器提供的诸如对象创建,事务管理,日志等等公共基础设施。它实现了In verse of Con trol ( Depe ndency Injection )禾口 Aspect Orien ted Program ming 的编程模型。 简单说就是:loC使得对象的初始化完全由Spring来负责,因此

3、对象实例之间的关系成为可声明的(在Spring的配置文件中声明);AOP使得我们不再为跨越系统各个模块的公共问题伤脑 筋(事务、安全等等),Spring为我们提供了接近完全透明的解决方案。Spring Core轨申Oding屮皿血Bearni wHanier图表 2 Spring ArchitectureHibernateHibernate是一个数据库访问框架,着力于提供可声明的(declarative)持久化服务。ApplicationPersistent ObjectsHibernateproperties|XML 曲咖Database图表 3 Hibernate准备实例这里我们有一个具体

4、的例程来和大家一同学习SSH:SelectiveCourseManagementSystem.rar在这个例子里具体的来说我们就是要使用Spring为我们业务逻辑层提供事务服务,并以它为胶水来把 Struts和Hibernate整合起来。Web frontend usingStruts or WebWorkSpring WEBSpring AOPSpring ORMTransactionmanagementUsing Spring deck trans.Hibernate mappingsCustom Hibernate DAOsSpring CoreSpring DAOServlet Con

5、tainer (Tomcat / Jetty >图表 4 Spring in Middle Tier例程环境MyEclipse 5.5 GA ( eclipse 3.1 以上也可以,MyEclipse 好用些而已)MySQL 4.0 以上开始前的准备1) 将压缩文件直接解压后导入 Eclipse2) 新建一个 create.sql 脚本,将 sql.txt 文件中 sql 脚本 copy 过来3) 在 Eclipse 中连接数据库,运行 create.sql 脚本4) 在新数据库中加入数据请参照下述 Domain Model ,注意数据之间的关系 (请添加数据, 否则无法测试)5) 将

6、application-service.xml 中的数据库连接的属性修改为当前数据库服务器对应的值6) 修改项目的 build path 中已经无效的 mysql connector jar, 将其替换为恰当的 connector7) 部署项目8) start Tomcat 在浏览器中测试 <your-tomcate-stratpoint>/StudentMangerOk , the SSH application is running now !让我们开始分析简单的需求分析注:简便起见, 这里我们没有完整的需求分析, 大家注意在实践中还是要完整的需求过程的。这个应用是个简单的选修

7、课管理系统:Use Case 分析Selective Course Man ageme nt System Use Case DiagramVersion 1.0LAuthor 王青Date 08-04-2007Selective Course Management SystemLogin-O十- zCommonUserStudent-xTeacher<<in clude>>View Teaching ClassesSelect CourseView Seleted CoursesUpdate ProfileView All CoursesAdd StudentView

8、 History Course ScoresView Student Profile-¥Admin图表 5 Use Case Diagram描述1)该系统可以方便处理学生在课程选报,学分查询,成绩查询,以及成绩发布等。2)系统以班级为核心,一门课程可以对应多个班级。3)一名教师可以带不同的班级。4)学生可以选报不同课程所对应的班级。5)班级自身有目前人数,和最大人数,以及上课时间,上课地点的属性。6)学生在选报班级之后, 班级的人数会自动加一, 直到等于最大人数时, 其他学生将会有 人数已满的错误提示。7)如果学生选择了同一课程的不同班级,也将收到错误提示。8)学生有密码,系别,学分

9、,地址,电话等属性。9)教师在系统中主要负责成绩发布。10)教师可以对其所带的班级的学生的成绩修改。11) 系统会以成绩是否大于等于 60 来判断学生是否通过考试,如果通过会将该课程的学分 累加到学生学分12) 如果教师二次修改了成绩,而且小于 60,系统会在学生学分上扣掉该课程的分数。13) 课程在系统中具体体现为班级,自身带有学分属性。14) 系有编号,名称的属性,同时可以作为联系教师,课程,学生的桥梁。功能模块1) 身份验证模块: 根据用户名,密码,用户类别 转发用户到不同的模块。2) 学生模块: 查看课程,查看班级,选报课程,查看己选课程,成绩查询。3) 教师模块: 录入成绩管理员模块

10、:对学生,教师,课程,班级,系 增,删,查,改。Domain ModelSelective Course Man ageme nt System Doma in ModelVersion 1.0Author 王青Date 08-04-2007图表 6 Domain ModelOk,这里我们对待建的系统已经有了较为清楚的认识。在接下来的部分,我们将略过设计 和coding直接来看我们最后的成果,从中学习SSH实例解析包结构剖析首先我们推荐大家在这次的实训当中采用类似的包结构:一 _li Select!veCs&NlejiagementSystem . myeclipseO setting

11、s曰.二 sre-O乳們-bus inesa managerU sarviceO TO二 excepti on日hibern直七©11 勺 dac=1spring二 service二 stmts|二 action二 commonSWebRootadminincludeMETA-IN?studentte&cherWEB-INF全局在顶层有项目最重要的配置文件src名称.->semslappli cati<ms-servi ce. xml 阳Lhibefzte. cfg. KiriJlog4j. prcp&rti es1)application-service

12、.xml是Spring的配置文件,它定义了数据库连接,和Spring管理的对象,事务以及胶合 Hibernate的配置。2)hibernate.cfg.xml是Struts的配置文件,它定义了 ORM配置文件的路径(注意:Hibernate 中的Session和Servlet中的session各有所指,前者是一次数据库连接,后者是一次应用会话)3)perties Spring利用Iog4j来作为logging的工具,这是Iog4j的配置文件业务逻辑业务逻辑层分成了实体/值类包(vo),操作类包(manager)和服务类包(service)。 注意:这是一种以对象类型来组装业务

13、逻辑层对象的横向分包方式,当项目很小,业务实体 数量很少的情况下,我们经常采用这样的分包。 如果待建系统中的业务实体数量较多, 我们 就会采用以业务逻辑来纵向分包的方法,将业务上相关的实体和其 manager放在同一个包 内。实体类名称Vfl Ab £ tr ac t Adm i ns. j wa AbstrctClasses j ava Ab e tr ac tCl a:E e e slnfo. j avaAbstriactCoiit act, j ava YAbEtractCour ese. j &vaAb s tr c tD ep ar t m ent. java Ab

14、 e tr &e tHi s t ory. j ava Ab s tr tS tn dent s. java 宿 Ab s tr ac tT 电 acker 5. j avaAdm ms:, j avnClasses, javaCl as s e slnf 0 - j av?C&ntact. javaurses. javaDepartment, j ava Hi story, javaStudfititCour seLitikKay. j 吕片岂 v|StudeiLtE. java (Teachers, javaORM文件(.hbm.xml),然后可以在业务实体类,注意MyEc

15、lipse可以从数据库连接中得到 此基础上自动的为你生成这些实体类。操纵类i5;rcscmsbusmiager名称VJt| Adm inN onager. jav Cl assesManager. java vJt| C cur s e sH anagar. j 砂g 唱jDep artmentlHxkag«r. java v|StudntsManager, java* t acher sM ana ger. j ava用以操作实体的 Manager,它们提供了最基本的对实体CRUD的能力,和只涉及它所管理对象的简单业务方法。注意:在这里出于简化将 Manager与Dao的关系:并略

16、去了 Managerlmpl业务服务nVsr c:e cm sbus ineEsVs. ervi c e名称徑| AdminServi ceB j avaS tudent eS er c e. javTeachersService. java这里包含了各个功能模块中要用到的涉及多个业务实体的业务方法。注意:这里的manager和service都是接口,具体的实现将分别由与hibernate和spring耦合的类来提供自定义异常TtsrGscmsVexcepti on名称 'DaflExcepti on j ava这里的异常还很不完善,师弟妹们有时间可以重构整个实例中的异常设计数据访问(

17、Data Access Object )isr cVscnsVhib&mat ftVdao名称” finmnmHnmmnmHmHnmHirAdniiaDao. java IY£ Bas#3ao. j avaB as «D aolmpl. jva C14S5ft5Ca&. java Cour s&sE&o. java Depar tmentBio. j avaStudentsE&. j4va YTtfichersIijavaAdmins, hbm. xml IggliClssas hbm,席ml Classeslnfo. Mxn. xm

18、lCont act. hbrn, xml lliCour sag, hbm. xmlDep-artment hLmi. xml fliHis t-ory. Kbm. xml © Students, hbnk xml Mi Teacher 5- hbn xml与hibernate耦合的类。如前述,这些Dao实现了 Manager接口。而.hbm.xml文件就是 Hibernate 的ORM定义文件。这里要注意两点:多一映射和多多映射固然我们可以利用 MyEclipse生成ORM定义,但是这些定义对于利用关联表表示的关联关 系通常不能够正确的定义,我们需要手工修改。分页需求为了满足UI层

19、在查询结果较多的时候要分页的需求,这里我们引入了BaseDao接口,全面的管理对Session的操作。注意我们分页的需求是通过 JSP的custom tag, Struts和这里的 BaseDao接口共同解决的。Web界面我们的Web层采用Struts框架,因为此系统属于较简单WEB应用,采用了 OpenSessionlnView模式处理LazyLoad问题,这样我们可以在用户视图中使用 get,set方法来方便地获取关联 对象。为了处理庞大的 Action和 ActionForm 问题,在此我门使用DynaActionForm(DynaValidatorForm)和DispatchActio

20、n以及动态验证框架来解决。同时我们还使用 Tile标签 来解决页面布局问题,并使用自定义标签处理分页和身份验证问题。OpenSessionlnView由于 Hibernate引入了 Lazy Load特性,使得脱离 Hibernate的Session周期的对象如果再想 通过getter方法取到其关联对象的值,Hibernate会抛出一个 LazyLoad的Exception。所以为了解决这个问题,Spring弓I入了 OpenSessionlnViewFilter,其主要意思是在发起一个页面请求时 打开Hibernate的Session,直保持这个 Session,直到这个请求结束,通过这个F

21、ilter 使得Hibernate的Session的生命周期 变长。isrcVscmss truts名称4C t i on_j commonJ ApplicatipropertiesApplicitionResource. prop &rt1p,| Cus tstPr s«r j avaencode, b&tp,2jacter Enc & di ngFil t er j avaApplicati on Resources。是 Struts 框架中的国际化(i18n)资源CustomRequestProcess.java 提供了 Struts 控制器 actio

22、nServlet 中的 process,用以认证用户 SetCharacterEncodingFilter.java 是一个 Servlet 的 Filter 用以处理字符编码问题 encode.bat是一个项目中用的小工具,用以将ApplicationResource_temp中的GBK编码转换成UTF-8编码msrcscms.EtrutEcomfn6Tk容称*理jFj ava用以解决分页问题的帮助类isrcEcmsstrutsacti on名称丫翌人血 i nAc t i sn. j ava.pplicat i uns-serTi ce. xml javaL jjEas&Dispa

23、tchAction. j ava jlCourstsActi cn. j 裁a vjCoursasAllActi on. j ava v2|Logi nActi j avi v jjMarkAeti «n. java i週|F碍氛*i m java vf S tudfentAc t i on. j ava |TeacherClasstsKction. java vTeacherHi storyAction. java 迪 Teat udeit tsActi on. jStruts的action类,是 Web UI层和业务逻辑层打交道的地方。这里我们简化了在大型应用中常用的 Busin

24、 ess Delegate + Service Locator 的模式,使用 BaseAct ion 禾口 BaseDispatchActi on来持有业务逻辑层service的引用。而后其余的action均扩展自这两个 actionStruts框架复习起来复习下Struts框架:FLecfUBslPrDStruts ControllerAclinii-actions: HashMa p sarvleGAcliDnServlal vaiapCcinilgpllcafiMCorvflgHttpStMelActinruSenflEtsaveErrars raid#proce ssorReque E

25、-iPrDcessar*proce55M3pping:Acfl0nM3 pplng #pKOeessAciianFDrm:AEionFQrm pFacBssValidaEB:b 口 olRmn#prac essAciianP erform.Acii onForwardinllwid +(3oGetvolcl + 0QPO3tVO'iCi 和咖曲阴Md+execule>*uc1loniF orwardVII ormyeafiCnbirrigModuleConnglmpI1 AForwiardConAgAcitonCormgFormPropfiiMmifiB1 *fflormPrap

26、erlies Ha&hMap ame SiringtvpeSbrinBin struts-config xml-aciiDnCDn11gB:HaBhMap -fDrrriBean&:Hashhflap -forwardS:HaShMaplicadon configuration (defined: 1駕name Jiring #pain SiringA#aftFll3ui|e;Slnn03ffia1h:Stnng #tffESiring fiarwardi.HashMapAionForwar-ilAciimMaiifrinaftrtiani 口m# eivl etftctian

27、S eMelIWDvviEBAjctiQnForrii1itbArfiiifiFariTtciasfconAigformiBeanCDnflgi #name:Sbng 和 roperiia s:叶n aPropert#ini|i$iv$iue'Ob|ect #name即自彳呵.合bnngi #hi!pe:Sliinq| Struts framework classes-U»r classesUsM-Delgatigaccess the Model+ businEBsMetfiodl midi + busineEsMebiod2id#UYTiiCl 35$;Dyni3AcllQ

28、nf rmCl3S3 <- sMynaValue s:HaBhMapllMperriRanAuthor. J<Anpropertl Siring props rt<2.Siringy一创i:h«i Camler Ocbaber氓1龙 hnp a图表 7 Struts ArchitectureHnrLURElPiflraisisni 1tltdtftrmi 1 prgcw¥¥0voidi .1J crBflrtBS < neci&es&arY2 prgc:艸P口血川叩啊忖11 4AQllOflUserHonDytifiAeli

29、onFflrfriumbd10vtiid11+3' pgiMjiMOwd1.1 4.1: fW?rds1U|13irIorfandCT 0| 7. geiPnapiijFE |13Browser tSlims Conlrallpr旦nc中psul曲阴IXand at£Als ModNYfllue Oftjattbew hgldSl-hvclMa rquird bv tit-Ititcni1313图表 8 Struts Sequenee Diagram13Action#巳:Lriumle = Lei匚mle.口etDe迦# servletActionServlet+ gatSe

30、rvlet C )+ setServlet ()+ execute ()中 SXKUtB ()+ perform ()+ perform ()# generateToken ()# getLocale ()# getResDurc&s ()# getResources ()# isCarcellecI ()# bsToksnvalltj ()f isTokenVlid ()# resetTcken ()# saveerrors ()# saveMessages ()# saveToken ()# seiccaie ()# to Hex ()DispatchActionForwardAc

31、tionInclude Action+ perform ()+ perfbrm ()+ perftirm ()A+ dastrciy)+ 和t()+ doGet ()+ ctoFost ()+ addServfetMapping ()+ findDetaSourcE ()+ findFarrmBean ()+ findForward ()+ findMappng ()+ getDebug ()+ getlnternal ()+ getResoLTces ()+ tag ()# destroy Applications ()# deetrayConfigpIg&stBr ()# dest

32、royDataSources ()# destroylriterrial ()# gatApplicatlcriiCDnfig ()# iiitApplicatioTConfig ()# nitifjplicationDataSources ()# nltApplicatlonFlugilns ()# mitplicationMsssageRescuroes ()# mltConfigpigestEr ()# nitDataSources ()# miUnternal ()# nltOlher ()# mitServlet ()# process ()-defeuftCoritrallerConfig ()-defuttFcr mBeansConfig ()-defajItForwandsCorifig (-defaultMapp ingsConfig ()-defaultMessageResouncesConfig ()L ookupDispatchA c Tian# look甲Map : Map 工 null# k

温馨提示

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

评论

0/150

提交评论