目录

1. SSH

1.1 Struts2

1.2 spring

1.3 hibernate

2 整合

2.1 引入jar文件

2.1.1 Struts2的jar

2.1.2 hibernate5的jar

2.1.3 spring的jar

2.2 引入配置文件

2.2.1 Struts2的配置文件

2.2.2 hibernate的配置文件

2.2.3 spring配置文件

3 struts2与spring整合

3.1 方式一:action由Struts2创建

3.1.1 创建action类

3.1.2 在Struts.xml中配置action

3.1.3 在action中调用service的方法

3.2 方式二:action由spring创建

3.2.1 引入插件包

3.2.2 spring管理action

3.2.3 在Struts.xml中配置action

4. 编写Dao层

4.1 类的编写

4.1.1 接口

4.1.2 实现类

4.2 配置文件的引入

4.2.1 实体与表的映射关系配置

4.2.2 引入hibernate核心配置文件

5. spring整合hibernate

5.1 在spring配置文件中,引入hibernate配置

5.2 让Dao层类继承HibernateDaoSupport

5.2.1 dao层配置

5.2.2 dao层操作

6. spring事务管理

6.1 事务配置

6.2 在service类上加事务注解


1. SSH

SSH就是Struts2、Spring、hibernate的简称,是曾经比较流行的企业级web开发框架,现在仍然占有很大的比重。

1.1 Struts2

是一个we层的开发框架

1.2 spring

是EE开发的一站式解决方案开放框架,可以说其是业务层框架

1.3 hibernate

是持久层的开发框架

2 整合

2.1 引入jar文件

antlr-2.7.7.jar
asm-3.3.jar
asm-commons-3.3.jar
asm-tree-3.3.jar
c3p0-0.9.2.1.jar
com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.apache.commons.logging-1.1.1.jar
com.springsource.org.apache.log4j-1.2.15.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
commons-fileupload-1.3.1.jar
commons-io-2.2.jar
commons-lang3-3.2.jar
dom4j-1.6.1.jar
freemarker-2.3.22.jar
geronimo-jta_1.1_spec-1.1.1.jar
hibernate-c3p0-5.0.7.Final.jar
hibernate-commons-annotations-5.0.1.Final.jar
hibernate-core-5.0.7.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
jandex-2.0.0.Final.jar
javassist-3.18.1-GA.jar
jboss-logging-3.3.0.Final.jar
log4j-1.2.16.jar
log4j-api-2.2.jar
log4j-core-2.2.jar
mchange-commons-java-0.2.3.4.jar
mysql-connector-java-5.1.7-bin.jar
ognl-3.0.6.jar
slf4j-api-1.6.1.jar
slf4j-log4j12-1.7.2.jar
spring-aop-4.2.4.RELEASE.jar
spring-aspects-4.2.4.RELEASE.jar
spring-beans-4.2.4.RELEASE.jar
spring-context-4.2.4.RELEASE.jar
spring-core-4.2.4.RELEASE.jar
spring-expression-4.2.4.RELEASE.jar
spring-jdbc-4.2.4.RELEASE.jar
spring-orm-4.2.4.RELEASE.jar
spring-test-4.2.4.RELEASE.jar
spring-tx-4.2.4.RELEASE.jar
spring-web-4.2.4.RELEASE.jar
struts2-core-2.3.24.jar
struts2-spring-plugin-2.3.24.jar
xwork-core-2.3.24.jar

2.1.1 Struts2的jar

在Struts2的解压包中有一个apps的目录,里面有一个struts2-blank.war的工程,将其放到Tomcat下,运行Tomcat,可以解压该工程(或者直接解压提取出来),然后将该工程下的WEB-INF下的lib下的所有的jar引入即可。

Struts2开发基本包

asm-3.3.jar
asm-commons-3.3.jar
asm-tree-3.3.jar
commons-fileupload-1.2.2.jar
commons-io-2.0.1.jar
commons-lang3-3.1.jar
freemarker-2.3.19.jar
javassist-3.11.0.GA.jar
ognl-3.0.5.jar
struts2-core-2.3.4.1.jar
xwork-core-2.3.4.1.jar

