SSH框架解析

SSH框架解析
SSH框架解析

1、前言:

鉴于目前还有很多同学对SSH框架编写流程不是非常的熟练与了解,特此写了这个

关于SSH流程的解析!个人认为对于框架流程的熟悉度至关重要的,比如A、B两个人都准备去天安门,A很熟悉去天安门的路线,而B压根就没去过,或者不是很明

确,就去天安门这个路程所需的时间而言A远远大于B,我们编写代码也是同样的

道理,所以在开发或者编写之前一定要先明确思路(流程)!

2、要求(必读):

2.1首先大家要明确SSH分别代表什么?它们分别是什么意思?有什么作用?

定义:SSH 为struts+spring+hibernate的一个集成框架,是目前较流行的一种Web 应用程序开源框架。

如果你现在对struts、spring、hibernate还不了解或者压根就不知道它们是干什么的,那么下面的内容就不用看了。先熟悉了上面3个知识点再看下面的内容吧!

2.2 SSH框架有那些层次,我们为什么要使用它,也就是说它相比其他框架有什么优势?

集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层,以帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的

Web应用程序。其中使用Struts作为系统的整体基础架构,充当MVC里的Controller

层,在Struts框架的模型部分,利用Hibernate框架对持久层提供支持,业务层用Spring支持。具体做法是:用面向对象的分析方法根据需求提出一些模型,将这些模型实现为基本的Java对象,然后编写基本的DAO接口,并给出Hibernate的DAO 实现,采用Hibernate架构实现的DAO类来实现Java类与数据库之间的转换和访问,最后由Service完成业务逻辑。

系统的基本业务流程是:在表示层中,首先通过JSP页面实现交互界面,负责传送请求(Request)和接收响应(Response),然后Struts根据配置文件(struts-config.xml)将ActionServlet接收到的Request委派给相应的Action处理。

在业务层中,管理服务组件的Spring IoC容器负责向Action提供业务模型(Model)组件和该组件的协作对象数据处理(DAO)组件完成业务逻辑,并提供事务处理、缓

冲池等容器组件以提升系统性能和保证数据的完整性。而在持久层中,则依赖于

Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据,并返回处理结果。(针对struts1)

采用上述开发模型,不仅实现了视图、控制器与模型的彻底分离,而且还实现了业务逻辑层与持久层的分离。这样无论前端如何变化,模型层只需很少的改动,

并且数据库的变化也不会对前端有所影响,大大提高了系统的可复用性。而且由于

不同层之间耦合度小,有利于团队成员并行工作,大大提高了开发效率。

其中struts分为了struts1和struts2从而SSH框架也分成了struts1整合的SSH和struts2整合的SSH框架!

3、架构分析:

为了方便记忆与理解,我特意合成了一组图片,struts1和struts2的结构层次图:

从框架结构的搭建上来看struts1和struts2可以说是大同小异,所以在搭建框架的时候可以以上图作为参考!

4、Struts1整合SSH分析:

首先分析下struts1整合的SSH框架,本次就以《华天动力协同OA系统》的登录为例!

既然是Struts1的整合,流程自然和Struts非常相似,大家可以先回顾一下Struts1的工作流程。

在Struts1工作流程第一点初始化中提到:struts框架的总控制器ActionServlet 是一个Servlet,它在web.xml中配置成自动启动的 Servlet,在启动时总控制器会读取配置文件(struts-config.xml)的配置信息,为struts中不同的模块初始化相应的对象。

4.1 web.xml分析:

现在咱们就看一下web.xml文件:

查看大图

标记2处已经明确的指出了struts1工作流程中的第一条!

标记1处所对应的位置看下图:

也就是说如果在conf包里还需要添加其他配置文件的话都要在web.xml图标记1的位置处下表明路径。

标记3和4分别是过滤器和验证码,和struts1中的配置一样,在这里不做过多解析。

4.2 struts-config.xml分析:

查看大图

标记1中是一个formbean的配置,其中标签中name属性所对应的是标记2中标签中name的属性,二者必须一致,否则会在点击登录的时候报空

指针错误:

查看大图

标记1中标签里type属性值是一个动态form,也就是说在action里

用的form类型是动态form,而下的子标签中name属

性值对应的是Model包中类的属性值,type即对用其类型。

在这里有一点需要注意如果model包中类的属性有int类型的,在中type的类型应该为:https://www.360docs.net/doc/4c815940.html,ng.Integer,(Oracle数据库),否则也会报空指针错误:

标记2中path和struts2中namespace是一个意思,并且和spring-struts.xml 文件中name属性相对应(下面会提到),type属性值的意思就是将动态form交给spring管理,看下对比:

查看大图

parameter属性暂时可以理解为固定写法,他和jsp页面form表单中action的路径有联系,

标签和struts2中一个意思。

4.3 hibernate.cfg.xml分析:

Hibernate.cfg.cml文件一般是用myeclipse自动生成,也可以复制到eclipse里使用。

标记1中name的属性值是一个固定写法,它所对应的是使用的数据库的类型。

