spring(四) 手动整合web项目(SSH)

      清楚了spring的IOC 和 AOP,最后一篇就来整合SSH框架把,记录下来,以后应该会用的到。

                    --WH

一、web项目中如何使用spring?

      当tomcat启动时,就应该加载spring的配置文件,而不是每次都要手动使用new  ClassPathXmlApplicationContext来加载xml。所以,spring提供了一个ContextLoaderListener。有了它,tomcat启动时,就会加载配置文件。

      导入spring.web....jar

          

      1、web.xml中添加监听器

          

1 <!-- 配置监听器,用于加载spring 配置文件 -->
2     <listener>
3         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
4     </listener>

        这样配置的监听器,默认加载的是WEB-INF目录下的xml文件,而我们的配置文件在src下,所以需要进行下一步的配置。

      2、web.xml中配置 applicationContext.xml 位置

          

1 <!-- 设置web全局初始化参数,设置配置文件位置
2         * 名称#contextConfigLocation 固定值
3         * 值# “classpath:”表示类路径(src)
4             也可以有子包 #  classspath:com/wuhao/applicationContext.xml
5     -->
6     <context-param>
7         <param-name>contextConfigLocation</param-name>
8         <param-value>classpath:applicationContext.xml</param-value>
9     </context-param>

      3、从ServletContext中获得spring容器,创建的容器已经放在ServletContext中了

            

1 //方式1:手动从ServletContext作用域获得内容
2         //WebApplicationContext applicationContext = (WebApplicationContext) this.getServletContext().getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
3
4         //方式2:提供工具类
5         WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());

          

二、SSH整合所用到的jar包

      2.1、struts2所需jar

        版本:2.3.15.1

        位置:struts-2.3.15.1\apps\struts2-blank\WEB-INF\lib

            

          总共:13个jar包        

      2.2、hibernate

          版本:3.6.10

          所需jar

              1、核心jar:hibernate3.jar

                  

              2、必须:lib/required 所有

                  

              3、jpa :lib\jpa 所有

                  

              4、c3p0 \lib\optional\c3p0

                  

              5、 log4j 整合jar  slf4j-log4j12-1.7.2.jar

                  

              6、mysql驱动包  mysql-connector-java-5.1.22-bin.jar

                   

              7、二级缓存  ehcache-1.5.0.jar  、backport-util-concurrent.jar 原本要导3个,logging包在前面struts包中有了,所以无需在导入

                                  

           hibernate总共:13个jar包

      2.3、spring

          版本:3.2.0

          jar包:

             核心:4个(core、beans、expression、context) + commons-logging..jar(这个jar包在前面很多地方导入过,struts2、hibernate的二级缓存、spring都需要,只需要导一份即可)

                  

              aop:aop联盟、spring aop、aspectj、spring-aspect

                  aop联盟:spring-framework-3.0.2.RELEASE-dependencies\org.aopalliance\com.springsource.org.aopalliance\1.0.0

                  spring aop和spring-aspect:在核心包中

                  aspectj:spring-framework-3.0.2.RELEASE-dependencies\org.aspectj\com.springsource.org.aspectj.weaver\1.6.8.RELEASE     

              jdbc:2个 spring-jdbc、spring-tx

              web:1个 spring-web

              test:1个 spring-test (整合测试)

          总共:12个

      2.4、整合jar

          spring3 整合hibernate3,spring提供整合jar : spring-orm...jar

          struts2 整合 spring3 ,struts提供整合jar:struts2-spring-plugin-2.3.15.1.jar

              位置:struts-2.3.15.1\lib

          总共:2个

        

      2.5、整理jar

          前面拿到总共39个,去除一个重复的,剩下总共38个。

                

          

三、配置文件

      3.1、hibernate

          hibernate.cfg.xml  核心配置文件

          *.hbm.xml  映射文件(domain)

      3.2、spring

          applicationContext.xml

          jdbcInfo.properties

          web.xml(ContextLoaderListener)

      3.3、struts2

          struts.xml

          web.xml(前端过滤器  StrutsPrepareAndExecuteFilter)

      

