1、搭建SSH 开发环境 目录 1. 环境准备 1 1.1 Spring 1 1.2 Struts2 1 1.3 Hibernate 1 1.4 jdbc driver 2 1.5 Apache commons jar 2 2. 集成SSH 2 2.1 新建 Dynamic Web Project 2 2.2 编写测试代码 3 2.2.1 新建 databean 3 2.2.2 编写 hibernate 映射文件 4 2.2.3 编写业务bean 4 2.2.4 编写 Spring 配置文件 8 2.2.5 编写 JUnit 测试代码 9 2.3 集成 stru
2、ts2 12 2.3.1 引入struts2 依赖 jar 12 2.3.2 编写控制层代码 12 2.3.3 编写 struts2 配置文件 14 2.3.4 修改 spring 配置文件 15 2.3.5 编写 jsp 代码 15 2.3.6 修改 web.xml 16 2.3.7 测试 17 参考资料 19 1. 环境准备 1.1 Spring url:http://www.springsource.org/ 下载:spring-framework-2.5.6.SEC02.zip 所需 jar : 序号 文件 路径
3、 1 spring.jar /dist 2 spring-aspects.jar /dist/weaving 1.2 Struts2 url:http://struts.apache.org/ 下载:struts-2.1.8.1-lib.zip 所需 jar : 序号 文件 路径 1 commons-fileupload-1.2.1.jar /lib 2 commons-io-1.3.2.jar /lib 3 freemarker-2.3.15.jar /lib 4 ognl-2.7.3.jar /lib 5
4、 struts2-core-2.1.8.1.jar /lib 6 struts2-spring-plugin-2.1.8.1.jar /lib 7 xwork-core-2.1.6.jar /lib 1.3 Hibernate url: 下载:hibernate-distribution-3.5.3-Final-dist.zip hibernate-annotations-3.4.0.GA.zip 所需 jar : hibernate-distribution-3.5.3-Final-dist.zip 序
5、号 文件 路径 1 hibernate3.jar / 2 antlr-2.7.6.jar /lib/required 3 commons-collections-3.1.jar /lib/required 4 dom4j-1.6.1.jar /lib/required 5 javassist-3.9.0.GA.jar /lib/required 6 jta-1.1.jar /lib/required 7 slf4j-api-1.5.8.jar /lib/required 8 ehcache-1.5.0.jar /Lib/optional/eh
6、cache hibernate-annotations-3.4.0.GA.zip 序号 文件 路径 1 ejb3-persistence.jar /lib 2 log4j.jar /lib/test 3 slf4j-log4j12.jar /lib/test 1.4 jdbc driver url: 下载:mysql-connector-java-5.1.13.zip 所需 jar : 序号 文件 路径 1 mysql-connector-java-5.1.13-bin.jar / 1.5 Apac
7、he commons jar url:http://commons.apache.org/ 下载:commons-dbcp-1.3-bin.zip commons-pool-1.5.4-bin.zip commons-logging-1.1.1-bin.zip 所需 jar : commons-dbcp-1.3-bin.zip 序号 文件 路径 1 commons-dbcp-1.3.jar / commons-pool-1.5.4-bin.zip 序号 文件 路径 1 commons-pool-1.5.4.j
8、ar / commons-logging-1.1.1-bin.zip 序号 文件 路径 1 commons-logging-1.1.1.jar / 2 commons-logging-api-1.1.1.jar / 2. 集成SSH 2.1 新建 Dynamic Web Project a. 打开 Eclipse -> 打开 Java EE Perspective (Window -> Open Perspective -> Other... -> Java EE) -> 打开 Package Explorer View (Window
9、 -> Show View -> Other... -> Package Explorer) b. 新建 Project File -> New -> Dynamic Web Project -> 输入 Project name: SSH,单击 Next -> 修改 Default output folder: WebContent/WEB-INF/classes,单击 Finish c. 设置项目编码 utf-8 选中 SSH -> Project -> Properties -> Resource -> Text file encoding -> Other:
10、UTF-8 -> Apply d. 设置编译级别 选中 SSH -> Project -> Properties -> Java Compiler -> 选择 Compiler compliance level: 1.5 e. 添加 JUnit 支持 选中 SSH -> Project -> Properties -> Java Build Path -> Libraries -> Add Library... -> 选择JUnit,单击 Next -> 选择 JUnit Library version: JUnit 4 -> Finish f. 添加
11、Spring, Hibernate, jdbc driver及 Apache commons的所需 jar 将需要的jar 复制到 WebContent/WEB-INF/lib 目录中 -> 选中 SSH -> Project -> Properties -> Java Build Path -> Libraries -> 展开Web App Libraries -> 确认所需 jar 文件已在 build path 中 2.2 编写测试代码 2.2.1 新建 databean // org.demo.bean.Person.java package org
12、demo.bean; /** * databean:Person * @author * @date 2010-7-17 * @file org.demo.bean.Person.java */ public class Person { private int id; private String name; public Person(){ } public Person(String name){ this.name = name; } public int getId() { return i
13、d; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + "]"; } } 2.2.2 编写 hibernate 映
14、射文件
// org.demo.bean.Person.hbm.xml
16、onService.java package org.demo.service; import java.util.List; import org.demo.bean.Person; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; /** * 业务层:PersonService * @author * @date 2010-7-20 *
17、@file org.demo.service.PersonService.java */ public interface PersonService { /** * 保存 * @param person */ public abstract void save(Person person); /** * 修改 * @param person */ public abstract void update(Person person); /** * 删除 * @param personId */
18、 public abstract void delete(int personId); /** * 删除所有 */ public abstract void deleteAll(); /** * 获取 * @param personId * @return */ @Transactional(readOnly = true, propagation = Propagation.NOT_SUPPORTED) public abstract Person get(int personId); /** * 分页查询 [s
19、tartRow < rowNum <= startRow + maxResult]
* @param startRow
* @param maxResult
* @return
*/
@Transactional(readOnly = true, propagation = Propagation.NOT_SUPPORTED)
public abstract List
20、eadOnly = true, propagation = Propagation.NOT_SUPPORTED)
public abstract List
21、nate.Query; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; /** * 业务层:PersonBeanImpl * @author * @date
22、 2010-7-20 * @file org.demo.service.impl.PersonServiceImpl.java */ @Transactional public class PersonServiceImpl implements PersonService { @Autowired //@Resource //[在 jdk1.6下] private SessionFactory sessionFactory; /** * 保存 * @param person */ public void save(Person p
23、erson){ sessionFactory.getCurrentSession().persist(person); } /** * 修改 * @param person */ public void update(Person person){ sessionFactory.getCurrentSession().merge(person); } /** * 删除 * @param personId */ public void delete(int personId){ Object bean = sessio
24、nFactory
.getCurrentSession().load(Person.class,personId);
sessionFactory.getCurrentSession().delete(bean);
}
/**
* 删除所有
*/
public void deleteAll(){
List 25、t.get(i));
}
}
/**
* 获取
* @param personId
* @return
*/
@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
public Person get(int personId){
return (Person)sessionFactory.getCurrentSession()
.get(Person.class,personId);
}
/ 26、
* 分页查询 [startRow < rowNum <= startRow + maxResult]
* @param startRow
* @param maxResult
* @return
*/
@SuppressWarnings("unchecked")
@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
public List 27、nFactory.getCurrentSession()
.createQuery("from Person");
query.setFirstResult(startRow);
query.setMaxResults(maxResult);
return query.list();
}
/**
* 获取全部
* @return
*/
@SuppressWarnings("unchecked")
@Transactional(readOnly=true,propagat 28、ion=Propagation.NOT_SUPPORTED)
public List 30、ion="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframe 31、work.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
34、/>
35、/bean/Person.hbm.xml
36、 hibernate.format_sql=false
37、
38、xsd-config-body
2.2.5 编写 JUnit 测试代码
// test.junit.PersonServiceTest.java
package test.junit;
import java.util.List;
import org.demo.bean.Person;
import org.demo.service.PersonService;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ApplicationC 39、ontext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* JUnit测试类:PersonServiceTest
* @author
* @date 2010-7-20
* @file test.junit.PersonServiceTest.java
*/
public class PersonServiceTest {
private static PersonService bean = null;
@B 40、eforeClass
public static void setUpBeforeClass() throws Exception {
try {
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
bean = (PersonService)ctx.getBean("personService");
} catch (Exception e){
e.printStackTrace();
}
}
@Test
public voi 41、d testAllMethods(){
System.out.println("+----------save---------+");
testSave();
testGetAll();
System.out.println("+----------update-------+");
testUpdate();
testGetAll();
System.out.println("+----------get----------+");
testGet();
System.out.println("+----------getAll---- 42、");
testGetAll();
System.out.println("+----------delete-------+");
testDelete();
testGetAll();
System.out.println("+----------deleteAll----+");
testDeleteAll();
testGetAll();
}
@Test
public void testSave() {
bean.save(new Person("Zhangsan"));
bean.save(new Per 43、son("Lisi"));
}
@Test
public void testUpdate() {
Person person = new Person("Zhangsan_uu");
// 注:此处 id 须修改
person.setId(1);
bean.update(person);
}
@Test
public void testDelete() {
// 注:此处 id 须修改
bean.delete(1);
}
@Test
public void testDeleteAll() {
bean.d 44、eleteAll();
}
@Test
public void testGet() {
// 注:此处 id 须修改
Person person = bean.get(1);
System.out.println(person);
}
@Test
public void testGetPage(){
List 45、
@Test
public void testGetAll() {
List 46、
Person [id=1, name=Zhangsan_uu]
Person [id=2, name=Lisi]
+----------get----------+
Person [id=1, name=Zhangsan_uu]
+----------getAll-------+
Person [id=1, name=Zhangsan_uu]
Person [id=2, name=Lisi]
+----------delete-------+
Person [id=2, name=Lisi]
+----------deleteAll----+
2.3 集成 47、 struts2
2.3.1 引入struts2 依赖 jar
将 struts2 需要的 jar 复制到 WebContent/WEB-INF/lib 目录中
-> 选中 SSH -> Project -> Properties -> Java Build Path -> Libraries
-> 展开Web App Libraries -> 确认所需 jar 文件已在 build path 中
2.3.2 编写控制层代码
// org.demo.action.PersonAction.java
package org.demo.action;
import j 48、ava.util.List;
import javax.servlet.ServletRequest;
import org.apache.struts2.ServletActionContext;
import org.demo.bean.Person;
import org.demo.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import com.opensymphony.xwork2.ActionSupport;
/**
* 49、控制层:PersonAction
* @author
* @date 2010-7-21
* @file org.demo.action.PersonAction.java
*/
public class PersonAction extends ActionSupport{
/**
*
*/
private static final long serialVersionUID = 1L;
@Autowired
private PersonService personService;
/**
* viewbean
*/
private Person person;
/**
* 转到增加页面
* @return
*/
public String addUI(){
return "addUI";
}
/**
* 保存






