一、SSH框架整合思想
▪ 三大框架应用在javaee三层结构
二、SSH框架整合
使用到的技术:Struts2 + hibernate5.x + spring4.x + mysql数据库
▪ 第一步 导入jar包
(1)导入相关jar包
–用于整合Struts2框架和Spring框架的jar包
–用于整合持久化框架和Spring框架的jar包
(2)导入struts2和hibernate的jar包时,有jar包冲突问题
–在struts2里有jar包
–在hibernate里有jar包
解决办法:删除低版本的jar包,即3.11.0
▪ 第二步 前期环境搭建
利用相应框架,创建web层、service层、dao层、entity类的对象和配置文件
–注:dao层对象的创建见第七步
//action层
public class UserAction extends ActionSupport implements ModelDriven<User> {
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
private User user = new User();
@Override
public User getModel() {
return user;
}
@Override
public String execute() throws Exception {
userService.add();
return NONE;
}
}
//service层
public class UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void add(User user) {
userDao.add(user);
}
}
//entity层
public class User {
private String uid;
private String username;
private String address;
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
▪ 第三步 搭建Struts2框架环境
1 创建struts2核心配置文件,配置action
位置在src下,名称为struts.xml
注意:只需要在spring里配置action对象,不要在struts.xml中配置
<?xml version="1.0" encoding="utf-8" ?>
<!--引入约束-->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="demo" extends="struts-default" namespace="/">
<!--在action标签里面不能写action全路径
class属性值写 在spring配置action对象的bean标签的id值-->
<action name="user" class="userAction"/>
</package>
</struts>
2 在web.xml中配置struts2过滤器
<!--配置struts2过滤器-->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
▪ 第四步 搭建Hibernate框架环境
1 创建实体类和数据库表映射关系的文件
位置在实体类目录下,名称为User.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--引入约束-->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!--实体类和数据库的表建立映射关系-->
<hibernate-mapping>
<class name="com.demo.entity.User" table="d_user">
<id name="uid" column="uid">
<generator class="native"/>
</id>
<property name="username" column="username"/>
<property name="address" column="address"/>
</class>
</hibernate-mapping>
2 创建hibernate核心配置文件,引入映射配置文件
位置在src下,名称为hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--引入约束-->
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--连接数据库信息交由spring配置-->
<!--配置数据库方言-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!--显示hibernate底层生成的sql语句-->
<property name="hibernate.show_sql">true</property>
<!--格式化sql语句-->
<property name="hibernate.format_sql">true</property>
<!--根据映射创建数据库表-->
<property name="hibernate.hbm2ddl.auto">create</property>
<!--引入映射配置文件-->
<mapping resource="com/demo/entity/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
▪ 第五步 搭建Spring框架环境
1 创建spring核心配置文件
位置在src下面,名称为bean.xml,建议写applicationContext.xml
–引入约束
<?xml version="1.0" encoding="UTF-8"?>
<!--引入约束-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
</beans>
2 让spring配置文件在服务器启动时候加载
(1)在web.xml中配置spring监听器
<!--配置spring监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
(2)在web.xml中指定spring配置文件位置
<!--指定spring配置文件-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:bean.xml</param-value>
</context-param>
▪ 第六步 整合Struts2框架和Spring框架
把action对象和其他bean对象交给spring配置管理
<!--配置bean对象-->
<!--action对象是多实例的,需要设置scope="prototype"-->
<bean id="userAction" class="com.demo.action.UserAction" scope="prototype">
<property name="userService" ref="userService"/>
</bean>
<bean id="userService" class="com.demo.service.UserService">
<property name="userDao" ref="userDao"/>
</bean>
▪ 第七步 整合Spring框架和Hibernate框架
1 把Hibernate核心配置文件中的数据库信息交给spring配置
<!--配置连接池-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql:///test"/>
<property name="user" value="root"/>
<property name="password" value="admin"/>
</bean>
2 把hibernate的SessionFactory交给spring配置管理
<!--配置SessionFactory对象-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<!--指定数据库信息-->
<property name="dataSource" ref="dataSource"/>
<!--指定使用hibernate核心配置文件及其位置-->
<property name="configLocations" value="classpath:hibernate.cfg.xml"/>
</bean>
3 hibernate模板中有一个HibernateTemplate对象,HibernateTemplate对象对Hibernate框架进行了封装,因此dao层对象直接调用HibernateTemplate里的方法实现功能
创建dao层对象
public class UserDao {
//使用org.springframework.orm.hibernate5.HibernateTemplate对象
private HibernateTemplate hibernateTemplate;
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
public void add(User user) {
hibernateTemplate.save(user);
}
}
4 利用spring创建hibernate模板中的HibernateTemplate对象,并注入SessionFactory对象
<!--创建hibernate模板中的HibernateTemplate对象-->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
<!--注入SessionFactory对象-->
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
5 把dao对象交给spring配置管理,并注入HibernateTemplate对象
<bean id="userDao" class="com.demo.dao.UserDao">
<!--注入HibernateTemplate对象-->
<property name="hibernateTemplate" ref="hibernateTemplate"/>
</bean>
▪ 第八步(可选) 配置事务(利用注解方式)
1 利用spring配置事务管理器
<!--配置事务管理器-->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<!--注入SessionFactory对象-->
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
2 开启事务注解
<!--开启事务注解-->
<tx:annotation-driven transaction-manager="transactionManager"/>
3 在service类上添加注释
@Transactional
public class UserService { }
▪ 第九步 编写jsp页面
利用struts2的表单标签,编写jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<title>SSH代码测试</title>
</head>
<body>
<s:form action="user.action" method="POST">
<s:textfield name="username" label="姓名"/>
<s:textfield name="address" label="所在地"/>
<s:submit value="提交"/>
</s:form>
</body>
</html>
▪ 第十步 代码测试
数据库中:
测试成功!^_^
三、扩展
▪ 不写Hibernate核心配置文件的方法
把Hibernate核心配置文件中的基本信息配置放到spring中配置
<!--配置SessionFactory对象-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<!--指定数据库信息-->
<property name="dataSource" ref="dataSource"/>
<!--配置hibernate核心配置文件中的基本信息-->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<!--引入映射配置文件-->
<property name="mappingResources">
<list>
<value>com/demo/entity/User.hbm.xml</value>
</list>
</property>
</bean>
▪ dao层对象注入HibernateTemplate对象的简化写法
1 dao层对象继承HibernateDaoSupport对象
//继承org.springframework.orm.hibernate5.support.HibernateDaoSupport对象
public class UserDao extends HibernateDaoSupport {
public void add(User user) {
//得到Hibernate模板对象,并调用save方法
this.getHibernateTemplate().save(user);
}
}
2 把dao对象交给spring配置管理,并注入SessionFactory对象
–不需要用spring创建hibernate模板对象
<bean id="userDao" class="com.demo.dao.UserDao">
<!--注入SessionFactory对象-->
<property name="sessionFactory" ref="sessionFactory"/>
</bean>