注意:javassist-3.11.0.GA.jar在hibernate中也有一个,二者需要删除一个

Struts2其他比较重要的包

1. Struts2的注解开发包:struts2-convention-plugin-2.3.24.jar

2. Struts2整合ajax的开发包:struts2-json-plugin-2.3.24.jar

3. Struts2整合spring的开发包:struts2-spring-plugin-2.3.24.jar

2.1.2 hibernate5的jar

hibernate开发必须jar

打开hibernate解压文件,在lib下有一个required的目录,其下的jar就是必须包

antlr-2.7.7.jar
dom4j-1.6.1.jar
geronimo-jta_1.1_spec-1.1.1.jar
hibernate-commons-annotations-5.0.1.Final.jar
hibernate-core-5.0.7.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
jandex-2.0.0.Final.jar
javassist-3.18.1-GA.jar
jboss-logging-3.3.0.Final.jar

mysql驱动

mysql-connector-java-5.1.7-bin.jar

日志记录jar

日志记录的jar,在Struts2中已经存在了,这里引入,struts2就不用引入了,如果Struts2没有引入,这里就需要引入了,但是我们这里需要引入一个日志的接口包slf4j-api-1.6.1.jar和log4j整合的包slf4j-log4j12-1.7.2.jar

slf4j-api-1.6.1.jar
slf4j-log4j12-1.7.2.jar
log4j-1.2.16.jar

注意:Struts2和hibernate中都引入了javassist,如果两者版本不一致会产生冲突,我们需要删除一个,我们将版本低的删除掉

c3p0连接池

c3p0-0.9.2.1.jar

hibernate整合c3p0jar

hibernate-c3p0-5.0.7.Final.jar
hibernate-commons-annotations-5.0.1.Final.jar

2.1.3 spring的jar

IOC开发

com.springsource.org.apache.commons.logging-1.1.1.jar
spring-beans-4.2.4.RELEASE.jar
spring-context-4.2.4.RELEASE.jar
spring-core-4.2.4.RELEASE.jar
spring-expression-4.2.4.RELEASE.jar

注意:因为前面已经引入了log4j的jar,所以这里不需要引入spring提供的com.springsource.org.apache.log4j-1.2.15.jar了

AOP开发

com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
spring-aop-4.2.4.RELEASE.jar
spring-aspects-4.2.4.RELEASE.jar

JDBC模板开发

spring-jdbc-4.2.4.RELEASE.jar
spring-tx-4.2.4.RELEASE.jar

事务管理

spring-tx-4.2.4.RELEASE.jar

整合WEB项目的开发

spring-web-4.2.4.RELEASE.jar

整合单元测试

spring-test-4.2.4.RELEASE.jar

整合hibernate的开发

spring-orm-4.2.4.RELEASE.jar

2.2 引入配置文件

