北京动力节点-Spring4讲义-第5章SSH框架整合技术
SSH框架讲义

S t r u t s框架讲义主讲目录一、 Struts 的基本概念二、 Struts 优缺点三、 Struts 的设计模式与工作机制四、 Struts 的工作原理五、 Struts 在应用中的实施经验六、 Struts 应用举例七、 Struts 总结Struts的基本概念●Struts是Apache 基金会Jakarta 项目组的一个OpenSource 项目●采用MVC模式●Struts 是面向对象设计●Structs 框架的核心是一个弹性的控制层,基于如Servlets,JavaBeans,ResourceBundles与XML等标准技术,以及 Jakarta Commons 的一些类库。
Struts 有一组相互协作的类(组件)、Serlvet以及jsp tag lib组成●Struts有其自己的控制器(Controller),同时整合了其他的一些技术去实现模型层(Model)和视图层(View)。
模型层,Struts可以很容易的与数据访问技术相结合,如 JDBC / EJB ,以及其它第三方类库,如 Hibernate / iBATIS ,或者 ObjectRelational Bridge(对象关系桥)。
在视图层,Struts能够与JSP,包括 JSTL 与 JSF,以及 Velocity 模板,XSLT 与其它表示层技术。
●Struts 为每个专业的 Web 应用程序做背后的支撑,帮助为你的应用创建一个扩展的开发环境。
Struts优缺点一、Struts优点1、提高软件的设计效率,严格基于MVC,是软件结构清晰、易维护、易扩展,使开发者只关注业务逻辑的实现;2、Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点。
使开发者能更深入的了解其内部实现机制;3、Taglib:Taglib是Struts的标记库,灵活动用,能大大提高开发效率。
另外,就目前国内的JSP开发者而言,除了使用JSP自带的常用标记外,很少开发自己的标记,或许Struts是一个很好的起点。
SSH框架搭建详细图文教程

框架的搭点击完成。
更改Folder路径,选择SSH项目WebRoot文件夹下的WEB-INF,完成。
SSH框架搭建详细图文教程现在项目的目录结构如下,Spring框架添加完成。
SSH框架搭建详细图文教程4.连接数据库。
点击右上角的图标"打开透视图",选择MyEclipse Database Explorer。
在窗口中右键->New 新建一个数据库连接。
SSH框架搭建详细图文教程Driver template 选择 MySQL Connector/JDriver name 起名叫testConnection URL 更改为jdbc:mysql://自己的IP地址:端口号/数据库名称User name 填写MySQL的用户名Password 填写MySQL的密码Driver JARs 点击Add JARs按钮,浏览到事先准备的mysql-connector-java-5.0.8-bin.jar Save password 选上SSH框架搭建详细图文教程点击Test Driver,测试结果:数据库配置正确,点击完成。
SSH框架搭建详细图文教程双击添加的test连接,展开目录,可以发现我们事先创建的user表。
SSH框架搭建详细图文教程5.添加Hibernate框架。
右键SSH项目,选择MyEclipse->Add Spring Capabilities。
点击下一步。
SSH框架搭建详细图文教程配置中选择第二项"Spring configuration file"。
把Spring与Hibernate整合到一起,点击下一步。
SSH框架搭建详细图文教程在菜单中选第二项"Existing Spring configuration file",点击下一步。
SSH框架搭建详细图文教程DB Driver选择在添加Spring框架时配置的test,点击下一步。
北京动力节点-SSH前言讲义

