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 ...
随机推荐
- asp.net mvc3 数据验证(四)—Remote验证的一个注意事项
原文:asp.net mvc3 数据验证(四)-Remote验证的一个注意事项 前几篇把asp.net mvc3 中基于Model的主要数据验证的方法都已经讲完了,本节纯粹只是讲一个我 ...
- WCF服务上应用protobuf
WCF服务上应用protobuf Web api 主要功能: 支持基于Http verb (GET, POST, PUT, DELETE)的CRUD (create, retrieve, updat ...
- js对象字面量
在编程语言中,字面量是一种表示值的记法.例如,"Hello, World!" 在许多语言中都表示一个字符串字面量(string literal ),JavaScript也不例外.以 ...
- 阐述 QUEST CENTRAL FOR DB2 八罪
作为一个从事oracle plsql发展2猿 - 年计划,现在,在退出DB2数据仓库项目. 同PL/SQL Developer参考,下文PLSQL,阐述QUEST CENTRAL FOR DB2 5. ...
- CSS学习笔记:transition
CSS3的transition允许CSS的属性值在一定的时间区间内平滑地过渡.这种效果可以在鼠标单击.获得焦点.被点击或对元素任何改变中触发,并圆滑地以动画效果改变CSS的属性值. 1.transit ...
- Linux下使用Photorec恢复误格U盘
photorec包含在testdisk软件包中, 所以直接通过包管理器直接安装testdisk安装即可. 使用root权限来运行软件,在终端键入 [shell] photorec [/shell] 然 ...
- 四种方案:将OpenStack私有云部署到Hadoop MapReduce环境中
摘要:OpenStack与Hadoop被誉为继Linux之后最有可能获得巨大成功的开源项目.这二者如何结合成为更猛的新方案?业内给出两种答案:Hadoop跑在OpenStack上或OpenStack部 ...
- 多数据库下activiti的流程定义缓存问题
我们使用activiti(5.14版本号)作为流程引擎,今天在产品中发现一个问题,某流程的审批记录中, 活动实例表中记录的活动名称(ACT_HI_ACTINST表的ACT_NAME)居然是该流程中不存 ...
- CF:Problem 427C - Checkposts良好的沟通 Tarjan算法
tarjan算法的第一个问题 喷我的脸....手写叠式开成BOOL,我一直在找错了... #include<cstdio> #include<cstring> #include ...
- SWAT—Samba WEB管理工具
本文试验环境是RHEL5.2+samba-swat-3.0.28.Server的IP是192.168.120.241. 1. swat介绍 SWAT:The Samba WEB Administr ...