2.2.1 Struts2的配置文件

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>/*</url-pattern>
</filter-mapping>

核心配置文件struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd">
<struts><!-- 配置Struts2的常量 --><constant name="struts.action.extension" value="action"/></struts>

2.2.2 hibernate的配置文件

核心配置hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration><session-factory><!-- 连接数据库的基本参数 --><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql:///ssh1</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">abc</property><!-- 配置Hibernate的方言 --><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><!-- 可选配置================ --><!-- 打印SQL --><property name="hibernate.show_sql">true</property><!-- 格式化SQL --><property name="hibernate.format_sql">true</property><!-- 自动创建表 --><property name="hibernate.hbm2ddl.auto">update</property><!-- 配置C3P0连接池 --><property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property><!--在连接池中可用的数据库连接的最少数目 --><property name="c3p0.min_size">5</property><!--在连接池中所有数据库连接的最大数目  --><property name="c3p0.max_size">20</property><!--设定数据库连接的过期时间,以秒为单位,如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除 --><property name="c3p0.timeout">120</property><!--每3000秒检查所有连接池中的空闲连接 以秒为单位--><property name="c3p0.idle_test_period">3000</property><!-- 引入映射 --><mapping resource=""/></session-factory>
</hibernate-configuration>

映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping><!-- 建立类与表的映射 --><class name="com.itheima.ssh.domain.Customer" table="cst_customer"><!-- 建立类中的属性与表中的主键对应 --><id name="cust_id" column="cust_id" ><!-- 主键生成策略 --><generator class="native"/></id><!-- 建立类中的普通的属性和表的字段的对应 --><property name="cust_name" column="cust_name"  /><property name="cust_source" column="cust_source" /><property name="cust_industry" column="cust_industry"/><property name="cust_level" column="cust_level"/><property name="cust_phone" column="cust_phone"/><property name="cust_mobile" column="cust_mobile"/></class>
</hibernate-mapping>

日志文件

注意:spring也会引入日志文件,这里不用引入。

2.2.3 spring配置文件

web.xml

在这里配置spring的核心监听器,让项目启动的时候加载spring配置,创建工厂,将工厂放到ServletContext中

<!-- 配置Spring的核心监听器 -->
<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 加载spring的配置文件的路径,默认加载WEB-INF/applicationContext.xml -->
<context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value>
</context-param>

核心配置文件applicationContext.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:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"></beans>

日志文件log4j.properties

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c\:mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n### set log levels - for more verbose logging change 'info' to 'debug' ###
# error warn info debug trace
log4j.rootLogger= info, stdout

3 struts2与spring整合

3.1 方式一:action由Struts2创建

3.1.1 创建action类

public class CustomerAction extends ActionSupport implements ModelDriven<Customer>{// 模型驱动使用的对象Customer customer = new Customer();public Customer getModel() {return customer;}/**保存客户* @return*/public String save(){System.out.println("save...");return NONE;}
}

3.1.2 在Struts.xml中配置action

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd">
<struts><!-- 配置Struts2的常量 --><constant name="struts.action.extension" value="action"/><!-- 配置Action --><package name="ssh" extends="struts-default"><action name="customer_*" class="com.itcast.ssh.web.action.CustomerAction" method="{1}"></action></package>
</struts>

3.1.3 在action中调用service的方法

web层获取业务层的通用写法

/**保存客户* @return*/
public String save(){System.out.println("action save...");WebApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(ServletActionContext.getServletContext());CustomerService customerService = (CustomerService) webApplicationContext.getBean("customerService");customerService.save();return NONE;
}

 使用Struts2的方式获取业务层的方法(Struts2与spring整合)

这里需要使用struts2-spring-plugin-2.3.24.jar插件包

1. 在action中注入service

private CustomerService customerService;
public void setCustomerService(CustomerService customerService) {this.customerService = customerService;
}

2. 在action中调用service

/**保存客户* @return*/
public String save(){System.out.println("action save...");customerService.save();return NONE;
}

注意:

关于struts2-spring-plugin-2.3.24.jar

在其中有一个常量配置

<constant name="struts.objectFactory" value="spring" />

在Struts2的核心包下,有一个default.properties,其中有该常量的配置

# struts.objectFactory = spring

但是,该常量是注释了的。所以插件为什么可以引入service,是因为它打开了该常量配置,因为只有这个常量开启了,下面的配置才会生效,Action才会按照名称自动注入service

struts.objectFactory.spring.autoWire = name

3.2 方式二:action由spring创建

3.2.1 引入插件包

struts2-spring-plugin-2.3.24.jar

3.2.2 spring管理action

<bean id="customerAction" class="com.itcast.ssh.web.action.CustomerAction" scope="prototype"><property name="customerService" ref="customerService"></property>
</bean>

注意:一定要配置scope="prototype",因为Struts2是多例的。

3.2.3 在Struts.xml中配置action

将class的属性值改成spring配置的action的id的属性值

<!-- 配置Action -->
<package name="ssh" extends="struts-default"><action name="customer_*" class="customerAction" method="{1}"></action>
</package>

4. 编写Dao层

4.1 类的编写

4.1.1 接口

public interface CustomerDao {void save();
}

4.1.2 实现类