标记2中name的属性也可以理解为固定写法,Myeclipse也可以生成,如果设置成true的话会在控制台输出sql语句,默认不输出。

标签中所对应的是从数据库表中生成java类的一个配置文件,路径一定要对应否则在tomcat启动的时候就会报如下错误:

错误太长只截了一部分,但是拖动滚动条在后面可以看到下面提示:

已经非常明确的指出了错误的原因,在这里提醒一下,遇见bug一点要仔细分析bug 的提示,不要一味的求助,一味的求助反而造成错误库的积累问题,以后要是没人帮你该怎么办?<有点扯远了>

接着分析一下从数据库表中生成java类的一个配置文件(userlogin.hbm.xml为例):

注意:在用数据库(Oracle)生成类的时候数据库表中必须有一个主键,否则生成java类的时候会多生成一个javaId类,其他数据库暂时没有这个问题

看图分析:

Calss标签中name属性对应的是从数据库生成的java类,路径一定要对应否则在tomcat启动的时候就会报错:

看后面提示:

注意:路径之间必须用.而不是/否则一样会报错。

1、Table属性对应数据库中的表名,schema对应的是数据库的用户名。

2、Id标签中 name属性对应的是类中的id属性,type类型在这里需要特别注意下,如果你是使用myeclipse的话并且在类中是Int类型的话在这里也必须写Int类型,不能写成https://www.360docs.net/doc/4c815940.html,ng.Integer,否则会报错,eclipse不会报错,这个问题也在我写这些文档的时候发现的。(庆祝一下o(∩_∩)o)

3、标签中是id在数据库的自动插入方式,这里是以Oralce为例,所以在Oralce数据库中必须建一个序列,用做Id的自增,mysql不用,这个是重点!如果还有不懂的就去翻翻曾经老师讲过的一些视频、资料等等。

4、标签中name属性同样对应的是model类中属性的值,type对应类型,Myeclipse会自动生成,标签对用数据库中表的字段名。

4.4 datasource.xml分析:

从名字上就分析出它是用来干什么的,看图分析:

其中标签中Id属性对应的是spring-common.xml中sessionFactory配置中标签的name属性,此时必须保重Id的唯一性。其他属性不在做过多分析!

4.5 spring-common.xml分析:

这个配置文件主要针对sessionFactory、事务管理、事务传播等的一些配置,老师在讲解Spring的时候做过详细的分析,在这里就不做分析!

4.6 spring-common.xml分析:

看图分析:

Name属性对应struts-config.xml中的一个path属性(上面已经提到),如果不对应就会报如下错误:

Class属性对应Action,路径一定不能写错,singlethon如果等于false的话就是创建多个实例,否则就是创建单个。

标签中的name属性和ref属性对应的是spring-service.xml文件中Id 的属性(看下面分析)!

4.7 spring-service.xml分析:

看图分析:

Id属性对应spring-struts.xml文件中标签下的的name属性和ref属性!并且要和Action中调用service的实现对应(后面会分析),class对应的是service包里的实现类,标签中的name属性和ref属性不但要和spring-dao.xml文件中Id的属性相对应(看下面分析)而且和service包中的实

现类里的调用相对应,

掉用的Dao必须写get、set方法。

4.8 spring-dao.xml分析:

看图分析:

Id属性对应spring-service.xml文件中标签下的的name属性和ref属

性!标签中的name属性和ref属性和spring-common.xml配置文件中sessionFactory配置的Id 相对应!

5、Struts2整合SSH分析:

在第3章已经进行了框架的简单分析,和strus1大同小异!从宏观上来看struts2比struts1少了struts-config.xml文件,但是多了一个struts.xml文件,在学习struts2整合SSH之前可以先回顾一下Struts2 概述和Struts2的工作流程!

6.1 web.xml分析:

看图分析:

查看大图

标记1处和struts1一个道理,标记2处凡是仔细看struts2流程的都会知道(1、加载类(FilterDispatcher))!

标记2处标签指明了struts.xml文件的位置,其实这一步可以不写,因为当tamcat启动的时候会自动查找并读取!

6.2 struts.xml分析:

看图分析:

查看大图

不做过多的书面解析,图中已经解释的很清楚!

6.3 struts-article.xml分析:

看图分析:

查看大图

标签中name属性值可以自定义,根据自己的需求,extends属性,在没有特殊要求的情况下都是继承struts-default

Namespace属性和struts1中的path一样,都是一个工作空间

再下面又分了很多标签,其中action标签中的name属性对应的是jsp页面form里的action的值,如果是ajax提交的话看图:

11对应,22对应!

其他配置文件和struts1一样,不做分析!

6、Struts整合SSH后续:

就现在而言流程已经走的差不多了,其他一些逻辑就不做分析了,但是要明确一点:Action调用service,service调用dao,如果没有什么特殊要求的话所有的逻辑判断都要写在service里,dao中只写一下关于访问数据库的信息。

相关主题
相关文档
最新文档