四、spring整合hibernate

      4.1、首先要了解hibernate的配置文件,和hibernate需要什么,然后如何将其让spring来管理。

          hibernate.cfg.xml

            

            

        通过这两个图,可以知道,spring需要帮hibernate获取session,而获取session则先要获得sessionFactory,获取sessionFactory则需要加载配置文件。所以spring就需要提供两个东西,一个sessionFactory,一个session。spring如何做的呢?

            

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xsi:schemaLocation="
 5 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 6
 7 <!-- 配置数据源  c3p0,-->
 8 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
 9     <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
10     <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test_1"></property>
11     <property name="user" value="root"></property>
12     <property name="password" value="root"></property>
13 </bean>
14
15 <!-- 获取sessionFactory需要加载hibernate.cfg.xml获取其中的配置的信息,那么直接将那些配置信息在这里配置 -->
16 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
17     <property name="dataSource" ref="dataSource"></property>
18     <!-- 配置一些其他的信息,方言等 -->
19     <property name="hibernateProperties">
20         <props>
21             <prop key="hibernate.dialect">
22                 org.hibernate.dialect.MySQLDialect
23             </prop>
24             <prop key="hibernate.show_sql">true</prop>
25             <prop key="hibernate.format_sql">true</prop>
26             <prop key="hibernate.hbm2ddl.auto">update</prop>
27         </props>
28     </property>
29     <!-- 添加映射文件 -->
30     <property name="mappingLocations" value="classpath:com/wuhao/domain/User.hbm.xml"></property>
31 </bean>
32
33 <!-- hibernate中通过sessionFactory创建得session对对象进行操作,spring提供一个hibernateTemplate进行操作,跟spring中的jdbcTemplate一样,
34     继承HibernateDaoSupport后,注入SessionFactory即可,在dao层就不用在写hibernateTemplate的set方法了。
35  -->
36  <bean id="userDao" class="com.wuhao.dao.UserDao">
37      <property name="sessionFactory" ref="sessionFactory"></property>
38  </bean>
39
40
41 </beans>

        使用:

             

        这样一来,就可以将hibernte.cfg.xml给删除掉了。

        还有一个问题,事务的处理。

        简单,之前一篇文章我们就讲解了spring如何进行事务管理的,那时候使用的是jdbc管理器,现在换一个即可,使用hibernate事务管理器

            

        所以整合完hibernate后,spring的配置文件就成了这样

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:aop="http://www.springframework.org/schema/aop"
 5        xmlns:tx="http://www.springframework.org/schema/tx"
 6        xsi:schemaLocation="http://www.springframework.org/schema/beans
 7                               http://www.springframework.org/schema/beans/spring-beans.xsd
 8                               http://www.springframework.org/schema/aop
 9                               http://www.springframework.org/schema/aop/spring-aop.xsd
