SSH框架总结(框架分析+环境搭建+实例源码下载)
版权声明:本文为博主原创文章,未经博主允许不得转载。
首先,SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活、易于扩展的多层Web应用程序。
集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层(实体层)。
Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持。Spring一方面作为一个轻量级的IoC容器,负责查找、定位、创建和管理对象及对象之间的依赖关系,另一方面能使Struts和Hibernate更好地工作。
由SSH构建系统的基本业务流程是:
1、在表示层中,首先通过JSP页面实现交互界面,负责传送请求(Request)和接收响应(Response),然后Struts根据配置文件(struts-config.xml)将ActionServlet接收到的Request委派给相应的Action处理。
2、在业务层中,管理服务组件的Spring IoC容器负责向Action提供业务模型(Model)组件和该组件的协作对象数据处理(DAO)组件完成业务逻辑,并提供事务处理、缓冲池等容器组件以提升系统性能和保证数据的完整性。
3、在持久层中,则依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据,并返回处理结果。
采用上述开发模型,不仅实现了视图、控制器与模型的彻底分离,而且还实现了业务逻辑层与持久层的分离。这样无论前端如何变化,模型层只需很少的改动,并且数据库的变化也不会对前端有所影响,大大提高了系统的可复用性。而且由于不同层之间耦合度小,有利于团队成员并行工作,大大提高了开发效率。
下面我们再详细看一下组成SSH的这三个框架
一、Spring
1、什么是Spring?
简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
2、Spring的特性
具体自己百度吧
所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码
3、为什么使用Spring?
Spring的以上特性使得开发人员使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
二、Struts
1、什么是Struts?
它通过采用 Java Servlet/JSP 技术,实现了基于Java EEWeb应用的MVC设计模式的应用框架,是MVC经典设计模式中的一个经典产品。
2、Struts1的核心构成
在 Struts1 中,由一个名为 ActionServlet 的 Servlet 充当 控制器(Controller)的角色,根据描述模型、视图、控制器对应关系的 struts-config.xml 的配置文件,转发视图(View)的请求,组装响应数据模型(Model)。
在 MVC 的模型(Model)部分,经常划分为两个主要子系统(系统的内部数据状态与改变数据状态的逻辑动作),这两个概念子系统分别具体对应 Struts 1里的 ActionForm 与 Action 两个需要继承实现超类。在这里,Struts 1可以与各种标准的数据访问技术结合在一起,包括Enterprise java Beans(EJB), JDBC 与 JNDI。
在 Struts 1的视图(View) 端,除了使用标准的JavaServer Pages(JSP)以外,还提供了大量的标签库使用,同时也可以与其他表现层组件技术(产品)进行整合,比如 Velocity Templates,XSLT 等。
通过应用 Struts 的框架,最终用户可以把大部分的关注点放在自己的业务逻辑(Action)与 映射关系的配置文件(struts-config.xml)中。
3、Struts1的基本执行流程
详见《STRUTS基本工作流程》
4、什么是struts2
Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品
5、strut2的体系结构
解析:
当Web容器收到请求(HttpServletRequest)它将请求传递给一个标准的的过滤链包括 流程(ActionContextCleanUp)过滤器,然后经过Other filters(SiteMesh ,etc),
接下来需要调用FilterDispatcher核心控制器,然后它调用ActionMapper确定请求那个Action,ActionMapper返回一个收集Action详细信息的ActionMaping对象。
接下来FilterDispatcher将控制权委派给ActionProxy,ActionProxy调用配置管理器(ConfigurationManager) 从配置文件中读取配置信息(struts.xml),然后创建ActionInvocation对象,ActionInvocation在调用Action之前会依次的调用所用配置拦截器(Interceptor N) 一旦执行结果返回结果字符串ActionInvocation负责查找结果字符串对应的(Result)然后执行这个Result Result会调用一些模版(JSP)
来呈现页面,之后拦截器(Interceptor N)会在被执行(顺序和Action执行之前相反)最后响应(HttpServletResponse)被返回在web.xml中配置的那些过滤器和(核心控制器)(FilterDispatcher)。
6、为什么使用Struts?
首先,Struts 是MVC的一种实现,它将 Servlet和 JSP 标记(属于 J2EE 规范)用作实现的一部分。Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展,减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化
另外, struts具有页面导航功能,使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。
7、 Struts1和Struts2的区别
详见《Struts1 和 Struts2》
三、Hibernate
1、什么是Hibernate?
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任
2、Hibernate核心构成
具体就不展开了
3、Hibernate基本执行流程
为什么使用Hibernate?
1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
2、Hibernate是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作,将软件开发人员从大量相同的数据持久层相关编程工作中解放出来,使开发更对象化了。
3、移植性好,支持各种数据库,如果换个数据库只要在配置文件中变换配置就可以了,不用改变hibernate代码。
4、支持透明持久化,因为hibernate操作的是纯粹的(pojo)java类,没有实现任何接口,没有侵入性。所以说它是一个轻量级框架。
最后附上SSH1和SSH2框架搭建的实例,点击即可下载
SSH1框架搭建实例(spring2+struts1+hibernate3)采用旧版本,详见代码中注释
SSH2框架搭建实例(spring3.2+strust2.3.4+hibernate4.2)全部采用最新版本,详见代码中注释
开发环境搭建,参照我的另一篇博客
《Win7(64) + eclipse(64)+ tomcat7(64)+ jdk7(64)开发环境配置》
- 一些说明:
- 索要代码的邮箱,我基本上都发过了,如果有漏发,请联系我。
- 还是希望大家去csdn下载页去下载。如果速度慢,可以去这里http://pan.baidu.com/s/1eQh7FXo
- 开发环境配置。http://blog.csdn.net/shan9liang/article/details/8807784
- 在war中,找到application-common.xml。修改数据源,指定自己的数据库即可。项目部署后,会自动映射表。
- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
- destroy-method="close">
- <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
- <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />
- <property name="username" value="ssh" />
- <property name="password" value="ssh" />
- bean>
- 以上是oracle的配置。
- 如果使用其他数据库,请在lib目录下,加入驱动包。并修改数据源。
- 强烈建议:
- https://code.csdn.net/shan9liang/tgb
- 这是在CSDN CODE托管的,采用ssh搭建的一个考勤管理系统,maven项目,比原来那个更规范了,建议用这个,而且我会持续更新,逐渐加入各种主流框架,相信我。
- 。不过不是eclipse项目,需要手工导入eclipse,最近特喜欢用intellij。建议直接用git clone。
-
顶
- 267
-
踩
- 19
- 猜你在找
499楼 qq_34463395 12小时前发表 [回复]-
-
求楼主来一发,谢谢。[email protected]
498楼 qq_38850406 2017-07-13 10:30发表 [回复]-
-
[email protected]楼主发一份
497楼 qq_27745855 2017-07-05 15:11发表 [回复]-
-
求发,[email protected]
496楼 qq_35182195 2017-07-04 16:02发表 [回复]-
-
楼主,菜鸟求实例,[email protected]
495楼 我炒菜不好吃 2017-06-27 10:41发表 [回复]-
-
谢谢楼主,能不能发我一份代码呀[email protected]十分感谢
494楼 我炒菜不好吃 2017-06-27 10:40发表 [回复]-
-
谢谢楼主,希望楼主能给我一份代码~~~十分感谢
493楼 qq_24286425 2017-06-12 20:20发表 [回复]-
-
感谢楼主分享,可以给份源码分享吗。[email protected]
492楼 qq_26766435 2017-05-27 10:02发表 [回复]-
-
求份源码,[email protected]
491楼 qq_35192442 2017-05-26 14:59发表 [回复]-
-
感谢老师的分享,能否给发送下源码,这样学习的更系统![email protected]
490楼 qq_35192442 2017-05-26 14:57发表 [回复]-
-
感谢老师的分享,能否给发送下源码,这样学习的更系统![email protected]
489楼 Gxttsmn 2017-05-25 14:11发表 [回复]-
-
希望博主能发一份源码来学习,感谢博主,祝合家安康。
488楼 Gxttsmn 2017-05-25 13:56发表 [回复]-
-
感谢老师的分享,能否给发送下源码,这样学习的更系统![email protected]
487楼 jianxin1021 2017-05-24 23:00发表 [回复]-
-
不错,感谢
486楼 qq_38242344 2017-05-18 18:41发表 [回复]-
-
[email protected]
感谢楼主!
485楼 XuPerfect 2017-05-18 10:00发表 [回复]-
-
我刚开始学不太懂 数据库执行DB 没有么?
484楼 MIESHIWBL 2017-05-13 09:57发表 [回复]-
-
感谢楼主,给我发一份源码 邮箱:[email protected]
483楼 csdn_huangshancun 2017-05-11 10:50发表 [回复]-
-
麻烦楼主发一份源码给我
[email protected]
好人一生平安
482楼 inocsin 2017-05-03 16:01发表 [回复]-
-
楼主能够发一份ssh2的代码吗,非常感谢,邮箱[email protected]
481楼 inocsin 2017-05-03 15:59发表 [回复]-
-
楼主,能够发我一份ssh2的代码吗,非常感谢,[email protected]
480楼 qq_36881704 2017-05-03 15:09发表 [回复]-
-
麻烦楼主发一份[email protected],谢谢啦
479楼 Meteor31 2017-04-27 11:35发表 [回复]-
-
麻烦楼主给发一份 [email protected] 感谢
478楼 u010632560 2017-04-20 15:22发表 [回复]-
-
大神求码,感激不尽 [email protected]
477楼 qq_35848447 2017-04-19 21:18发表 [回复]-
-
[email protected]大神给我一份。谢谢啊
476楼 qq_36689653 2017-04-19 12:16发表 [回复]-
-
[email protected],麻烦楼主给发一份,谢啦!
475楼 qq_36689653 2017-04-19 12:15发表 [回复]-
-
[email protected],麻烦楼主给发一份,谢啦!
474楼 chenying513 2017-04-07 16:39发表 [回复]-
-
大神 能给源码学习下么 邮箱[email protected]
473楼 12期袁甜梦 2017-04-05 14:50发表 [回复]-
-
很详细的总结,不仅说出了分析也做了实践
472楼 zhou592930059 2017-03-31 22:43发表 [回复]-
-
楼主,源码还有吗?我刚学javaEE框架,想学习学习。[email protected] 谢谢!
471楼 lgwboke 2017-03-17 11:36发表 [回复]-
-
楼主求代码,我用的是eclipse或者MyEclipse的开发环境,数据库是MySQL的 , 邮箱:[email protected] 谢谢
470楼 Bboy-AJ 2017-03-13 16:57发表 [回复]-
-
感谢师哥分享。
469楼 乘着风筝去旅行 2017-03-13 15:34发表 [回复]-
-
可以发我一份么?[email protected]
468楼 马金兴 2017-03-09 16:55发表 [回复]-
-
学习了,谢谢分享;很受益;SSH
467楼 12期-冯静姣 2017-03-05 21:28发表 [回复]-
-
写的很详细,最近正在学习很有收获
466楼 淘到星星的小笛子 2017-02-21 18:53发表 [回复]-
-
正在学习SSH,一直很迷糊,多谢师哥分享
465楼 lilichaoo 2017-02-10 15:51发表 [回复]-
-
楼主,帮我也发一份可以吗?[email protected]
464楼 chiao1992 2017-02-05 10:49发表 [回复]-
-
ssh1谢谢楼主 [email protected]
463楼 SMALLKOUKOU 2017-01-17 16:14发表 [回复]-
-
求代码,谢谢楼主。[email protected]。
462楼 Vami杜晓静 2017-01-14 20:40发表 [回复]-
-
师哥从整体上把SSH项目的东西给串起来了,很清晰 ,
461楼 城府殿 2017-01-11 09:48发表 [回复]-
-
有没有流程解读
460楼 栗振娟 2017-01-09 10:39发表 [回复]-
-
再次看了师哥的博客,讲解的很清晰。
459楼 m0_37256714 2017-01-05 10:14发表 [回复]-
-
麻烦楼主发一份源码,谢谢![email protected]
458楼 xxz5418 2017-01-03 12:49发表 [回复]-
-
谢谢楼主麻烦发我一份源码[email protected]
457楼 Super_jc_ 2016-12-21 11:21发表 [回复]-
-
楼主有空给我也发一份吧 [email protected]谢谢了
456楼 baidu_37043647 2016-12-18 15:07发表 [回复]-
-
求SSH2的代码,[email protected] ..谢谢楼主!
455楼 sam_lan 2016-12-06 11:05发表 [回复]-
-
谢谢分享,麻烦楼主发一份SSH2的代码,参考下,[email protected] 谢谢。
454楼 ls10241202 2016-11-25 11:25发表 [回复]-
-
谢谢楼主分享
453楼 qq_32051823 2016-11-25 08:43发表 [回复]-
-
同求发 [email protected]
452楼 qq_27183381 2016-11-22 21:56发表 [回复]-
-
群主,也给我发一份 我的邮箱是[email protected]
451楼 u014137376 2016-11-19 20:42发表 [回复]-
-
谢谢楼主,分享,给我一份源码和资料。[email protected]。感谢楼主。
450楼 u013142543 2016-11-17 15:36发表 [回复]-
-
怎么改成MySQL数据库啊,一改很多错误,程序都跑不起来。。。。。。。。。。。。。。。。。。。。。。。。。。
449楼 qq_36523861 2016-11-16 14:31发表 [回复]-
-
楼主,麻烦发我一份代码 [email protected],谢谢了
448楼 白衣ww 2016-11-12 20:52发表 [回复]-
-
麻烦博主发一下代码,谢谢了啊[email protected]
447楼 wang415834554 2016-11-12 10:39发表 [回复]-
-
非常感谢大神分享,劳驾大牛:
[email protected]
446楼 sy759770423 2016-11-02 11:27发表 [回复]-
-
大神发我一份,[email protected]
445楼 功夫熊猫1 2016-10-31 23:32发表 [回复]-
-
目前较流行的一种Web应用程序开源集成框架
444楼 weixin_36529555 2016-10-27 12:51发表 [回复]-
-
可以发一份给我么,大神,谢谢 [email protected]
443楼 xuefengtao0809 2016-10-22 14:29发表 [回复]-
-
楼主帮忙发一份吧,ssh1和ssh2,谢谢啦,[email protected]
442楼 spring123abc123 2016-10-21 13:09发表 [回复]-
-
请楼主发送一份ssh2的源码,[email protected]。谢谢!
441楼 石观音 2016-10-18 13:03发表 [回复]-
-
我是新手 麻烦给我发一份ssh2的源代码参考一下 谢谢啦 [email protected]
440楼 石观音 2016-10-18 12:57发表 [回复]-
-
我是个新手,求一份ssh2框架搭建代码参考[email protected] 谢谢啦
439楼 compiteis45 2016-10-18 09:49发表 [回复]-
-
[email protected] 楼主性福
438楼 qq_23308193 2016-10-12 22:02发表 [回复]-
-
楼主好人 [email protected]
437楼 hdsafjkf 2016-10-05 21:36发表 [回复]-
-
还是个新手,求一份ssh2框架搭建代码参考[email protected]
436楼 qsmoonxs 2016-10-01 22:46发表 [回复]-
-
[email protected] 谢谢楼主 楼主好人
435楼 Xin20160929 2016-09-29 16:01发表 [回复]-
-
谢谢楼主分享,请问可以发数据库或者数据库脚本给我吗?我的邮箱是[email protected]
434楼 狸狸狸狸不开 2016-09-28 08:33发表 [回复]-
-
求源码参考 [email protected] 谢谢楼主
433楼 qq_33679456 2016-09-27 11:42发表 [回复]-
-
大神能发一份源码嘛 !没积分了,新手才开始自学ssh,你的资料对我帮组很大 谢谢 [email protected]
432楼 qq_33679456 2016-09-27 11:41发表 [回复]-
-
大神能发一份源码嘛 !没积分了,新手才开始自学ssh,你的资料对我帮组很大 谢谢 [email protected]
431楼 福神007 2016-09-20 11:51发表 [回复]-
-
没积分了 ,楼主 ,希望能发一份 [email protected] 谢谢了
430楼 何丽杰 2016-09-18 14:45发表 [回复]-
-
谢谢师哥的分享!!!!
429楼 爬行的菜鸟 2016-09-18 12:28发表 [回复]-
-
楼主好厉害啊 可以给我一份源码吗。[email protected]。感谢楼主。
428楼 qq_30873979 2016-09-14 15:27发表 [回复]-
-
跪求源码,谢谢楼主
[email protected]
427楼 qq_30873979 2016-09-14 15:26发表 [回复]-
-
s
426楼 qq_30873979 2016-09-14 15:25发表 [回复]-
-
群主求源码,万分感谢
[email protected]
425楼 qq_33737001 2016-09-11 15:35发表 [回复]-
-
麻烦LZ 发份,感激不尽··[email protected]
424楼 sinat_34546406 2016-09-08 10:28发表 [回复]-
-
楼主发一份 [email protected]
423楼 MAguoteng 2016-09-06 15:49发表 [回复]-
-
求楼主源码,最近在学习这个 qq邮箱[email protected]
422楼 qxxyanxp 2016-09-06 11:26发表 [回复]-
-
求源码参考学习 [email protected] 谢谢楼主啦
421楼 qxxyanxp 2016-09-06 11:24发表 [回复]-
-
求源码参考 [email protected] 谢谢楼主
420楼 qq_36017557 2016-08-31 22:29发表 [回复]-
-
楼主,求发一份SSH 注册登陆整合的列子,半自学好多地方弄不懂,想要个好点的列子学习学习,如果可以请发我邮箱414620707qq.com 万分感激
419楼 Ping_Sky 2016-08-31 18:02发表 [回复]-
-
[email protected] 感谢楼主~~
418楼 qq_34832555 2016-08-23 21:49发表 [回复]-
-
看了之后,收获确实不少。感谢楼主分享。求源码[email protected]
417楼 Walking_boy 2016-08-14 21:25发表 [回复]-
-
感谢楼主分享,看后收益匪浅,讷讷发一份源代码么。邮箱:[email protected]非常感谢
416楼 IM630 2016-08-13 16:28发表 [回复]-
-
博主,我看了这篇,收益很多 想看看源代码学习 ,能麻烦发下源码吗 谢谢了,[email protected]/[email protected]都可以
415楼 m19910628 2016-08-11 17:04发表 [回复]-
-
这篇博文总结的很好,对于刚接触的SSH的新人来说,看完很受益,谢谢楼主的分享!本来想看看源代码,助于进一步理解,但是博主的百度云链接不存在了,请求博主发我一份,再次表示感谢![email protected]
414楼 god___like 2016-08-09 17:35发表 [回复]-
-
求楼主发一份代码 感激不尽 [email protected]
413楼 阳光那么温暖 2016-08-04 20:54发表 [回复]-
-
楼主可以发我一份吗?新人没积分。。[email protected],谢谢楼主
412楼 qq_33292624 2016-08-04 11:05发表 [回复]-
-
楼主麻烦发下代码,谢谢[email protected]
411楼 我想要越飞越高 2016-08-01 16:32发表 [回复]-
-
楼主好人 发一份吧[email protected]
410楼 Monkey_D_Jie 2016-07-31 22:25发表 [回复]-
-
真心不错!!!非常感谢楼主!
409楼 qq_21121887 2016-07-30 08:13发表 [回复]-
-
可以发我邮箱嘛,[email protected]
谢谢啊
408楼 dds_dds_dds 2016-07-29 13:06发表 [回复]-
-
能给我发一份吗?
[email protected]
407楼 qq_32907055 2016-07-28 10:32发表 [回复]-
-
楼主好人
[email protected]
406楼 yunfish.com 2016-07-28 10:06发表 [回复]-
-
能给我发一份吗?
楼主与没有专门的QQ群?
[email protected]
谢谢
405楼 yunfish.com 2016-07-28 10:05发表 [回复]-
-
能给我发一份吗?
[email protected]
谢谢
404楼 xlglyl 2016-07-25 22:15发表 [回复]-
-
能给我发一份代码吗?谢谢了![email protected]
403楼 qq_32003107 2016-07-22 16:13发表 [回复]-
-
[email protected] 谢谢了
402楼 sinat_35652685 2016-07-20 08:44发表 [回复]-
-
楼主能麻烦给我邮箱发一个最新版的SSH2的框架源代码吗,我是新手,想学习框架的,但是没有积分哎,邮箱[email protected]。谢谢了。
401楼 小小1024 2016-07-14 18:44发表 [回复]-
-
楼主,我账户上的积分用光了,希望您能发我一份代码,谢谢
[email protected]
400楼 cszherobo 2016-07-13 18:34发表 [回复]-
-
求代码[email protected]