ssh整合三种方式(二)
1、搭建ssh开发环境(纯XML配置):
准备工作
创建数据库,创建web工程,创建实体类,编写Service层和Dao层的接口和实现类。
步骤一:搭建Spring开发环境,保证Spring可以独立运行;
- 测试内容:只需要验证Spring容器为我们创建了实体类对象,我们可以调用service层的方法(service会调用dao层的方法),能正常执行表示Spring环境搭建成功。
步骤二:搭建Hibernate开发环境,保证Hibernate可以独立运行;
- 测试内容:不需要实现功能,验证可以操作数据库即可。
步骤三:整合Spring和Hibernate;
具体事项:
(1) 把sessionFactory的创建交给Spring管理;
(2) 在Dao层配置使用jdbcTemplate或HibernateTemplate操作数据库,然后在Spring配置文件中配置JdbcTemplate或HibernateTemplate;
(3) 修改hibernate的配置文件,如下:
<property name="hibernate.current_session_context_class">thread</property>
改为:
<property name="hibernate.current_session_context_class">
org.springframework.orm.hibernate5.SpringSessionContext
</property>
(3) 配置事务。
步骤四:搭建Struts2开发环境,保证Struts2可以独立运行;
步骤五:整合Spring和Struts2;
具体事项:
(1) 在web.xml中配置如下:
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
-
该监听器是ServletContextListener接口的实现类,负责监听ServletContext对象的创建,为我们创建容器,监听ServletContext对象的销毁,销毁容器。
-
ContextLoaderListener 在 spring-web-4.2.4.RELEASE.jar中
所以我们要先导入这个jar包。 -
此监听器只能读取WEB-INF目录中的名称为applicationContext.xml的配置文件。这显然限制了我们的配置。
我们可以通过配置全局初始化参数的方式,指定spring配置文件的位置.具体配置方法 我们在第二种方法中进行阐述。
(2) 把Spring的配置文件applicationContext.xml放到WEB-INF目录下。
第二种方式: 其实就是对第一种搭建方式的优化:
优化步骤如下:
-
把第一种方式中的hibernate主配置文件的内容配置到Spring的配置文件中;
hibernate主配置文件其实就是配置了sessionFactory,现在我们把他们都配置为sessionFactory的属性,如下:
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<!-- 连接数据库的基本信息 -->
<!-- 1.配置数据源 -->
<property name="dataSource" ref="dataSource"></property>
<!-- 2.hibernate的基本配置 -->
<property name="hibernateProperties">
<props>
<!-- mysql的方言配置 -->
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<!-- 配置是否显示sql语句 -->
<prop key="hibernate.show_sql">true</prop>
<!-- 配置是否格式化SQL语句 -->
<prop key="hibernate.format_sql">false</prop>
<!-- 配置自动根据model对象来更新表结构 -->
<prop key="hbm2ddl.auto">update</prop>
<!-- 配置使用当前线程上绑定的session-->
<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate5.SpringSessionContext</prop>
</props>
</property>
<property name="mappingLocations">
<array>
<value>classpath:cn/com/pojo/*.hbm.xml</value>
</array>
</property>
</bean>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/environment_S2S4H5"></property>
<property name="user" value="root"></property>
<property name="password" value="123456"></property>
</bean>
需要在web.xml中手动指定配置文件的位置,如下:
-
分配置文件编写Spring和Struts2的配置;
我们原来是把所有的配置都配置到一个applicationContext.xml文件中,但是那样写的话会非常的乱,
我们可以写四个Spring配置文件(如下图)
在applicationContext-customer.xml中只配与customer相关的配置,在applicationContext-jdbc.xml中只配与与访问数据库相关的配置,在applicationContext-tx.xml中只配与事务相关的配置,然后在applicationContext.xml中引用前三个配置;
在applicationContext.xml中的配置如下:
<import resource="applicationContext-customer.xml"/>
<import resource="applicationContext-jdbc.xml"/>
<import resource="applicationContext-tx.xml"/>
在Dao层继承 HibernateDaoSupport 类,该类在内部有一个HibernateTemplate属性,并且提供了get方法,我们可以在dao层直接调用get方法得到HibernateTemplate,然后操作数据库;
但是需要传入sessionFactory,所有在配置文件中需要给dao层的实现类添加一个sessionFactory属性。
在Spring的配置文件中,配置Action,让Spring容器对Action动作类进行初始化,在Struts2的配置文件中我们就可以直接写类名,让struts直接到Spring的容器中拿动作类对象。Spring中的配置如下:
struts中的配置如下(不需要写类的全限定类名):