一、关于本次整合的部署版本
spring 3.1.4
hibernate 4.2.0 final(原本使用的4.3beta,后来有个bug未能攻破,换了4.2的core包)
struts 2.3.14相关链接:http://s3.amazonaws.com/dist.springframework.org/release/SPR/spring-framework-3.1.4.RELEASE-with-docs.ziphttp://jaist.dl.sourceforge.net/project/hibernate/hibernate4/4.2.0.Final/hibernate-release-4.2.0.Final.ziphttp://labs.mop.com/apache-mirror//struts/library/struts-2.3.14-lib.zip
二、部署过程详解1、首先需要spring文档一份2、导入spring的jar包,在类路径下添加一个applicationContext.xml对ioc进行测试
<?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:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd"
default-autowire="byName">
<bean id="testService" class="cn.tv189.service.TestService"></bean>
</beans>
TestService.java代码
package cn.tv189.service;
public class TestService {
public String doService(){
return "got u";
}
}
spring测试代码:
package cn.tv189.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.tv189.service.TestService;
public class TestSpring {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
TestService ts = (TestService)ac.getBean("testService");
String re = ts.doService();
System.out.println(re);
}
}
note:
可能会提示缺少commons-logging.jar包,你可以在下载的struts的lib文件下找到,或者别的什么地方
————————————————————spring部署结束————————————————————
3、将下载的hibernate的jar包导入工程中
i)在applicationContext.xml中加入
dbcp数据源配置(由spring进行自动管理)
<bean id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="initialSize" value="3"/>
<property name="maxActive" value="100"/>
<property name="maxIdle" value="2"/>
<property name="minIdle" value="1"/>
</bean>
<context:property-placeholder location="classpath:jdbc.properties"/>
配置sessionFactory
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource2"/>
<property name="mappingResources">
<list>
<value>cn/tv189/domain/student.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.OracleDialect
hibernate.hbm2ddl.auto=update
hibernate.show_sql=true
hibernate.format_sql=true
</value>
</property>
</bean>
note:
这边仅仅hibernate的jar包是不够的,因为涉及到数据库连接池,所以单独使用dbcp需要去apache
下载三个包,分别是:commons-dbpc.jar、commons-collections.jar、commons-pool.jar
(详见http://commons.apache.org/)
当然不能忘记数据库驱动,我这边用的是oracle,当然就要导入ojdbc了。
ii)配置jdbc.properties
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:xe
jdbc.username=system
jdbc.password=1234
java测试代码:
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
SessionFactory sf = (SessionFactory) ac.getBean("sessionFactory");
Session s = sf.openSession();
Student stu = new Student("汤姆andJerry");
Transaction ts = s.beginTransaction();
s.save(stu);
ts.commit();
5、这里是Student类的domain和xml
Student.java
package cn.tv189.domain;
import java.io.Serializable;
public class Student implements Serializable{
private static final long serialVersionUID = -3807511470861510540L;
private int id;
private String name;
public Student(){
}
public Student(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;
}
}
student.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 package="cn.tv189.domain">
<class name="Student" table="student">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native"/>
</id>
<property name="name" type="java.lang.String">
<column name="email" length="160"/>
</property>
</class>
</hibernate-mapping>
————————————————————hibernate部署结束————————————————————
6、struts2的部署比较简单,参考spring文档的公共部署部分配置web.xml
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext*.xml</param-value>
</context-param>
7、加入struts2核心包和其他几个必须的包
commons-fileupload.jar
freemarker.jar
ognl-2.7.3.jar
struts2-core.jar
xwork-core.jar
note:
这里有个和spring整合时候用到的特殊的包:
struts2-spring-plugin-2.3.14.jar
8、配置struts2的过滤器到web.xml
<filter>
<filter-name>strutsFilter</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>strutsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
note:
这里一般会配置一个防止内存溢出的监听器(spring管理的bean本身不会溢出,但是第三方可能会在请求后无法正常回收):
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
9、在类路径下配置struts2的配置文件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>
<package name="stu-package" extends="struts-default">
<action name="list" class="studentAction">
<result name="success">/index.jsp</result>
</action>
</package>
</struts>
<bean id="studentAction" class="cn.tv189.action.StudentAction">
<property name="testService" ref="testService"/>
</bean>
note:
这里struts.xml的action中的class指向的是applicationContext.xml中的bean的id,这样就能找到类了。
至此,spring的ioc和struts.xml的ioc就关联起来了,大功告成!
最后的一些note:
可能会缺少一些相关的包,这里列出一些我遇到的,假如还不足,自求多福吧(哈哈哈,开玩笑的,互相交流~)
可以在struts2的lib目录下找到的包:
commons-lang3.jar
commons-io.jar
java测试代码:
package cn.tv189.action;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
import cn.tv189.domain.Student;
import cn.tv189.service.TestService;
public class StudentAction {
private TestService testService;
private Student s;
public String execute(){
System.out.println("调用成功");
// ServletActionContext.getRequest()
testService.doService();
s = new Student();
s.setId(1);
s.setName("Tom&杰瑞");
return "success";
}
public Student getS() {
return s;
}
public void setS(Student s) {
this.s = s;
}
public TestService getTestService() {
return testService;
}
public void setTestService(TestService testService) {
this.testService = testService;
}
}
index.jsp代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<table>
<tr>
<td>${s.id}</td>
<td>${s.name}</td>
</tr>
</table>
</body>
</html>