S2SH整合
Struts2、Spring、Hibernate三大框架在一个项目中的具体职责分配如下:

三大框架整合,导入各个框架和整合所需的包(本项目采用的是Struts2.3+spring3.0+hibernate)
1.添加Spring框架
1)编写applicationContext-bean.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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="date" class="java.util.Date"></bean> </beans>
2)测试
public class SSHTest {
@Test
public void spring(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-*.xml");
System.out.println(context.getBean("date"));
}
}
若测试通过,则spring框架添加成功
2.添加Hibernate框架
1)添加hibernate配置文件
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/shop
</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="c3p0.initialPoolSize">5</property>
<property name="c3p0.minPoolSize">10</property>
<property name="c3p0.maxPoolSize">20</property>
<property name="c3p0.checkoutTimeout">6000</property>
<property name="show_sql">true</property>
</session-factory>
</hibernate-configuration>
该配置文件中采用了数据库连接池
2)编写测试工具类
HibernateSessionFactory.java
package cn.lsl.test; import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration; public class HibernateSessionFactory { private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
private static Configuration configuration = new Configuration();
private static org.hibernate.SessionFactory sessionFactory;
private static String configFile = CONFIG_FILE_LOCATION; static {
try {
configuration.configure(configFile);
sessionFactory = configuration.buildSessionFactory();
} catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
} private HibernateSessionFactory() {
} public static Session getSession() throws HibernateException {
Session session = (Session) threadLocal.get(); if (session == null || !session.isOpen()) {
if (sessionFactory == null) {
rebuildSessionFactory();
}
session = (sessionFactory != null) ? sessionFactory.openSession()
: null;
threadLocal.set(session);
} return session;
} public static void rebuildSessionFactory() {
try {
configuration.configure(configFile);
sessionFactory = configuration.buildSessionFactory();
} catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
} public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null); if (session != null) {
session.close();
}
} public static org.hibernate.SessionFactory getSessionFactory() {
return sessionFactory;
} public static void setConfigFile(String configFile) {
HibernateSessionFactory.configFile = configFile;
sessionFactory = null;
} public static Configuration getConfiguration() {
return configuration;
}
}
3)测试
@Test
public void hibernate(){
System.out.println(HibernateSessionFactory.getSessionFactory());
}
若测试通过,则Hibernate框架添加成功
3.Hibernate与Spring框架整合
1)配置LocalSessionFactoryBean
<!--
1: Spring来管理Hibernate配置文件,就是取代了HibernateSessionFactory
-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- 加载hibernate的配置文件 -->
<property name="configLocation" value="classpath:hibernate.cfg.xml" />
</bean>
2)配置hibernateTemplate
<!--
2.通过sessionFactory,返回session,在Spring由HibenrateTemplate封装session
-->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<!-- 需要sessionFactory -->
<property name="sessionFactory" ref="sessionFactory" />
</bean>
3)配置事务管理器
<!--
3.配置事物管理器transactionManager
如果要实现Spring的AOP声明式事务,则需要Spring提供事物管理器,所有session都是从sessionFactory创建的,
事务管理器,需要控制sessionFactory
-->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
4)配置事物通知
<!-- 4 配置事务通知: 事务由事务管理器提供 -->
<tx:advice id="advice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="*" propagation="NEVER" read-only="true"/>
</tx:attributes>
</tx:advice>
5)配置切入点表达式
<!-- 5: 切入表达式: 配置运行的时候*包的*类切入通知 -->
<aop:config>
<aop:pointcut expression="execution(* cn.lsl.shop.service.impl.*.*(..))" id="pointcut"/>
<aop:advisor advice-ref="advice" pointcut-ref="pointcut"/>
</aop:config>
6)编写实体类和映射文件
package cn.lsl.shop.pojo;
public class Category implements java.io.Serializable {
private Integer cid;
private String ctype;
private Boolean chot;
private Integer aid;
public Category() {
super();
// TODO Auto-generated constructor stub
}
public Category(String ctype, Boolean chot, Integer aid) {
super();this.ctype = ctype;
this.chot = chot;
this.aid = aid;
}
public Integer getCid() {
return cid;
}
public void setCid(Integer cid) {
this.cid = cid;
}
public String getCtype() {
return ctype;
}
public void setCtype(String ctype) {
this.ctype = ctype;
}
public Boolean getChot() {
return chot;
}
public void setChot(Boolean chot) {
this.chot = chot;
}
public Integer getAid() {
return aid;
}
public void setAid(Integer aid) {
this.aid = aid;
}
}
映射文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="cn.lsl.shop.pojo.Category" table="category">
<id name="cid" type="java.lang.Integer">
<column name="cid" />
<generator class="native"></generator>
</id>
<property name="ctype" type="java.lang.String">
<column name="ctype" length="20" />
</property>
<property name="chot" type="java.lang.Boolean">
<column name="chot" />
</property>
<property name="aid" type="java.lang.Integer">
<column name="aid" />
</property>
</class>
</hibernate-mapping>
最后记得在hibernate.cfg.xml文件中添加
<mapping resource="cn/lsl/shop/pojo/Category.hbm.xml" />
7)编写Service层
package cn.lsl.shop.service.impl;
import org.springframework.orm.hibernate3.HibernateTemplate;
import cn.lsl.shop.pojo.Category;
public class CategoryServiceImpl {
private HibernateTemplate hibernateTemplate = null;
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
public void save(Category category){
hibernateTemplate.save(category);
}
}
并纳入Spring容器管理
<bean id="categoryServiceImpl" class="cn.lsl.shop.service.impl.CategoryServiceImpl">
<property name="hibernateTemplate" ref="hibernateTemplate" />
</bean>
8)测试
/*
* Spring管理Hibernate,采用AOP实现声明式事物
*
* 加载Spring与Hibernate整合的jar包
* */
@Test
public void springHibernate(){
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext-*.xml");
CategoryServiceImpl categoryServiceImpl=(CategoryServiceImpl)context.getBean("categoryServiceImpl");
Category category=new Category("test",false,1);
categoryServiceImpl.save(category);
}
若数据成功插入数据库,则Spring和Hibernate整和成功
4.添加struts2框架
1)编写Action类
package cn.lsl.shop.action;
import cn.lsl.shop.service.impl.CategoryServiceImpl;
public class TestAction {
public String test(){
System.out.println(categoryServiceImpl);
return "success";
}
}
2)编写配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<!--
注意:添加jar包的时候要刷新tomcat中项目
Struts 与Spring的整合作用: Spring来管理Action,从而实现Action与Service解耦
-->
<!-- struts-default 使用默认Struts拦截器 -->
<package name="shop" extends="struts-default">
<action name="testAction_*" class="cn.lsl.shop.action.TestAction" method="{1}">
<!-- struts2中 重定向可以忽略工程名 -->
<result name="success" type="redirect">/success.jsp</result>
</action>
</package>
</struts>
3)配置web.xml文件
<!-- 配置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>*.action</url-pattern>
</filter-mapping>
5.整合Spring和Struts2
1)修改Action类,并纳入spring管理
public class TestAction {
private CategoryServiceImpl categoryServiceImpl=null;
public void setCategoryServiceImpl(CategoryServiceImpl categoryServiceImpl) {
this.categoryServiceImpl = categoryServiceImpl;
}
public String test(){
System.out.println(categoryServiceImpl);
return "success";
}
}
<bean id="testAction" class="cn.lsl.shop.action.TestAction">
<property name="categoryServiceImpl" ref="categoryServiceImpl" />
</bean>
2)修改配置文件
<package name="shop" namespace="/" extends="struts-default">
<action name="testAction_*" class="testAction" method="{1}">
<!-- struts2中 重定向可以忽略工程名 -->
<result name="success" type="redirect">/success.jsp</result>
</action>
</package>
3)在web.xml文件中配置Spring监听器
<!-- 配置Spring的ContextLoaderListener监听器 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext-*.xml</param-value>
</context-param> <listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
4)测试
http://localhost:8080/shop/testAction_test.action
S2SH整合的更多相关文章
- S2SH整合所需jar包及其详解
转自:https://blog.csdn.net/vvvac1314/article/details/44002205 struts2所必须的jar包五个:struts2-core-2.1.6.jar ...
- S2sh整合MAven项目所需坐标大全
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> & ...
- s2sh框架整合具体配置-xml方式
s2sh整合之xml方式 说明:本文档所採用的框架版本号为:Struts 2.1.8, Sping2.5.5, Hibernate 3.5.6 1. 须要的jar包: ------------ ...
- (六)Spring4 整合Hibernate4,Struts2
第一节:S2SH 整合所需Jar 包 Struts2.3.16,Spring4.0.6,Hibernate4.3.5 整合所需jar 包: Struts2.3.16 jar 包 Spring4.0.6 ...
- java学习路线(好资源大家分享)
对于入门java将近两年的时间,曾经迷惘过,一直想知道java的具体学习路线,看过了许许多多的java经验分享的帖子,评论,以及其他各种培训机构所谓的学习路线,发现没有一个符合我个人需求的学习路线,根 ...
- JAVA学习路线图---(JAVA1234)
第一阶段-Java基础 这一阶段很重要,关系到你后面阶段的学习,所以务必把这一阶段掌握好: 如果你是0基本,我推荐一本比较好的,适合初学者看的书:明日科技的<Java从入门到精通>,最 ...
- Java体系总结
一.Java SE部分 1.java基础:基础语法:面向对象(重点):集合框架(重点):常见类库API: 2.java界面编程:AWT:事件机制:Swing: 3.java高级知识:Annotatio ...
- 【spring基础】spring声明式事务详解
一.spring声明式事务 1.1 spring的事务管理器 spring没有直接管理事务,而是将管理事务的责任委托给JTA或相应的持久性机制所提供的某个特定平台的事务实现.spring容器负责事物的 ...
- Spring入门4.AOP配置深入
Spring入门4.AOP配置深入 代码下载 链接: http://pan.baidu.com/s/11mYEO 密码: x7wa 前言: 之前学习AOP中的一些概念,包括连接点.切入点(pointc ...
随机推荐
- Spark集群搭建简配+它到底有多快?【单挑纯C/CPP/HADOOP】
最近耳闻Spark风生水起,这两天利用休息时间研究了一下,果然还是给人不少惊喜.可惜,笔者不善JAVA,只有PYTHON和SCALA接口.花了不少时间从零开始认识PYTHON和SCALA,不少时间答了 ...
- java设计模式之十桥接模式(Bridge)
桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化.桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时 ...
- SQL 无限级分类语句
原文:SQL 无限级分类语句 原表数据为: 此处用到了with关键字,在程序中也可以用递归实现,但觉得还是没有一条sql方便 with tb (ID,Name,ParentID,Sort) as( s ...
- Java之IO转换流
直接上码: 读取键盘录入数据代码演示: import java.io.IOException; import java.io.InputStream; /** *读取键盘录入的数据,并打印在控 ...
- CSS3 实现六边形Div图片展示效果
原文:CSS3 实现六边形Div图片展示效果 效果图: 实现原理: 这个效果的主要css样式有: 1.>transform: rotate(120deg); 图片旋转 2.>overflo ...
- 常见ActiveX控件下载大全
ActiveX是微软对于一系列策略性面向对象程序技术和工具的称呼,ActiveX控件可以在Windows窗体和Web程序上使用,所以不管是什么语 言开发的应用程序只要在windows窗体和html页面 ...
- javascript 学习总结(八)属性定义方法
1.defineProperty /* 定义(Definition).定义属性需要使用相应的函数,比如: Object.defineProperty(obj, "prop", pr ...
- 读书笔记—CLR via C#异常和状态管理
前言 这本书这几年零零散散读过两三遍了,作为经典书籍,应该重复读反复读,既然我现在开始写博了,我也准备把以前觉得经典的好书重读细读一遍,并且将笔记整理到博客中,好记性不如烂笔头,同时也在写的过程中也可 ...
- Redis简介与简单安装
Redis简介与简单安装 一.NoSQL的风生水起 1.1 后Web2.0时代的发展要求 随着互联网Web2.0网站的兴起,传统的关系数据库在应付Web2.0网站,特别是超大规模和高并发的SNS类 ...
- SpecFlow
SpecFlow http://blog.csdn.net/yujunwu2525/article/details/7839859 将业务需求与.NET代码结合起来 SpecFlow旨在弥合领域专家与 ...