public class CustomerServiceImpl implements CustomerService {private CustomerDao customerDao;public void setCustomerDao(CustomerDao customerDao) {this.customerDao = customerDao;}public void save() {System.out.println("service save...");customerDao.save();}
}

4.2 配置文件的引入

4.2.1 实体与表的映射关系配置

customer.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping><!-- 建立类与表的映射 --><class name="com.itcast.ssh.domain.Customer" table="cst_customer"><!-- 建立类中的属性与表中的主键对应 --><id name="cust_id" column="cust_id" ><!-- 主键生成策略 --><generator class="native"/></id><!-- 建立类中的普通的属性和表的字段的对应 --><property name="cust_name" column="cust_name"  /><property name="cust_source" column="cust_source" /><property name="cust_industry" column="cust_industry"/><property name="cust_level" column="cust_level"/><property name="cust_phone" column="cust_phone"/><property name="cust_mobile" column="cust_mobile"/></class>
</hibernate-mapping>

注意:配置文件和实体类在同一个目录下

4.2.2 引入hibernate核心配置文件

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration><session-factory><!-- 连接数据库的基本参数 --><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql:///spring4_day03</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">root</property><!-- 配置Hibernate的方言 --><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><!-- 可选配置================ --><!-- 打印SQL --><property name="hibernate.show_sql">true</property><!-- 格式化SQL --><property name="hibernate.format_sql">true</property><!-- 自动创建表 --><property name="hibernate.hbm2ddl.auto">update</property><!-- 配置C3P0连接池 --><property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property><!--在连接池中可用的数据库连接的最少数目 --><property name="c3p0.min_size">5</property><!--在连接池中所有数据库连接的最大数目  --><property name="c3p0.max_size">20</property><!--设定数据库连接的过期时间,以秒为单位,如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除 --><property name="c3p0.timeout">120</property><!--每3000秒检查所有连接池中的空闲连接 以秒为单位--><property name="c3p0.idle_test_period">3000</property><!-- 引入映射 --><mapping resource="com/itcast/ssh/domain/Customer.hbm.xml"/></session-factory>
</hibernate-configuration>

5. spring整合hibernate

5.1 在spring配置文件中,引入hibernate配置

<!-- spring 整合hibernate -->
<!-- 引入hibernate配置信息 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"><!-- 引入hibernate配置文件 --><property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
</bean>

5.2 让Dao层类继承HibernateDaoSupport

继承的目的是为了简化开发,因为HibernateDaoSupport类中有一个setSessionFactory方法,当模板为空的时候,就根据sessionFactory创建一个模板对象,所以,我们只需要在dao中注入一个sessionFactory就可以得到模板了。

5.2.1 dao层配置

<bean id="customerDao" class="com.itcast.ssh.dao.impl.CustomerDaoImpl"><property name="sessionFactory" ref="sessionFactory"></property>
</bean>

5.2.2 dao层操作

public class CustomerDaoImpl extends HibernateDaoSupport implements CustomerDao {public void save(Customer customer) {System.out.println("dao  save  ... ");this.getHibernateTemplate().save(customer);}
}

6. spring事务管理

6.1 事务配置

<!-- 配置事务 -->
<!-- 事务管理器配置 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"><!-- 事务管理器需要获得连接,获得连接就需要sessionFactory --><property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 配置事务注解扫描 -->
<tx:annotation-driven transaction-manager="transactionManager"/>

6.2 在service类上加事务注解

@Transactional
public class CustomerServiceImpl implements CustomerService