10                               http://www.springframework.org/schema/tx
11                               http://www.springframework.org/schema/tx/spring-tx.xsd">
12 <!-- hibernate -->
13 <!-- 配置数据源  c3p0,-->
14 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
15     <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
16     <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test_1"></property>
17     <property name="user" value="root"></property>
18     <property name="password" value="root"></property>
19 </bean>
20
21 <!-- 获取sessionFactory需要加载hibernate.cfg.xml获取其中的配置的信息,那么直接将那些配置信息在这里配置 -->
22 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
23     <property name="dataSource" ref="dataSource"></property>
24     <!-- 配置一些其他的信息,方言等 -->
25     <property name="hibernateProperties">
26         <props>
27             <prop key="hibernate.dialect">
28                 org.hibernate.dialect.MySQLDialect
29             </prop>
30             <prop key="hibernate.show_sql">true</prop>
31             <prop key="hibernate.format_sql">true</prop>
32             <prop key="hibernate.hbm2ddl.auto">update</prop>
33         </props>
34     </property>
35     <!-- 添加映射文件 -->
36     <property name="mappingLocations" value="classpath:com/wuhao/domain/User.hbm.xml"></property>
37 </bean>
38
39 <!-- hibernate中通过sessionFactory创建得session对对象进行操作,spring提供一个hibernateTemplate进行操作,跟spring中的jdbcTemplate一样,
40     继承HibernateDaoSupport后,注入SessionFactory即可,在dao层就不用在写hibernateTemplate的set方法了。
41  -->
42  <bean id="userDao" class="com.wuhao.dao.UserDao">
43      <property name="sessionFactory" ref="sessionFactory"></property>
44  </bean>
45
46  <!-- hiberntae事务管理器,也需要将sessionFactory加进来,从hibernate中得代码就可以看出来,事务也是由sessionFactory获取来的-->
47 <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
48     <property name="sessionFactory" ref="sessionFactory"></property>
49 </bean>
50 <!-- 事务详情 -->
51 <tx:advice id="txAdvice" transaction-manager="txManager">
52     <tx:attributes>
53         <tx:method name="add" propagation="REQUIRED"/>
54     </tx:attributes>
55 </tx:advice>
56
57 <!-- aop事务管理 ,要使用事务和aop,需要在上面导入dtd。我这里图方便,没写接口,所以需要叫spring使用cglib-->
58 <aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
59 <aop:config>
60     <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.wuhao.service.*.*(..))"/>
61 </aop:config>
62 </beans>

      总结:其实非常简单,一开始整合肯定毫无头绪,不知道从哪里下手,那么就先将一个最简单的hibernate操作对象的小demo写出来,看看hibernate需要什么,然后spring就配置什么,给什么。这样就简单明了了。

五、struts2整合spring

      5.1、struts2自己创建action。而不用spring帮我们创建

          struts.xml

                     

          action中userService对象的创建就需要让spring帮我们创建

                  

          applicationContext.xml

              

          这样,就可以了。

      

      5.2、spring帮我们创建action,struts2什么也不用做了。‘

            前提:需要导入struts-spring-plugin...jar

          

      全部整合完后的applicationContext.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:aop="http://www.springframework.org/schema/aop"
 5        xmlns:tx="http://www.springframework.org/schema/tx"
 6        xsi:schemaLocation="http://www.springframework.org/schema/beans
 7                               http://www.springframework.org/schema/beans/spring-beans.xsd
 8                               http://www.springframework.org/schema/aop
 9                               http://www.springframework.org/schema/aop/spring-aop.xsd
