SSH整合
Posted 乔克叔叔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSH整合相关的知识,希望对你有一定的参考价值。
整合思路:
第一步 导入jar包
第二步 搭建struts2环境
(1)创建action,创建struts.xml配置文件,配置action
(2)配置struts2的过滤器
第三步 搭建hibernate环境
(1)创建实体类
(2)配置实体类和数据库表映射关系
(3)创建hibernate核心配置文件
- 引入映射配置文件
第四步 搭建spring环境
(1)创建spring核心配置文件
(2)让spring配置文件在服务器启动时候加载
- 配置监听器
- 指定spring配置文件位置
第五步 struts2和spring整合
(1)把action在spring配置(action多实例的)
(2)在struts.xml中action标签class属性里面写 bean的id值
第六步 spring和hibernate整合
(1)把hibernate核心配置文件中数据库配置,在spring里面配置
(2)把hibernate的sessionFactory在spring配置
第七步 完成互相注入关系(在dao里面使用hibernateTemplate)
(1)在dao注入hibernateTemplate对象
(2)在hibernateTemplate对象中注入sessionFactory
--------------------------------------------------------------------------------------
1.整合准备:
导入jar包:
struts相关jar:
hibernate相关jar:
spring相关jar:
c3p0链接池:
spring整合struts:
spring整合hibernate:
整合web项目jar:
mysql驱动:
SSH整合的时候需注意:javassist.jar重复了,解决办法就是删除一个即可
整合思路:
在action中创建service service中创建dao dao中调用方法 执行插入操作
action的创建不是在struts中配置实现,hibernate核心配置文件中也不需要配置数据库的部分 统一交给Spring进行处理
整合代码:
实体类:User
1 package org.model; 2 3 public class User { 4 private int id; 5 private String name; 6 private String address; 7 public int getId() { 8 return id; 9 } 10 public void setId(int id) { 11 this.id = id; 12 } 13 public String getName() { 14 return name; 15 } 16 public void setName(String name) { 17 this.name = name; 18 } 19 public String getAddress() { 20 return address; 21 } 22 public void setAddress(String address) { 23 this.address = address; 24 } 25 26 }
对象关系映射文件:User.hbm.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 5 <hibernate-mapping> 6 <class name="org.model.User" table="t_user2"> 7 <id name="id"> 8 <generator class="native"></generator> 9 </id> 10 <property name="name"></property> 11 <property name="address"></property> 12 </class> 13 </hibernate-mapping>
action:
1 package org.action; 2 3 import org.service.UserService; 4 5 import com.opensymphony.xwork2.ActionSupport; 6 7 public class UserAction extends ActionSupport { 8 private UserService userservice; 9 10 public void setUserservice(UserService userservice) { 11 this.userservice = userservice; 12 } 13 @Override 14 public String execute() throws Exception { 15 System.out.println("action......"); 16 userservice.add(); 17 return NONE; 18 } 19 20 21 22 }
service:
1 package org.service; 2 3 import org.dao.UserDao; 4 import org.springframework.transaction.annotation.Transactional; 5 6 @Transactional 7 public class UserService { 8 private UserDao userDao; 9 10 11 public void setUserDao(UserDao userDao) { 12 this.userDao = userDao; 13 } 14 15 public void add(){ 16 System.out.println("service........"); 17 userDao.add(); 18 } 19 20 }
dao:
接口:
1 package org.dao; 2 3 public interface UserDao { 4 public void add(); 5 6 }
实现类:
1 package org.dao; 2 3 import org.model.User; 4 import org.springframework.orm.hibernate5.HibernateTemplate; 5 6 public class UserDaoImpl implements UserDao { 7 private HibernateTemplate hibernateTemplate; 8 9 10 public void setHibernateTemplate(HibernateTemplate hibernateTemplate) { 11 this.hibernateTemplate = hibernateTemplate; 12 } 13 14 public void add() { 15 //增加一个对象到数据库 16 System.out.println("dao......."); 17 User user=new User(); 18 user.setName("jay"); 19 user.setAddress("中国"); 20 hibernateTemplate.save(user); 21 22 } 23 24 }
hibernate核心配置文件:hibernate.cfg.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-configuration PUBLIC 3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 4 "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 5 <!-- 第一步:配置数据库 但是现在不需要 只需要在spring核心配置文件中配置c3p0连接池即可 --> 6 <!-- 第二步:配置hibernate信息 可选的 --> 7 <!-- 第三步:把对象关系映射文件加载进来 --> 8 <hibernate-configuration> 9 <session-factory> 10 <!-- 第二步:配置hibernate信息 可选的 --> 11 <property name="hibernate.hbm2ddl.auto">update</property> 12 <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 13 <property name="hibernate.show_sql">true</property> 14 <property name="hibernate.format_sql">true</property> 15 16 <!-- 第三步:把对象关系映射文件加载进来 --> 17 <mapping resource="org/model/User.hbm.xml"/> 18 </session-factory> 19 </hibernate-configuration>
struts.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 4 "http://struts.apache.org/dtds/struts-2.3.dtd"> 5 <struts> 6 <constant name="struts.enable.DynamicMethodInvocation" value="true" /> 7 <package name="default" extends="struts-default" namespace="/"> 8 <!-- 9 之前的配置,现在对象的创建都统一交给spring 所以这里只需把spring创建完成的action对象的id值放入class中 10 --> 11 <!-- 12 <action name="useraction" class="org.action.UserAction"></action> 13 --> 14 <action name="useraction" class="useraction"></action> 15 </package> 16 17 </struts>
spring核心配置文件bean.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" xmlns:context="http://www.springframework.org/schema/context" 4 xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans 6 http://www.springframework.org/schema/beans/spring-beans.xsd 7 http://www.springframework.org/schema/context 8 http://www.springframework.org/schema/context/spring-context.xsd 9 http://www.springframework.org/schema/aop 10 http://www.springframework.org/schema/aop/spring-aop.xsd 11 http://www.springframework.org/schema/tx 12 http://www.springframework.org/schema/tx/spring-tx.xsd"> 13 14 <!--创建action对象 想其中注入service对象--> 15 <bean id="useraction" class="org.action.UserAction"> 16 <property name="userservice" ref="userSerivce"></property> 17 </bean> 18 19 <!-- 配置c3p0连接池对象 --> 20 <bean id="c3p0" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 21 <property name="driverClass" value="com.mysql.jdbc.Driver"></property> 22 <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/spring_sh"></property> 23 <property name="user" value="root"></property> 24 <property name="password" value="jay571018"></property> 25 </bean> 26 27 <!-- 创建sessioinfactory 这里使用spring封装的sessionfactory对象 所以只需要配置即可--> 28 <bean id="sessionfactory" 29 class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> 30 <property name="dataSource" ref="c3p0"></property> 31 <property name="configLocations" value="classpath:hibernate.cfg.xml"></property> 32 33 <!-- 上面的代码已经不需要了 因为现在没有配置文件 创建sessionfactory的时候用配置方式实现 --> 34 <!-- hibernate基本配置信息 --> 35 <!-- 36 <property name="hibernateProperties"> <props> <prop 37 key="hibernate.hbm2ddl.auto">update</prop> <prop 38 key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 39 <prop key="hibernate.show_sql">true</prop> <prop 40 key="hibernate.format_sql">true</prop> </props> </property> 41 --><!-- 第三步:把对象关系映射文件加载进来 --> 42 <!-- 43 <property name="mappingResources"> <list> 44 <value>org/model/User.hbm.xml</value> </list> </property> 45 --> 46 </bean> 47 48 <!-- 配置service对象 并且向其中注入dao实现类对象--> 49 <bean id="userSerivce" class="org.service.UserService"> 50 <property name="userDao" ref="userDaoImpl"></property> 51 </bean> 52 53 <!-- 配置dao对象 并且向其中注入HibernateTemplate--> 54 <bean id="userDaoImpl" class="org.dao.UserDaoImpl"> 55 <property name="hibernateTemplate" ref="hibernateTemplate"></property> 56 </bean> 57 58 <!-- 创建hibernateTemplate模板 需要注入sessionFactory对象 --> 59 <bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate"> 60 <property name="sessionFactory" ref="sessionfactory"></property> 61 </bean> 62 63 <!-- 64 配置事务管理器 使用hibernate进行持久化事务操作 不是spring中的jdbc 注入sessionfactory对象,或者DataSource属性注入c3p0对象也行 65 --> 66 <bean id="hibernateTransactionManager" 67 class="org.springframework.orm.hibernate5.HibernateTransactionManager"> 68 <property name="sessionFactory" ref="sessionfactory"></property> 69 </bean> 70 71 72 <!-- 开启事务注解 指定事务管理器 然后去需要事务处理的类上面 标记注解 --> 73 <tx:annotation-driven transaction-manager="hibernateTransactionManager" /> 74 75 </beans>
web.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.5" 3 xmlns="http://java.sun.com/xml/ns/javaee" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 6 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 7 <welcome-file-list> 8 <welcome-file>index.jsp</welcome-file> 9 </welcome-file-list> 10 11 <filter> 12 <filter-name>struts2</filter-name> 13 <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 14 <init-param> 15 <param-name>actionPackages</param-name> 16 <param-value>com.mycompany.myapp.actions</param-value> 17 </init-param> 18 </filter> 19 20 <filter-mapping> 21 <filter-name>struts2</filter-name> 22 <url-pattern>/*</url-pattern> 23 </filter-mapping> 24 25 <listener> 26 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 27 </listener> 28 <context-param> 29 <param-name>contextConfigLocation</param-name> 30 <param-value>classpath:bean.xml</param-value> 31 </context-param> 32 33 </web-app>
部署项目:访问action
控制台打印:
数据库中自动建表,并且保存了一条记录:
以上是关于SSH整合的主要内容,如果未能解决你的问题,请参考以下文章
全栈编程系列SpringBoot整合Shiro(含KickoutSessionControlFilter并发在线人数控制以及不生效问题配置启动异常No SecurityManager...)(代码片段
Memcached的配置,SSH项目中的整合(com.whalin),Memcached工具类,Memcached的代码调用