SSH整合方式1——无障碍整合相关推荐

  1. Spring教程--IOC(注解方式)和整合junit

    1 IOC装配Bean(注解方式) 1.1 Spring的注解装配Bean Spring2.5 引入使用注解去定义Bean @Component  描述Spring框架中Bean Spring的框架中 ...

  2. PHP源码安装及配置——以fastCGI的方式与httpd整合

    在前一篇博文中介绍了LAMP的安装及配置.这里专门介绍PHP以fastCGI的方式与httpd整合的情况下,具体如何编译及配置.而且假定httpd.mysql均如前一篇博文介绍的安装配置完毕.php也 ...

  3. Struts+Spring整合方式

    struts与spring整合方式有三种: 方式一:通过Spring的ActionSupport类实现. 方式二:通过Sping的DelegatingRequestProcessor类覆盖struts ...

  4. Linux 下Nginx+Tomcat 完美整合 nginx tomcat 整合方式

    Linux 下Nginx+Tomcat 完美整合 nginx tomcat 整合方式 随着IT行业的不断发展,个人.企业应用对网站的性能也不断的提高,从以前的apache+tomcat整合.weblo ...

  5. JAVAWEB开发之Spring详解之——Spring的入门以及IOC容器装配Bean(xml和注解的方式)、Spring整合web开发、整合Junit4测试

    Spring框架学习路线 Spring的IOC Spring的AOP,AspectJ Spring的事务管理,三大框架的整合 Spring框架概述 什么是Spring?  Spring是分层的Java ...

  6. 常用的SSM整合方式

    常用的SSM整合方式 看见网上这么多的整合方法,实在是眼花缭乱,看不过来,有些资料仅仅是整合某个部分,或者是整合的方式太过简陋,在实际开发中根本不会使用.接下来我页也来写一篇我平时写项目用的整合方式, ...

  7. (转)淘淘商城系列——SSM框架整合之Dao层整合

    http://blog.csdn.net/yerenyuan_pku/article/details/72721093 一个项目中往往有三层即Dao层.Service层和Web层,看标题就知道了,本文 ...

  8. 计算机技术与课堂教学整合,信息技术与课程整合之我见

    <信息技术与课程整合之我见>由会员分享,可在线阅读,更多相关<信息技术与课程整合之我见(3页珍藏版)>请在人人文库网上搜索. 1.信息技术与课程整合之我见在信息技术教育以计算机 ...

  9. 不要再找了,Java操作Redis、Spring整合Redis及SpringBoot整合Redis这里都有

    文章开始之前先抛出一个问题:Jedis.Lettuce.Redisson以及RedisTemplate几者之间有什么区别,又有什么联系? 如果你心中已经很清晰的有了答案,那么本文你可以很轻松的阅读过去 ...

最新文章

  1. objectdatasource中delete的尴尬。
  2. GO语言初识(为go开发android做准备)
  3. 工作186:实际案例解决vue+el-element二级联动,选项选择后不显示的问题
  4. Maven parent.relativePath
  5. python简易_Python简易爬虫
  6. nemesis什么车_狂野飙车9TrionNemesis介绍 S级车Trion复仇女神属性详解
  7. Tips--Multisim中压电传感器与电荷源的替代方案
  8. CF932E Team Work(第二类斯特林数)
  9. Java继承_这10道Java面试题!大部分的人回答不出来
  10. lingo 12的安装教程
  11. 网站投票系统制作与流程
  12. 表单设计:五类表单构成要素设计
  13. 填充因子设置的一般性准则和指导
  14. 线性代数笔记8:矩阵的对角化
  15. 唐家三少的新作品《天珠变》的最近评论...
  16. 爬取B站20万+条弹幕,我学会了如何成为B站老司机
  17. css有几种选择器,有什么区别?
  18. Android入门视频教程,抖音音视频开发
  19. 大津二值化算法(Otsu)
  20. Python轻松抓取微信公众号文章

热门文章

  1. mc服务器怎么修改名字指令,端游网易我的世界怎么改名字
  2. 哈希密码_哈希生日和密码
  3. 捷码智慧农业模板上新
  4. wsappx关不掉_wsappx是什么进程?Win10系统下如何关闭wsappx?
  5. 基于线上的茶叶购买小程序(论文+程序设计源码+数据库文件)
  6. isp 图像算法(三)之anti-aliasing filter抗混滤波
  7. 项目管理|如何制定项目进度计划?
  8. LPC1768配置系统延时函数(10纳秒级别和1MS级别)
  9. 比特宇宙-TCP/IP的诞生
  10. PYTHON新建PPT