10                               http://www.springframework.org/schema/tx
11                               http://www.springframework.org/schema/tx/spring-tx.xsd">
12 <!-- struts2自己创建Action的配置,就不需要21到24行的代码,如果是spring创建action,则需要 -->
13 <!--
14     action中的userService对象,在这里配置就能够获取到。为什么能够直接配置就能够得到,
15     需要导入struts-spring-plugin...jar,因为有它和default.properties的结合所以才能够直接配置得到
16  -->
17 <bean id="userService" class="com.wuhao.service.UserService">
18 <!-- userDao在hibernate整合时就已经创建了bean,所以就直接拿过来用 -->
19     <property name="userDao" ref="userDao"></property>
20 </bean>
21 <!-- 配置action -->
22 <bean id="userAction" class="com.wuhao.action.UserAction">
23     <property name="userService" ref="userService"></property>
24 </bean>
25
26 <!-- hibernate -->
27 <!-- 配置数据源  c3p0,-->
28 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
29     <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
30     <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test_1"></property>
31     <property name="user" value="root"></property>
32     <property name="password" value="root"></property>
33 </bean>
34
35 <!-- 获取sessionFactory需要加载hibernate.cfg.xml获取其中的配置的信息,那么直接将那些配置信息在这里配置 -->
36 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
37     <property name="dataSource" ref="dataSource"></property>
38     <!-- 配置一些其他的信息,方言等 -->
39     <property name="hibernateProperties">
40         <props>
41             <prop key="hibernate.dialect">
42                 org.hibernate.dialect.MySQLDialect
43             </prop>
44             <prop key="hibernate.show_sql">true</prop>
45             <prop key="hibernate.format_sql">true</prop>
46             <prop key="hibernate.hbm2ddl.auto">update</prop>
47         </props>
48     </property>
49     <!-- 添加映射文件 -->
50     <property name="mappingLocations" value="classpath:com/wuhao/domain/User.hbm.xml"></property>
51 </bean>
52
53 <!-- hibernate中通过sessionFactory创建得session对对象进行操作,spring提供一个hibernateTemplate进行操作,跟spring中的jdbcTemplate一样,
54     继承HibernateDaoSupport后,注入SessionFactory即可,在dao层就不用在写hibernateTemplate的set方法了。
55  -->
56  <bean id="userDao" class="com.wuhao.dao.UserDao">
57      <property name="sessionFactory" ref="sessionFactory"></property>
58  </bean>
59
60  <!-- hiberntae事务管理器,也需要将sessionFactory加进来,从hibernate中得代码就可以看出来,事务也是由sessionFactory获取来的-->
61 <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
62     <property name="sessionFactory" ref="sessionFactory"></property>
63 </bean>
64 <!-- 事务详情 -->
65 <tx:advice id="txAdvice" transaction-manager="txManager">
66     <tx:attributes>
67         <tx:method name="add" propagation="REQUIRED"/>
68     </tx:attributes>
69 </tx:advice>
70
71 <!-- aop事务管理 ,要使用事务和aop,需要在上面导入dtd。我这里图方便,没写接口,所以需要叫spring使用cglib-->
72 <aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
73 <aop:config>
74     <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.wuhao.service.*.*(..))"/>
75 </aop:config>
76 </beans>

六、总结

      那么到这里,手动整合ssh就结束了,其实非常简单,一步步来,从导包到整合hibernate在整合struts的步骤进行,那么就可以成功整合了,上面所有的我都没有采用接口编程,为了方便,日后注意一下这点即可。非常简单。

      但是在整合hibernate时,我们的你domain都映射文件都是自己手动编写的,实际开发中肯定不需要一个个手动编写,因为是先有数据库,然后在来写你domain,所以之后会说到通过反转引擎根据数据库中的表来创建domain和映射文件。

        

时间: 2024-10-12 21:37:38

spring(四) 手动整合web项目(SSH)的相关文章

框架 day37 Spring事务管理,整合web,SSH整合,SSH整合注解

1     事务管理 1.1   回顾事务     事务:一组业务操作,要么全部成功,要么全部不成功.     事务特性:ACID 原子性:整体 一致性:数据(完整) 隔离性:并发(多个事务) 持久性:结果     隔离问题:脏读.不可重复读.幻读(虚读)     隔离级别:4个 readuncommitted 读未提交,存在3个问题. readcommitted 读已提交,解决:脏读:存在2个. repeatableread 可重复读,解决:脏读.不可重复读:存在1个 serializ

带领技术小白入门——基于java的微信公众号开发(包括服务器配置、java web项目搭建、tomcat手动发布web项目、微信开发所需的url和token验证)

微信公众号对于每个人来说都不陌生,但是许多人都不清楚是怎么开发的.身为技术小白的我,在闲暇之余研究了一下基于java的微信公众号开发.下面就是我的实现步骤,写的略显粗糙,希望大家多多提议! 一.申请服务器 1.我购买的是阿里云服务器,购买后要设置一下服务器密码,默认用户名是administrator,购买好后如下: 2.申请好后,copy一下此服务器的IP地址(公有),在本地ping一下看看是否可用,j键盘Win+R,输入cmd,输入ping+IP回车,如下即为成功: 二.配置服务器 1.下载远