SSH前言第1章系统架构所谓系统架构是指,整合应用系统程序大的结构。
经常提到的系统结构有两种:三层架构与MVC。
这两种结构既有区别,又有联系。
但这两种结构的使用,均是为了降低系统模块间的耦合度。
1.1 三层架构三层架构是指:视图层View、服务层Service,与持久层Dao。
它们分别完成不同的功能。
View层:用于接收用户提交请求的代码在这里编写。
Service层:系统的业务逻辑主要在这里完成。
Dao层:直接操作数据库的代码在这里编写。
为了更好的降低各层间的耦合度,在三层架构程序设计中,采用面向抽象编程。
即上层对下层的调用,是通过接口实现的。
而下层对上层的真正服务提供者,是下层接口的实现类。
服务标准(接口)是相同的,服务提供者(实现类)可以更换。
这就实现了层间解耦合。
1.2 MVCMVC,即Model模型、View视图,及Controller控制器。
View:视图,为用户提供使用界面,与用户直接进行交互。
Model:模型,承载数据,并对用户提交请求进行计算的模块。
其分为两类,一类称为数据承载Bean,一类称为业务处理Bean。
所谓数据承载Bean是指实体类,专门用户承载业务数据的,如Student、User等。
而业务处理Bean则是指Service或Dao对象,专门用于处理用户提交请求的。
Controller:控制器,用于将用户请求转发给相应的Model进行处理,并根据Model的计算结果向用户提供相应响应。
MVC架构程序的工作流程是这样的:(1)用户通过View页面向服务端提出请求,可以是表单请求、超链接请求、AJAX请求等(2)服务端Controller控制器接收到请求后对请求进行解析,找到相应的Model对用户请求进行处理(3)Model处理后,将处理结果再交给Controller(4)Controller在接到处理结果后,根据处理结果找到要作为向客户端发回的响应View页面。
页面经渲染(数据填充)后,再发送给客户端。
SSH整合详细(免费下载)

开源项目终于,终于将SSH整合成功了,弄了几个小时,可以休息了(有的朋友弄了半个月,甚至重装了系统也没弄好,哎,庆幸啊)。
碰到问题千万不要放弃,要相信没有解决不了的问题!项目结构图:jsp部分为:index.jsp;success.jsp;fail.jspUserDAO.java,User.hbm.xml自动生成,HibernateSessionFactory是多余的。
相关的配置文件、类文件详细信息,请参看Struts+Spring+Hibernate/SSH整合开发详细二以前是整过这三个框架的,可是工作期间都不曾用过,不知不觉之中,学的东西全忘了。
这次又要开始找工作了,看着招聘启事上都写着:要求熟练掌握Struts,Hibernate或Spring框架……,没得办法,重新学呗。
Spring in Action中文版下载地址(ftp协议)ftp://222.214.218.61/book5/20080228/cf8b35cc-5bcd-4973-b6b7-37a e3ec78391.rar如果无法下载,可以在里重新搜索首先开始搭建项目环境,步骤如下:使用平台:MyEclipse 6.0框架版本:Struts 1.2 Hibernate 3.0 Spring 2.01> 添加过程:<1> 新建项目。
Package Explorer视图下,右键单击 New -> Web Project;<2> 添加Struts框架。
菜单栏MyEclipse -> Capabilities,或者右键单击新建的项目名,选择快捷菜单中的"MyEclipse"下的二级菜单;设置相关的包名后,请写一个Struts的小例子,用来测试Struts是否可用;<3> 添加Spring。
步骤同2所述,只不过这次是加入Spring Capabilities。
详细添加步骤如下图所示;<4> 配置数据源。
北京动力节点-Spring4讲义-第5章SSH框架整合技术

第5 章SSH 框架整合技术5.1 Spring 与Hibernate 整合除了JdbcTemplate 外,Spring 还可通过Hi b e r nate 来完成Dao 的工作。
即将Spring 与Hibernate 进行整合。
举例:项目spring_hibernate(在dao_jdbcTemplate 基础上修改)5.1.1 导入Jar 包除了Spring 的基本Jar 包外,还需要以下几种Jar 包:(1)Spring AOP 的两个Jar 包(2)AspectJ 的两个Jar 包(3)Spring 的JDBC 的Jar 包(4)Spring 整合ORM 的Jar 包Spring 整合ORM 框架的Jar 包,在Spring 框架解压目录下的libs 目录中。
(5)Spring 的事务Jar 包Spring 的事务Jar 包,在Spring 框架解压目录下的libs 目录中。
(6)Hibernate 的基本Jar 包Hibernate 的基本Jar 包中已经包含了C3P0 数据源的Jar 包,且版本高于Spring 中提供的版本。
所以直接使用Hibernate 中的即可。
2Hibernate 的基本Jar 包中已经包含了MySql 的驱动Jar 包,所以不用再导入了。
5.1.2 实体映射文件的配置5.1.3 注册数据源Spring 配置文件中数据源与jdbc 属性文件的注册,与template_jdbc 项目中的相同。
5.1.4 配置SessionFactorySpring 的精髓是,所有的Bean 均由Spring 容器统一管理,所以在SPring 中若要使用Hibernate,就需要将SessionFactory 交由Spring 来管理。
配置SessionFactory 的Bean,将hibernate.cfg.xml 文件替换掉。
使用的实现类为LocalSessionFactoryBean,注意,是hibernate5 包下的。
SSH框架整合项目(一)

