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. [kmp+dp] hdu 4628 Pieces

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4622 Reincarnation Time Limit: 6000/3000 MS (Java/Ot ...

  2. Asp.net MVC + EF + Spring.Net 项目实践(目录)

    用4篇博客来搭一个MVC的框架,可能对初学者会有一些帮助,大家共勉吧.我觉得对于中小型项目,这个框架可能还是有一定的用处的,希望能够帮助到一些人. Asp.net MVC + EF + Spring. ...

  3. Python - 字符串的替换(interpolation) 具体解释

    字符串的插值(interpolation) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/27054263 字符串的替换 ...

  4. 基于科大讯飞语音云windows平台开发

    前记: 前段时间公司没事干,突发奇想想做一个语音识别系统,看起来应该非常easy的,但做起来却是各种问题,这个对电气毕业的我,却是挺为难的.谷姐已经离我们而去,感谢度娘,感谢CSDN各位大神,好歹也做 ...

  5. sql点滴41—MyISAM 和 InnoDB 讲解

    原文:sql点滴41-MyISAM 和 InnoDB 讲解 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定.基本的差别为:MyISAM类型 ...

  6. C/C++软件静态测试现状

    对于C/C++软件而言,静态测试越来越趋向软件安全功能测试.包括数据机密性.完整性.可用性.不可否认性.身份认证.授权.访问控制.审计跟踪.委托.隐私保护.安全管理等. 通常情况下,C/C++静态测试 ...

  7. JCronTab 定时调用

    习惯使用 unix/linux 的开发者应该对 crontab 都不陌生.Crontab 是一个很方便的用于 unix/linux 系统的任务调度命令.JCronTab 则是一款全然依照 cronta ...

  8. js获取当前指定的前几天的日期(如当前时间的前七天的日期)

    这里就不多说了,直接贴上代码: <html> <head> <meta http-equiv="Content-Type" content=" ...

  9. .net中,控件(Name)属性或ID属性的常见命名规则

    控件名称 缩写 介绍 公共控件   Button btn 按钮 CheckBox chk 复选框 CheckedListBox ckl 显示一个项列表,其中每一项左侧都有一个复选框 ComboBox ...

  10. 深入理解javascript new的机制

    我们在使用对象的时候,除了一些浏览器内置的单体对象可以直接使用外,都会new一个出来使用. 1.最简单的莫过于如下获取一个Object对象实例 var obj = new Object(); 说明:此 ...