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...)(代码片段

Java的SSH框架整合

SSH整合总结(OA项目)

dwr与ssh框架整合教程

SSH 框架整合(maven版本 xml配置方式)

Memcached的配置,SSH项目中的整合(com.whalin),Memcached工具类,Memcached的代码调用