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整合的更多相关文章

  1. S2SH整合所需jar包及其详解

    转自:https://blog.csdn.net/vvvac1314/article/details/44002205 struts2所必须的jar包五个:struts2-core-2.1.6.jar ...

  2. S2sh整合MAven项目所需坐标大全

    <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> & ...

  3. s2sh框架整合具体配置-xml方式

    s2sh整合之xml方式 说明:本文档所採用的框架版本号为:Struts 2.1.8, Sping2.5.5,  Hibernate 3.5.6 1.    须要的jar包: ------------ ...

  4. (六)Spring4 整合Hibernate4,Struts2

    第一节:S2SH 整合所需Jar 包 Struts2.3.16,Spring4.0.6,Hibernate4.3.5 整合所需jar 包: Struts2.3.16 jar 包 Spring4.0.6 ...

  5. java学习路线(好资源大家分享)

    对于入门java将近两年的时间,曾经迷惘过,一直想知道java的具体学习路线,看过了许许多多的java经验分享的帖子,评论,以及其他各种培训机构所谓的学习路线,发现没有一个符合我个人需求的学习路线,根 ...

  6. JAVA学习路线图---(JAVA1234)

    第一阶段-Java基础   这一阶段很重要,关系到你后面阶段的学习,所以务必把这一阶段掌握好: 如果你是0基本,我推荐一本比较好的,适合初学者看的书:明日科技的<Java从入门到精通>,最 ...

  7. Java体系总结

    一.Java SE部分 1.java基础:基础语法:面向对象(重点):集合框架(重点):常见类库API: 2.java界面编程:AWT:事件机制:Swing: 3.java高级知识:Annotatio ...

  8. 【spring基础】spring声明式事务详解

    一.spring声明式事务 1.1 spring的事务管理器 spring没有直接管理事务,而是将管理事务的责任委托给JTA或相应的持久性机制所提供的某个特定平台的事务实现.spring容器负责事物的 ...

  9. Spring入门4.AOP配置深入

    Spring入门4.AOP配置深入 代码下载 链接: http://pan.baidu.com/s/11mYEO 密码: x7wa 前言: 之前学习AOP中的一些概念,包括连接点.切入点(pointc ...

随机推荐

  1. asp.net mvc3 数据验证(四)—Remote验证的一个注意事项

    原文:asp.net mvc3 数据验证(四)-Remote验证的一个注意事项         前几篇把asp.net mvc3 中基于Model的主要数据验证的方法都已经讲完了,本节纯粹只是讲一个我 ...

  2. WCF服务上应用protobuf

    WCF服务上应用protobuf Web api  主要功能: 支持基于Http verb (GET, POST, PUT, DELETE)的CRUD (create, retrieve, updat ...

  3. js对象字面量

    在编程语言中,字面量是一种表示值的记法.例如,"Hello, World!" 在许多语言中都表示一个字符串字面量(string literal ),JavaScript也不例外.以 ...

  4. 阐述 QUEST CENTRAL FOR DB2 八罪

    作为一个从事oracle plsql发展2猿 - 年计划,现在,在退出DB2数据仓库项目. 同PL/SQL Developer参考,下文PLSQL,阐述QUEST CENTRAL FOR DB2 5. ...

  5. CSS学习笔记:transition

    CSS3的transition允许CSS的属性值在一定的时间区间内平滑地过渡.这种效果可以在鼠标单击.获得焦点.被点击或对元素任何改变中触发,并圆滑地以动画效果改变CSS的属性值. 1.transit ...

  6. Linux下使用Photorec恢复误格U盘

    photorec包含在testdisk软件包中, 所以直接通过包管理器直接安装testdisk安装即可. 使用root权限来运行软件,在终端键入 [shell] photorec [/shell] 然 ...

  7. 四种方案:将OpenStack私有云部署到Hadoop MapReduce环境中

    摘要:OpenStack与Hadoop被誉为继Linux之后最有可能获得巨大成功的开源项目.这二者如何结合成为更猛的新方案?业内给出两种答案:Hadoop跑在OpenStack上或OpenStack部 ...

  8. 多数据库下activiti的流程定义缓存问题

    我们使用activiti(5.14版本号)作为流程引擎,今天在产品中发现一个问题,某流程的审批记录中, 活动实例表中记录的活动名称(ACT_HI_ACTINST表的ACT_NAME)居然是该流程中不存 ...

  9. CF:Problem 427C - Checkposts良好的沟通 Tarjan算法

    tarjan算法的第一个问题 喷我的脸....手写叠式开成BOOL,我一直在找错了... #include<cstdio> #include<cstring> #include ...

  10. SWAT—Samba WEB管理工具

    本文试验环境是RHEL5.2+samba-swat-3.0.28.Server的IP是192.168.120.241.   1. swat介绍 SWAT:The Samba WEB Administr ...