这个不用多说,老师画的一张图还是可以的:
版本比较旧,但是方法还是好的,给初学者还是很大帮助的。
SSH整合的三种方式:
1、带有HIbernate配置文件的方式
2、不带有HIbernate配置文件的方式
3、纯注解的
这一次我们采用第二种方式来进行SSH框架整合。
Struts2框架开发的相应的jar包
一般我们都去这个路径下struts-2.3.31\apps\struts2-blank\WEB-INF\lib索取开发的jar包:
然后再去struts-2.3.31\lib索取其它比较重要的jar包:
struts2-convention-plugin-2.3.31.jar:Struts2的注解开发的jar包
struts2-spring-plugin-2.3.31.jar:Struts2用于整合Spring的jar包
HIbernate框架开发的相应的jar包
我们使用的Hibernate版本是hibernate-release-3.3.1.Final。
hibernate-release-3.3.1.Final\lib\required\*.jar
hibernate-release-3.3.1.Final\lib\jpa\*.jar
Spring框架开发的相应的jar包
spring-framework-3.2.0.RELEASE
做Spring基本开发需要引入的jar包:
IoC
spring-beans-3.2.0.RELEASE.jar
spring-context-3.2.0.RELEASE.jar
spring-core-3.2.0.RELEASE.jar
spring-expression-3.2.0.RELEASE.jar
依赖的jar包
com.springsource.org.apache.log4j-1.2.15.jar
com.springsource.org.apache.commons.logging-1.1.1.jar
AOP
spring-aop-3.2.0.RELEASE.jar
spring-aspects-3.2.0.RELEASE.jar
依赖的jar包
com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
事务管理的jar包
spring-tx-3.2.0.RELEASE.jar
整合HIbernate的包
spring-orm-3.2.0.RELEASE.jar
spring-jdbc-3.2.0.RELEASE.jar
整合Web项目
spring-web-3.2.0.RELEASE.jar
整合Junit单元测试
spring-test-3.2.0.RELEASE.jar
连接池:
com.springsource.com.mchange.v2.c3p0-0.9.1.2.jar
有关日志记录的jar包
slf4j-log4j12-1.7.5.jar: slf4j整合log4j的jar包
commons-logging-1.1.3.jar
mysql-connector-java-5.1.22-bin.jar:MySQL数据库驱动包
这里将已经配置好的配置文件贴出来,后面很多的配置连接池和事务管理以及注入方式步骤省略。
WebContent/WEB-INF/web.xml配置文件的内容:
struts2_spring3_hibernate3
index.jsp
struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts2
/*
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
classpath:applicationContext.xml
struts.xml配置文件
在src目录下引入struts.xml
src/applicationContext.xml配置文件的内容:
org.hibernate.dialect.MySQLDialect
true
true
update
com/demo/domain/Product.hbm.xml
src/jdbc.properties属性配置文件的内容:
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssh
jdbc.username=root
jdbc.password=root
src/log4j.properties属性配置文件的内容:
log4j.rootLogger = debug, console, E
#level=INFO,all can be output
#console is set to be a ConsoleAppender
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = [%p] %d{yyyy-MM-dd HH:mm:ss} - %m%n
#file is set to output to a extra file
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.Threshold=error
log4j.appender.E.Encoding=UTF-8
log4j.appender.E.layout.ConversionPattern=[%p] %d{yyyy-MM-dd HH:mm:ss} - %m%n
log4j.appender.E.DatePattern='.'yyyy-MM-dd
log4j.appender.E.File = ${catalina.base}/logs/dd/error.log
addProduct.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
添加商品页面
保存商品的页面
商品名称:
商品价格:
Product.java
package com.demo.domain;
/**
* 商品实体类
* @author Administrator
* @date 2016年12月24日
*/
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 Double getPrice() {
return price;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public void setPrice(Double price) {
this.price = price;
}
}
Product.hbm.xml
ProductAction.java
package com.demo.action;
import com.demo.domain.Product;
import com.demo.service.ProductService;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
/**
* 商品管理的action类
* @author Administrator
* @date 2016年12月24日
*/
@SuppressWarnings("serial")
public class ProductAction extends ActionSupport implements ModelDriven{
//模型驱动使用的类
private Product product = new Product();
@Override
public Product getModel() {
return product;
}
//Struts2和Spring整合过程中按名称注入的业务层的类
private ProductService productService;
public void setProductService(ProductService productService) {
this.productService = productService;
}
/**
* action保存商品的执行方法:save()
* @return
*/
public String save(){
System.out.println("Action中的save()方法执行了");
productService.save(product);
return NONE;
}
}
ProductService.java
package com.demo.service;
import org.springframework.transaction.annotation.Transactional;
import com.demo.dao.ProductDao;
import com.demo.domain.Product;
/**
* 商品管理的service类
* @author Administrator
* @date 2016年12月24日
*/
@Transactional
public class ProductService {
//业务层注入DAO的类
private ProductDao productDao;
public void setProductDao(ProductDao productDao) {
this.productDao = productDao;
}
/**
* 业务层保存商品的方法
* @param product
*/
public void save(Product product) {
System.out.println("Service中的save()方法执行了");
productDao.save(product);
}
}
ProductDao.java
package com.demo.dao;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.demo.domain.Product;
/**
* 商品管理的dao类
* @author Administrator
* @date 2016年12月24日
*/
public class ProductDao extends HibernateDaoSupport {
/**
* DAO中保存商品的方法
* @param product
*/
public void save(Product product) { System.out.println("DAO中的save()方法执行了"); this.getHibernateTemplate().save(product); } }
Struts2和Spring整合的两种方式:
1、Action的类由Struts2自身去创建
Action的配置:struts.xml
Service和DAO是如何配置的
2、Action的类交给Spring框架创建
Action配置
create database ssh charset utf8;
在上面的Applicatiom.xml文件已经配置。不管是注入方式还是事务管理,在上面的步骤基本都包括了,就不再
一一赘述。
运行项目:
控制台输出:
数据库的数据:
上述的流程基本通过,下一篇就是实现案例:开发员工管理系统(一个小的示例)