这篇文章是基本的概念讲解和心得体会,之后会有详细的demo进行解说。
在过去的一段时间内,我一直对SSH(spring、Struts2、hibernate)的框架不是很了解,借着这次完成电影购票系统的大作业好好学习了一下。学习过程中,我阅读了一些相关书籍,其中,对于初学者而言比较浅显易懂的、内容也比较丰富的电子书籍有:Spring开发指南,Spring从入门到精通,struts2入门教程,struts2权威指南,Hibernate 开发指南,Hibernate3官方中文参考手册。
体会
总的来说,我认为SSH有如下的优点:
总体来说:
运用框架,提高代码的复用性,减少代码的冗余,提高运行速度,规范编程,便于维护.
Sructs优点:
1)MVC框架
2)标签库
spring优点:
spring的核心出发点就是降低程序复杂度、耦合度、隔离变化点。
1)控制反转(在beanfactory 兵工厂中创建对象)与依赖注入(初始化对象) IOC
2)事务管理机制 (对异常处理,日志,全线控制直接调用,)AOP
通过对大部分底层的封装,开发SSH应用就像填空一样,非常舒服。
Hibernate
Hibernate是比较好理解的。Hibernate的功能就是将数据库的表格、视图等映射成为Java的类对象。这些类对象进行的操作,都通过Hibernate映射到对数据库的操作。Hibernate就是数据库和Java逻辑功能的桥梁。JDBC其实也是桥梁,但Hibernate的优点在于它封装了Java程序和数据库的连接关系,因此,一个简简单单的save方法就能像数据库表插入一个新的值。同时,Hibernate的封装还解决了Java程序和不同数据库连接时可能会出现的不同的SQL语句问题。要使用Hibernate,需要数据库表、简单的JavaBean类,Hibernate的配置文件,以及数据库表和JavaBean类的映射文件。
Struts
Struts是Web框架,学习Struts首先要理解MVC思想,即Model(模型)、View(视图)和Controller(控制器)。学习Struts时间最长,也是在spring mvc之前用得最多的。Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。三个组件相互配合,完成各个逻辑功能。
1.Struts的MVC结构
Struts的MVC到底指什么呢?
Model模型:这里的Model不只指我们项目Model层里的POJO对象。还包括Action对象,以及action调用的业务逻辑组件。
View视图:显然,视图就是指我们的JSP页面,以及Struts提供的标签库能够与我们的ActionFrom(包括request,session)进行交互。
Controller控制器:控制其主要就是指Struts的ActionServlet和ActionMapping,也就是我们配置的struts.xml.
2.ValueStack和StackContext
学习OGNL的时候,对这两个概念经常搞不清,总容易混淆。
ValueStack 称之为值栈,可以理解为StackContext的根对象,在Action里,要有set和get方法。在使用OGNL时,若访问的属性属于根对象,可以直接访问该属性,不用加’#’.
StackContext 叫做Stack的上下文,是整个OGNL的计算和求值的Context. 除了包含ValueStack这个根对象外,还包含一系列对象,包括request/session/application等。而访问这些命名对象时,要加’#’.
3.jstl和struts标签库
一直纠结这两个到底哪个好用,当然struts标签库只用应用与struts项目中。先学习过jstl,后来做项目的时候又一直用的struts的标签库,用起来感觉没什么差别,后来结合富文本编辑器从后台取数据的时候才发现,二者的取值方式不同。jstl取值的时候会转换里面的html标签,而struts标签取值的时候只是把值当做字符串输出到页面。(后来发现struts标签也可以通过设置escape=’1’,对html字符经行转义,当然jstl也可设置对html不进行转义,只是二者默认方式不同。但是Struts标签的访问速度要比jstl慢,效率低)
4.Struts的Ajax支持
自己做项目的时候最多用的就是jQuery中的Ajax的post函数,来实现异步请求。
用法:$.post(“”,{},function(data,textStatus){})
第一个引号里面传一个URL,一般就是一个action路径,第二个{}中传一个JSON对象,如{a:1,b:2}这样,把这个对象传给后台Action,后台通过set和get方法得到a和b的值,第三个function是方法实现体。用来处理后台传送回的数据和前台经行交互。
后台通过response.getWriter.print(“”)来向前台传递数据,存放到function中的data里。这样就实现了简单的Ajax的异步请求。
Spring
Spring框架的提出,就是为了解决不同容器间的耦合关系。通过Spring,各种不同特性的容器能够得到良好的融合。对于Spring来说,可以把它理解成为USB接口,通过USB接口,优盘、MP3、移动硬盘、甚至光驱、手机,都能够和PC相连并且收发数据。控制反转、依赖注入,都可以理解为是,只要向Spring容器中注册一个对象,这个对象就能被其他已经在容器中存在的对象使用或者其本身通过Spring容器使用其他对象。
Spring中要重点理解Bean和BeanFactory的意义。Bean就是注入的对象,BeanFactory就是管理这些对象的容器。另一点需要注意的是,Spring的注入方式多种多样,设值注入、构造子注入、接口注入都是注入的方式。掌握Spring的难点在于Spring的配置文件。Spring的配置文件就是指定Bean之间的依赖和控制关系的。
Spring的核心是IOC(控制反转),DI(依赖注入)和AOP(面向切面的编程)。
1.IOC/DI
IOC的思想最核心的地方在于,资源不由使用资源的双方管理,而由不使用资源的第三方管理,这可以带来很多好处。第一,资源集中管理,实现资源的可配置和易管理。第二,降低了使用资源双方的依赖程度,也就是耦合度。
2.AOP
AOP思想能从程序运行角度考虑程序的流程,提取业务处理过程的切面。其有着各个步骤之间有良好的隔离性,源代码无关性的特性。可以这样理解,可以把代码看成一坨面,同样用刀来切面,切完了,想在前面、中间、后面或者四周放些“香料”什么的随便你。你只要把这把刀实现好就行了。AOP面向的是程序运行中各个步骤,希望以更好的方式来组合业务处理的各个步骤。