整理来自慕课网的课程
一、SSH框架的知识点的回顾:
WEB层——>业务层——>持久层——>DB
Struts2——Spring —— Hibernate
Hibernate:
public class BookDao {
public void save(Book book){
Configuration cfg = new Configuration().configure();
SessionFactory sf = cfg.buildSessionFactory();
Transaction tx = session.beginTransaction();
session.save(booke);
rx.commit();
session.close();
}
}
Spring:
public class BookService {
private BookDao bookDao;
public void setBookDao(BookDao bookDao){
this.bookDao = bookDao;
}
public void save(Book book){
bookDao.save(book);
}
}
<bean id="bookDao" class="...BookDao"></bean>
<bean id="bookService" class="...BookService">
<property name="bookDao" ref="bookDao"/>
</bean>
Struts2:
public class BookAction extends ActionSupport implements ModelDriven<Book>{
private BookDao bookDao;
public void getModel(){
return book;
}
public String save(){
WebApplicationContext wap = WebApplicationContextUtils.getWebApplicationContext(...);
BookService bs = wap.getBean("bookService");
bs.save(book);
}
}
二、开发环境搭建
**1. 创建项目导入jar包**
(1)Struts2:
struts2-core-2.3.16.3.jar
struts2-convention-plugin-2.3.16.3.jar
struts2-spring-plugin-2.3.16.3.jar
asm-3.3.jar
asm-commons-3.3.jar
asm-tree-3.3.jar
commons-fileupload-1.3.1.jar
commons-io-2.2.jar
commons-lang3-3.1.jar
commons-logging-1.1.3.jar
freemarker-2.3.19.jar
javassist-3.11.0.GA.jar
log4j-1.2.17.jar
ognl-3.0.6.jar
spring-core-3.0.5.RELEASE.jar
struts2-core-2.3.16.3.jar
xwork-core-2.3.16.3.jar
(2)Hibernate:
hibernate-core-4.3.8.Final.jar
antlr-2.7.7.jar
dom4j-1.6.1.jar
hibernate-commons-annotations-4.0.5.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
jandex-1.1.0.Final.jar
javassist-3.18.1-GA.jar
jboss-logging-3.1.4.GA.jar
jboss-logging-annotations-1.2.0.Final.jar
jboss-transaction-api_1.2_spec-1.0.0.Final.jar
(3)Spring:
com.springsource.com.mchange.v2.c3p0-0.9.1.2.jar(连接池)
com.springsource.org.aopalliance-1.0.0.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-context-support-4.2.4.RELEASE.jar
spring-core-4.2.4.RELEASE.jar
spring-expression-4.2.4.RELEASE.jar
spring-instrument-4.2.4.RELEASE.jar
spring-instrument-tomcat-4.2.4.RELEASE.jar
spring-jdbc-4.2.4.RELEASE.jar
spring-jms-4.2.4.RELEASE.jar
spring-messaging-4.2.4.RELEASE.jar
spring-orm-4.2.4.RELEASE.jar
spring-oxm-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
spring-webmvc-4.2.4.RELEASE.jar
spring-webmvc-portlet-4.2.4.RELEASE.jar
spring-websocket-4.2.4.RELEASE.jar
struts2-spring-plugin-2.3.16.3.jar
**2. 引入相应配置文件**
①、Struts2框架的配置文件
web.xml
struts.xml
②、Hibernate框架的配置文件
Hibernate.cfg.xml(在ssh整合中该配置文件可以省略)
映射文件
③、Spring配置文件
web.xml
applicationContext.xml
1)、Struts2中配置文件struts.xml: struts2-blank中WEB-INF\src\java下struts.xml。
2)、日记文件 log4j2.xml:struts2-blank中WEB-INF\src\java下的log4j2.xml文件
3)、jdbc.properties文件:
user=??
password=??
driverClass=com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbcUrl=jdbc\:sqlserver\://localhost\:1433;DatabaseName\=ssh
4)Spring中配置文件:applicationContext.xml文件:创建一个新的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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
/beans>
5)最后在web.xml文件中配置Struts2和Spring:在web.xml文件中输入以下内容即可(Ctrl+Shift+T快捷查找)。
(1)配置Spring:
<!-- Spring的框架的核心监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 加载本地的applicationContext.xml文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
(2)配置Struts2:
<!-- 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>
**3. 创建包结构及创建主体**
1)、创建以下包结构
xu.ssh.action
xu.ssh.dao
xu.ssh.domain
xu.ssh.service
2)、在domain包下面创建product实体,封装了pid,pname和price三个变量的javaBean类:
public class Product {
private Integer pid;
private String pname;
private Double price;
public Integer getPid() {
return pid;
}
public void setPid(Integer pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
}
三、Struts2整合Spring
**1. 创建页面addProduct.jsp**
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<h1>保存商品的页面</h1>
<s:form action="product_save" method="post" namespace="/" theme="simple">
<table border="1" width="400">
<tr>
<td>商品名称</td>
<td><s:textfield name="pname" /></td>
</tr>
<tr>
<td>商品价格</td>
<td><s:textfield name="price" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="添加" /></td>
</tr>
</table>
</s:form>
<body>
</body>
</html>
**2. 编写Action、DAO、Service层代码**
(1)在dao包下面创建ProductDao.java文件;
(2)在service包下面创建ProductService.java文件:
public class ProductService {
//业务层注入Dao的类
private ProductDao productDao;
public void setProductDao(ProductDao productDao) {
this.productDao = productDao;
}
}
(3)在action包下面创建ProductAction.java:继承ActionSupport类,以及实现模型驱动,即实现ModelDriven接口,并加上泛型;
public class ProductAction extends ActionSupport implements ModelDriven<Product>{
private static final long serialVersionUID = 1L;
/**
* 模型驱动使用的类
*/
private Product product=new Product();
@Override
public Product getModel() {
return this.product;
}
/**
* Struts和Spring整合过程中按名称自动注入的业务层类
*/
private ProductService productService;
public void setProductService(ProductService productService) {
this.productService = productService;
}
}
**3. 配置Action、Service、DAO类**
(1)在applicationContext.xml中加入action,dao和service的bean结构:
<!-- Action 的类交给 Spring框架创建 -->
<!-- Action,Service 和 DAO 的配置:applicationContext.xml-->
<bean id="productAction" class="xu.ssh.action.ProductAction" scope="prototype">
<!-- 手动注入 Service -->
<property name="productService" ref="productService"></property>
</bean>
<!-- 配置业务层类 -->
<bean id="productService" class="xu.ssh.service.ProductService">
<property name="productDao" ref="productDao"></property>
</bean>
<!-- 配置DAO的类 -->
<bean id="productDao" class="xu.ssh.dao.ProductDao">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
(2)在struts.xml中配置action类:
<package name="ssh" extends="struts-default" namespace="/">
<!-- Action自身管理类:Struts2和Spring整合的方法一 -->
<!-- <action name="product_*" class="xu.ssh.action.ProductAction" method="{1}"></action> -->
<!-- 交给Spring管理,能够实现AOP处理,建议使用第二种方式:就是class中使用Spring中的id名称即可-->
<action name="product_*" class="productAction" method="{1}"></action>
</package>
(3)配置完成后,在action类中创建save方法,然后分别创建service和dao层的save方法给action调用,然后就可以启动服务器进行测试(点击添加按钮,Console控制台将出现三行在action,service和dao中需要输出的内容)
//保存商品的执行的方法:save
public String save(){
System.out.println("Action中的save方法执行了...");
productService.save(product);
return NONE;
}
四、Spring整合Hibernate
**1.创建数据库并配置实体类文件;**
(1)进入dos界面:输入用户名密码登录SQLServer数据库,并创建ssh数据库,过程略;
(2)在domain包下创建product.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="cn.gdedu.ssh.domain.Product" table="product">
<id name="pid" column="pid">
<generator class="native"/><!-- native表示自增 -->
</id>
<property name="pname" column="pname" length="20"/>
<property name="price" column="price"/>
</class>
</hibernate-mapping>
**2.配置c3p0连接池和Hibernate的一些属性;**
(1)在applicationContext.xml中加入以下内容:
<!-- 启动服务器,自动加载配置文件,将自动创建表 -->
<!-- 引入外部的属性文件 -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 配置连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${user}"></property>
<property name="password" value="${password}"></property>
<property name="driverClass" value="${driverClass}"></property>
<property name="jdbcUrl" value="${jdbcUrl}"></property>
</bean>
<!-- 配置Hibernate的相关属性 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<!-- 注入连接池 -->
<property name="dataSource" ref="dataSource"></property>
<!-- 配置Hibernate的属性 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<!-- 加载Hibernate中的映射文件 -->
<property name="mappingResources">
<list>
<value>xu/ssh/domain/Product.hbm.xml</value>
</list>
</property>
</bean>
**3.编写DAO中的代码**
(1)productDao类继承HibernateDaoSupport类;
(2)在applicationContext.xml中配置Dao时加入:
<!-- 配置DAO的类 -->
<bean id="productDao" class="xu.ssh.dao.ProductDao">
<!-- 注入HibernateDaoSupport模板,只需要注入sessionFactory,然后通过getHibernateTemplate方法即可 -->
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
(3)在productDao中调用模板完成:
//DAO中的保存商品的方法
public void save(Product product) {
System.out.println("DAO中的save方法执行了");
this.getSessionFactory().getCurrentSession().save(product);
/**
* 由于hibernate4已经完全可以实现事务了 ,与spring3.1中的hibernatedao,hibernateTemplete等有冲突,
* 所以spring3.1里已经不提供hibernatedaosupport,hibernateTemplete了,只能用hibernate原始的方式用session。
*
* 解决方法:Session session = getSessionFactory().getCurrentSession()。
*/
}
**4.添加事务管理**
(1)在applicationContext.xml中加入以下内容:
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 开启注解事务,在Service类上面写上transational注解,注意导对包即可 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
(2)在ProductService类上加上@Transactional注解