资源描述
搭建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 集成 struts2 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 :
序号
文件
路径
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
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
序号
文件
路径
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/ehcache
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 Apache 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.jar
/
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 -> 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: 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. 添加 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.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 id;
}
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 映射文件
// org.demo.bean.Person.hbm.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"
<hibernate-mapping package="org.demo.bean">
<class name="Person" table="PERSON">
<id name="id">
<generator class="native" />
</id>
<property name="name" length="50" not-null="true"/>
</class>
</hibernate-mapping>
注:hibernate 映射文件的模板参见hibernate-distribution-3.5.3-Final
/documentation/manual/zh-CN/pdf/hibernate_reference.pdf
第5章对象/关系数据库映射基础(Basic O/R Mapping)
2.2.3 编写业务bean
// org.demo.service.PersonService.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
* @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
*/
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);
/**
* 分页查询 [startRow < rowNum <= startRow + maxResult]
* @param startRow
* @param maxResult
* @return
*/
@Transactional(readOnly = true, propagation = Propagation.NOT_SUPPORTED)
public abstract List<Person> get(int startRow,int maxResult);
/**
* 获取全部
* @return
*/
@Transactional(readOnly = true, propagation = Propagation.NOT_SUPPORTED)
public abstract List<Person> getAll();
}
//org.demo.service.impl.PersonServiceImpl.java
package org.demo.service.impl;
import java.util.List;
import org.demo.bean.Person;
import org.demo.service.PersonService;
import org.hibernate.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 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 person){
sessionFactory.getCurrentSession().persist(person);
}
/**
* 修改
* @param person
*/
public void update(Person person){
sessionFactory.getCurrentSession().merge(person);
}
/**
* 删除
* @param personId
*/
public void delete(int personId){
Object bean = sessionFactory
.getCurrentSession().load(Person.class,personId);
sessionFactory.getCurrentSession().delete(bean);
}
/**
* 删除所有
*/
public void deleteAll(){
List<Person> list = getAll();
for (int i=0; i<list.size(); i++){
sessionFactory.getCurrentSession().delete(list.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);
}
/**
* 分页查询 [startRow < rowNum <= startRow + maxResult]
* @param startRow
* @param maxResult
* @return
*/
@SuppressWarnings("unchecked")
@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
public List<Person> get(int startRow,int maxResult){
Query query = sessionFactory.getCurrentSession()
.createQuery("from Person");
query.setFirstResult(startRow);
query.setMaxResults(maxResult);
return query.list();
}
/**
* 获取全部
* @return
*/
@SuppressWarnings("unchecked")
@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
public List<Person> getAll(){
return sessionFactory.getCurrentSession()
.createQuery("from Person").list();
}
}
2.2.4 编写 Spring 配置文件
// src/beans.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-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.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">
<!-- 启用注解方式注入依赖对象 -->
<context:annotation-config/>
<!-- 配置 dataSource -->
<bean id="dataSource"
class="mons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://10.162.11.192:3306/test?useUnicode=true&characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="root"/>
<property name="initialSize" value="1"/>
<property name="maxActive" value="500"/>
<property name="maxIdle" value="2"/>
<property name="minIdle" value="1"/>
</bean>
<!-- 配置 sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mappingResources">
<list>
<value>org/demo/bean/Person.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.hbm2ddl.auto=update
hibernate.show_sql=false
hibernate.format_sql=false
</value>
</property>
</bean>
<!-- 配置事务管理器 -->
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 启用注解方式的事务控制 -->
<tx:annotation-driven transaction-manager="txManager"/>
<!-- 配置业务 bean -->
<bean id="personService" class="org.demo.service.impl.PersonServiceImpl"/>
</beans>
注:Spring 配置文件的模板参见
http://static.springsource.org/spring/docs/2.5.x/reference/xsd-config.html#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.ApplicationContext;
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;
@BeforeClass
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 void testAllMethods(){
System.out.println("+----------save---------+");
testSave();
testGetAll();
System.out.println("+----------update-------+");
testUpdate();
testGetAll();
System.out.println("+----------get----------+");
testGet();
System.out.println("+----------getAll-------+");
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 Person("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.deleteAll();
}
@Test
public void testGet() {
// 注:此处 id 须修改
Person person = bean.get(1);
System.out.println(person);
}
@Test
public void testGetPage(){
List<Person> list = bean.get(10,10);
for(int i=0; i<list.size(); i++){
System.out.println(list.get(i));
}
}
@Test
public void testGetAll() {
List<Person> list = bean.getAll();
for(int i=0; i<list.size(); i++){
System.out.println(list.get(i));
}
}
}
运行 testAllMethods()方法,输出如下:
+----------save---------+
Person [id=1, name=Zhangsan]
Person [id=2, name=Lisi]
+----------update-------+
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 集成 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 java.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;
/**
* 控制层: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";
}
/**
* 保存
展开阅读全文