SSH框架整合项⽬(⼀)这⾥整合的是struts2 + spring + hibernate框架,只是简单的整合。
项⽬⼯程的结构如下:下⾯是使⽤的pom⽂件。
<properties><!-- 统⼀源码的编码⽅式 --><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!-- 统⼀各个框架版本 --><struts.version>2.5.10</struts.version><spring.version>4.3.8.RELEASE</spring.version><hibernate.version>5.1.7.Final</hibernate.version></properties><dependencies><!-- Junit依赖 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!-- Spring 核⼼依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><!-- Spring web依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><!-- Spring整合ORM框架依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>${spring.version}</version></dependency><!-- Struts2 核⼼依赖 --><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-core</artifactId><version>${struts.version}</version></dependency><!-- Struts2和Spring整合依赖 --><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-spring-plugin</artifactId><version>${struts.version}</version></dependency><!-- Hibernate 核⼼依赖 --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>${hibernate.version}</version></dependency><!-- MySQL 依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.42</version></dependency><!-- HikariCP 依赖 --><dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId><version>2.7.4</version></dependency><!-- AspectJ依赖 --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.10</version></dependency><!-- SLF4J依赖 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.25</version></dependency></dependencies></project>第⼀部分,整合hibernate和spring⾸先创建⼀个hibernate.cfg.xml配置⽂件,因为整合后,需要将sessionFactory交给spring来管理。
第3章-SSH框架整合
json-lib-2.3-jdk15.jar
支持JSON格式数据的插件包
struts2-dojo-plugin-2.3.4.1.jar Struts2整合DOJO框架的插件,DOJO是一个面向 对象的JavaScript框架,其作用类似于ExtJs
struts2-spring-plugin-2.3.4.1.jar Spring和Struts2整合时需要的插件包
掌握整合Spring 和Hibernate的基本步骤 记住各种配置的代码,理解各种配置的作用 掌握HibernateTemplate的使用
演示示例:整合Spring 和Hibernate 框架
第6页/共36页
SSH程序架构:
串讲:SSH程序架构
SessionFactory管 理Session
数据源管理连接池, 并提供链接对象
private UserDao userDao; private GroupDao groupDao;
实现业务接口
public List<User> searchAll(){
return erDao.findAll();
}
//省略getter、setter和其他业务方法
为Service注入需要的Dao
定义了Spring的核心类库,Spring 的其他组件都要用到它
org.springframework.beans-3.1.1.RELEASE.jar 定义了访问配置文件、创建并管 理Bean等相关的类
org.springframework.context-3.1.1.RELEASE.jar 为Spring提供扩展,使用 ApplicationContext、JNDI、模板 等功能时需要它
SSH 框架整合步骤详细讲解-8页精选文档
基于myeclipse 8.6M1 的三大框架整合(spring3.0+strut 2.1+hibernate 3.3+mysql)Xiangyun2019-4-9目录1、编写目的 (2)2、搭建环境 (2)3、配置数据源 (2)4、开始创建工程 (3)5、增加Spring框架: (3)6、增加Hibernate框架: (4)7、增加strut2 框架 (5)8、配置Web.xml (5)9、映射实体类 (5)10、编写service和action (6)11、在applicationContext.xml 配置service、action和配置 (7)12、创建index.jsp 和welcome.jsp (7)13、测试(此测试版本如下图) (7)14、总结 (7)1、编写目的最近在学习spring3.0+strut 2.1+hibernate 3.3整合,这期间出现了很多问题,在网上找了若干的实例均有不同程度的问题,为了让想要学习这个整合的人少走弯路,特写下这篇文章,希望对大家有所帮助,如果有很么问题可以与我联系,Email:237567685@qq测试版本代码地址:/detail/goumin1818/5241012(建议先按照此文档自己动手搭建以下,有需要再下载完整的例子)2、搭建环境Myeclipse 8.6M1Tomcat 6.0Mysql 5.2JDK 1.6数据库脚本程序CREATE TABLE `user` (`id` int(20) unsigned NOT NULL AUTO_INCREMENT,`username` varchar(50) DEFAULT NULL,`password` varchar(50) DEFAULT NULL,PRIMARY KEY (`id`)insert into `user`(`id`,`username`,`password`) values(1,'admin','admin'),(2,'zhangsan','zhangsan');3、配置数据源在myeclipse 右上角打开Myeclipse Database Explorer 数据库管理视图右键鼠标,弹出框,选择New 新建Database Driver如下图:在Driver Template 中选择:在Driver name :写上名字可以随便写(这里测试写的是:mysql )在Connection URL 填写好链接地址:jdbc:mysql://localhost:3306/text填好自己数据库用户名和密码增加mysql驱动jar包在Driver JARs 点击Add JARs 找到mysql驱动jar 包(此测试使用的驱动jar 包是:mysql-connector-java-5.1.5-bin.jar)需要填写的东西都填写好后,最后进行测试下,是否可以链接成功。
SSH的整合及工作原理
三、这时请求以经到达业务逻辑类,而在业务逻辑类里面我们又会调用dao类,还是那句话,spring是通过接口来松散藕合的,所以我们会定义一个dao类的接口,并设置为业务逻辑类里面的一个属性,生成对应的set方法,主要是为了等会spring的ioc注入,同时我们要在spring配置文件中配置DAO类,并为业务逻辑类里面的dao接口属性设置值,值就是上面在spring中配置的dao类实例,调用方法。
</list>
</property>
</bean>
SSH的工作原理:
一、客户端发送一个请求到服务器,服务器将请求路径转交给spring代理,这时spring容器就解析请求路径,找到对应的action,并实例化。
二、这时请求到达action,而在action里面我们会调用业务逻辑类(biz),同时spring是通过接口来松散藕合的,所以我们会定义一个业务逻辑类的接口定义,并设置为action里面的一个属性,生成对应的set方法,主要是为了等会spring的ioc注入,同时,我们要在spring的配置文件中配置业务逻辑类,并为action类里面的业务逻辑类接口属性设置值,值就是上面在spring中配置的业务逻辑类实例。调用方法。到此,spring与struts合作工作结束。
</props>
</property>
</bean>
<!-- 自动代理 -->
<bean id="autoProxy" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
ssh框架用法
SSH框架用法1. 什么是SSH框架SSH框架是一种用于构建分布式系统的开发框架,它由三个关键组件组成:Spring、Struts和Hibernate。
这三个组件分别负责处理应用程序的业务逻辑、Web层和数据访问层。
通过将它们集成在一起,SSH框架提供了一个完整的解决方案,使开发人员能够更快速、更高效地开发和维护复杂的分布式系统。
2. SSH框架的优势SSH框架具有以下几个优势:•模块化:SSH框架将整个应用程序划分为不同的模块,每个模块负责不同的功能。
这种模块化设计使得应用程序易于维护和扩展。
•松耦合:SSH框架使用依赖注入(Dependency Injection)来管理各个组件之间的依赖关系。
这种松耦合的设计使得各个组件可以独立开发、测试和部署。
•高效性能:SSH框架采用了多种优化技术,如缓存、懒加载等,来提高应用程序的性能。
同时,Hibernate作为数据访问层的组件,可以利用其自身的缓存机制来减少数据库访问次数,进一步提高性能。
•安全性:SSH框架提供了多种安全措施,如用户认证、权限控制等,以保护应用程序的安全。
同时,SSH框架还支持HTTPS协议,可以加密数据传输,提高数据的安全性。
3. SSH框架的核心组件SSH框架由三个核心组件组成:•Spring:Spring是一个轻量级的Java开发框架,它提供了依赖注入、面向切面编程等功能。
在SSH框架中,Spring负责处理应用程序的业务逻辑。
通过使用Spring的IoC容器和AOP技术,开发人员可以更方便地管理各个业务组件之间的依赖关系,并实现横切关注点的模块化。
•Struts:Struts是一个基于MVC设计模式的Web开发框架,它负责处理应用程序的Web层。
在SSH框架中,Struts作为前端控制器接收用户请求,并将请求转发给相应的业务处理组件。
通过使用Struts的标签库和拦截器机制,开发人员可以更方便地实现表单验证、页面跳转等功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第5章SSH框架整合技术5.1 Spring与Hibernate整合除了JdbcTemplate外,Spring还可通过Hibernate来完成Dao的工作。
即将Spring与Hibernate进行整合。
举例:项目spring_hibernate(在dao_jdbcTemplate基础上修改)5.1.1 导入Jar包除了Spring的基本Jar包外,还需要以下几种Jar包:(1)Spring AOP的两个Jar包(2)AspectJ的两个Jar包(3)Spring 的JDBC 的Jar 包(4)Spring 整合ORM 的Jar 包Spring 整合ORM 框架的Jar 包,在Spring 框架解压目录下的libs 目录中。
(5)Spring 的事务Jar 包Spring 的事务Jar 包,在Spring 框架解压目录下的libs 目录中。
(6)Hibernate 的基本Jar 包Hibernate 的基本Jar 包中已经包含了C3P0数据源的Jar 包,且版本高于Spring 中提供的版本。
所以直接使用Hibernate中的即可。
Hibernate的基本Jar包中已经包含了MySql的驱动Jar包,所以不用再导入了。
5.1.2 实体映射文件的配置5.1.3 注册数据源Spring配置文件中数据源与jdbc属性文件的注册,与template_jdbc项目中的相同。
5.1.4 配置SessionFactorySpring的精髓是,所有的Bean均由Spring容器统一管理,所以在SPring中若要使用Hibernate,就需要将SessionFactory交由Spring来管理。
配置SessionFactory的Bean,将hibernate.cfg.xml文件替换掉。
使用的实现类为LocalSessionFactoryBean ,注意,是hibernate5包下的。
其用于设置的属性主要有三个:数据源,映射文件,及hibernate 特性。
其设置内容,与Hibernate 主配置文件的基本相同。
(1)注意映射文件的注册方式这里直接指定的为映入文件所在的包,其中可能包含多个映射文件。
也可写为如下形式:若只有一个映射文件对于有多个映射文件,可使用<list/>列出:当然,若有多个存放映射文件的目录,也可使用<list/>列出。
(2)注意当前Session上下文所使用的类至于Hibernate特性的设置,除了hibernate.current_session_context_class外,其余key 与Hibernate主配置文件中的属性名相同,值也相同。
属性hibernate.current_session_context_class,用于指定当前Session所执行的上下文环境。
其值不再是thread,而是SpringSessionContext,表示Session将交由Spring容器来管理。
5.1.5 定义Dao实现类由于Dao实现类要通过Hibernate来操作DB,所以在该类中需要获取到Session工厂对象SessionFactory。
当然,最终目的是获取到Hibernate的Session对象。
而SessionFactory对象的创建,也是由Spring容器来管理的,所以,需要在Dao实现类中添加SessionFactory属性,以便Spring容器通过setter将Session工厂注入。
注意,Dao实现类无需继承自任何父类,只要将SessionFactory定义为set属性即可。
而Hibernate的Session对象,是通过SessionFactory的getCurrentSession()方法获取的。
5.1.6 注册Dao 与Service 的Bean在Spring 配置文件中注册dao 与service 对象,注意需将sessionFactory 注入给Dao 。
5.1.7 配置事务管理器由于Hibernate 的Session 要求必须在事务环境下才能运行,所以在Spring 中使用Hibernate ,必须要配置事务管理器,以开启事务环境。
此时使用的事务管理器为HibernateTransactionManager 。
需要注意的是,使用Jdbc 的事务管理器,需要注入一个数据源dataSource ,而使用Hibernate 的事务管理器,则需要注入一个sessionFactory 属性。
5.1.8 配置事务通知及顾问5.1.9 在Spring中一般不使用Hibernate模板对象(了解)在SSH中,Dao获取Hibernate的Session,还有一种方式,通过HibernateT emplate获取。
但一般不使用Hibernate模板,而是通过在Dao中定义SessionFactory,由容器向其注入。
在Dao中,通过SessionFactory的方法getCurrentSession()获取Session。
为什么不使用Hibernate模板呢?查看HibernateT emplate源码,发现Hibernate模板对象中方法的执行所使用的Session,就是通过getCurrentSession()获取的。
使用模板对象后,遇到复杂查询,还需要使用其execute()方法,通过回调接口HibernateCallback在获取到Session后,再执行HQL语句。
转了一大圈后,又绕到了获取当前Session,而且获取的这个Session也是通过getCurrentSession()获得的。
所以,最终不如放弃Hibernate模板,直接通过getCurrentSession()获得Session对象。
下面以模板对象的save()方法的源码为例,来查看其Session的获取情况。
5.2 Spring在Web项目中的使用在Web项目中使用Spring框架,首先要解决在Servlet中(暂时不使用Struts2)获取到Spring容器的问题。
只要在View层获取到了Spring容器,便可从容器中获取到Service对象。
5.2.1 不使用Spring的Web插件举例:springweb项目(在dao_hibernate基础上修改)Step1:新建一个Web ProjectStep2:定义index页面Step3:定义LoginServlet(重点代码)Step4:定义success页面Step5:复制dao_hibernate中内容将dao_hibernate项目中以下内容复制到当前项目中:(1)Service层、Dao层全部代码(2)配置文件applicationContext.xml及jdbc.properties(3)所有Jar包Step6:直接发布运行Step7:运行结果分析当表单提交,跳转到success.jsp后,多刷新几次页面,查看后台输出,发现每刷新一次页面,就new出一个新的Spring容器。
即,每提交一次请求,就会创建一个新的Spring容器。
对于一个应用来说,只需要一个Spring容器即可。
所以,将Spring容器的创建语句放在Servlet的doGet()或doPost()方法中是有问题的。
此时,可以考虑,将Spring 容器的创建放在Servlet 进行初始化时进行,即执行init()方法时执行。
并且,Servlet 还是单例多线程的,即一个业务只有一个Servlet 实例,所有执行该业务的用户执行的都是这一个Servlet 实例。
这样,Spring 容器就具有了唯一性了。
但是,Servlet 是一个业务一个Servlet 实例,即LoginServlet 只有一个,但还会有StudentServlet 、T eacherServlet 等。
每个业务都会有一个Servlet ,都会执行自己的init()方法,也就都会创建一个Spring 容器了。
这样一来,Spring 容器就又不唯一了。
5.2.2 使用Spring 的Web 插件举例:springweb2项目 (在springweb 项目基础上修改)对于Web 应用来说,ServletContext 对象是唯一的,一个W eb 应用,只有一个ServletContext 对象,该对象是在W eb 应用装载时初始化的。
若将Spring 容器的创建时机,放在ServletContext 初始化时,就可以保证Spring 容器的创建只会执行一次,也就保证了Spring 容器在整个应用中的唯一性。
当Spring 容器创建好后,在整个应用的生命周期过程中,Spring 容器应该是随时可以被访问的。
即,Spring 容器应具有全局性。
而ServletContext 对象的域属性,就具有应用的全局性。
所以,将创建好的Spring 容器,以域属性的形式放入到ServletContext 的域空间中,就保证了Spring 容器的全局性。
上述的这些工作,已经被封装在了如下的Spring 的Jar 包的相关API 中:spring-web-4.2.1.RELEASE.jar(1)导入Jar 包在Web 项目中使用Spring ,需要导入Spring 对Web 的支持包:spring-web-4.2.1.RELEASE.jar 。
该包在Spring 框架的解压目录下的libs目录中。
(2)注册监听器ContextLoaderListener若要在ServletContext初始化时创建Spring容器,就需要使用监听器接口ServletContextListener对ServletContext进行监听。
在web.xml中注册该监听器。
Spring为该监听器接口定义了一个实现类ContextLoaderListener,完成了两个很重要的工作:创建容器对象,并将容器对象放入到了ServletContext的域属性空间中。
打开ContextLoaderListener的源码。
看到一共四个方法,两个是构造方法,一个初始化方法,一个销毁方法。
所以,在这四个方法中较重要的方法应该就是contextInitialized(),context初始化方法。
跟踪initWebApplicationContext()方法,可以看到,在其中创建了容器对象。
并且,将创建好的容器对象放入到了ServletContext 的域属性空间中,key 为一个常量: WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE 。
(3)指定Spring 配置文件的位置<context-param/>ContextLoaderListener 在对Spring 容器进行创建时,需要加载Spring 配置文件。