Spring Boot构建的Web项目如何在服务端校验表单输入

本文首发于个人网站:Spring Boot构建的Web项目如何在服务端校验表单输入 这个例子用于演示在Spring Boot应用中如何验证Web 应用的输入,我们将会建立一个简单的Spring MVC应用,来读取用户输入并使用validation注解来检查,并且当用户输入错误时,应用需要再屏幕上显示错误信息提示用户重新输入. 首先构建Maven项目,该项目的pom文件内容如下: <?xml version="1.0" encoding="UTF-8"?>

Spring(一):概述,IOC(Bean管理),整合Web项目,整合JUnit单元测试

1 Spring框架的学习路线 Spring第一天:IOC容器(Bean管理),Spring与Web项目整合 Spring第二天:AOP(面向切面编程),Spring的JDBC模板 Spring第三天:Spring的事务管理,SSH整合开发 2 Spring的框架概述 2.1 什么是Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and

在eclipse中使用spring,springmvc,mybatis搭建web项目

前不久刚学过ssm框架的使用,在此记录下来,如果内容有误欢迎指正! 这篇文章只展示我建立项目的过程,至于各种配置这么写的原因在今后的时间里我会为Spring,Springmvc,mybatis各写一篇文章进行说明! 创建一个web项目 我使用的是eclipse,相信大多数新手都和我一样吧,新建web项目就不说了,各位应该都如喝水吃饭一样熟练了. 导入项目需要的jar包 我是在eclipse中建立的maven项目,因此在pom.xml中写导入jar包的配置,maven自行下载jar包,目前只会这一

Spring学习笔记2——web项目初始化webapplicationcontext

1.新建web项目来加载spring webapplicationcontext是专门为web应用准备,它允许从相对于web根目录的路径中装载配置文件,完成初始化操作.从webapplicationcontext中可以获得servletcontext的引用. 2.webapplicationcontext的初始化 通过配置自启动的servlet或web容器监听器 方式一:配置自启动的servlet <!-- 声明自动启动的servlet --> <servlet> <serv

Spring Boot加速Java web项目的开发

软件152唐伟 我想,现在企业级的Java web项目应该或多或少都会使用到Spring框架的. 回首我们以前使用Spring框架的时候,我们需要首先在(如果你使用Maven的话)pom文件中增加对相关的的依赖(使用gradle来构建的话基本也一样)然后新建Spring相关的xml文件,而且往往那些xml文件还不会少.然后继续使用tomcat或者jetty作为容器来运行这个工程.基本上每次创建一个新的项目都是这么一个流程,而我们有时候仅仅想快速的创建一个Spring web工程来测试一些东西,或

Spring mvc创建的web项目,如何获知其web的项目名称,访问具体的链接地址?

我们创建的springmvc项目:jstz_random,包名:com.redin.jstz,那么其web项目的名称为jstz_random.这个也是我们访问的连接中的projectname 1.可以通过查看web属性来找到web项目名称 右击项目--> Properties-->web Project Settings,即可看到web项目名称.其实项目名称为:zjrandom,这种设置也是挺坑人的. 当然这里也可以进行修改. 2.通过服务启动日志,重新编译,重新load的时候可看到 当然细心

Web Service (四) 手动发布Web Service接口-CXF与Spring集成

当我们发布完Web Service接口之后有两种方式可以调用Web service服务,一种是通过动态客户端方式,另一种是引用服务端的接口,引用服务端接口的方式对于客户端同服务器端耦合比较大,而使用WSDL的方式客户端不知道服务端的存在就可以调用服务器的方法. 下面是项目的结构图: 1.Web Service发布项目 2.编写服务端接口类以及实现类,如下,同上一篇自动发布接口,多了一个注解@WebService package com.test.webservice; import javax.