Struts2+Spring3+Hibernate4+Maven整合

Struts2+Spring3+Hibernate4+Maven整合

 

目錄

1.建立Maven工程

2.搭建Spring3
3.搭建Struts2並整合Spring3
4.搭建Hibernate4並整合Spring3

 

內容

1. 建立Maven工程

 

JDK要選擇默認的,這樣別人在使用的時候,如何JDk不一致的話也不會出錯.


Maven標準目錄

src/main/java

src/main/resources

src/test/java

src/test/resources


發佈項目:Maven install

清除編譯過的項目:Maven clean

 

OK,Mean工程創建成功!

 

2. 搭建 Spring3 

(1)下載Spring3需要的jar

1.spring-core

2.spring-context

3.spring-jdbc

4.spring-beans

5.spring-web

6.spring-expression

7.spring-orm

在 pom.xml中編寫Spring3需要的包,maven會自動下載這些包。

<!-- spring3 -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-core</artifactId>

<version>3.1.2.RELEASE</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context</artifactId>

<version>3.1.2.RELEASE</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-jdbc</artifactId>

<version>3.1.2.RELEASE</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-beans</artifactId>

<version>3.1.2.RELEASE</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-web</artifactId>

<version>3.1.2.RELEASE</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-expression</artifactId>

<version>3.1.2.RELEASE</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-orm</artifactId>

<version>3.1.2.RELEASE</version>

</dependency>

 

        (2)編寫Spring配置文件

<?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" xsi:schemaLocation="

http://www.springframework.org/schema/beans 

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 

http://www.springframework.org/schema/context 

http://www.springframework.org/schema/context/spring-context-3.0.xsd

">

 

<!-- 引入屬性文件 -->

<context:property-placeholder location="classpath:config.properties" />

 

<!-- 自動掃描dao和service包(自動注入) -->

<context:component-scan base-package="com.zc.dao,com.zc.service" />

 

</beans>

 

 

 (3)編寫測試

首先,在src/main/java中創建com.zc.service包,在包中編寫一個 UserService 接口,代碼如下:

package com.zc.service;

 

/**

 * 測試

 * @author ZC

 * */

public interface UserService {

public void test();

}

然後,在src/main/java中創建com.zc.service.imple包,在包中編寫 UserServiceImple 實現類,代碼如下:

package com.zc.service.impl;

 

import org.springframework.stereotype.Service;

 

import com.zc.service.UserService;

 

@Service("userService")

public class UserServiceImpl implements UserService {

 

@Override

public void test() {

System.out.println("Hello World!");

}

}

注意:@Service("userService")使用junit註解完成service 注入,所以還要在pom.xml中配置junit註解。

<!-- junit -->

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.10</version>

<scope>test</scope>

</dependency>

<scope>test</scope>這裏的test表示測試時編譯src/main/test文件夾中的文件,等發佈的時候不編譯。

最後,在src/main/test中創建com.zc.test包,在包中編寫 TestSpring類,代碼如下:

package com.zc.test;

 

import org.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

 

import com.zc.service.UserService;

 

/**

 * 測試Spring3

 * */

public class TestSpring {

@Test

public void test() {

ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:spring/*");

UserService userService = (UserService) ac.getBean("userService");

userService.test();

}

}

JUnit Test運行,結果如圖所示:

 

 

 

(4) web.xml 中配置Spring 監聽器

<!-- Spring監聽器 -->

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

<!-- Spring配置文件位置 -->

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:spring/*</param-value>

</context-param>

(5) 測試,先Maven install,然後放入tomcat服務器,最後啓動。

 

輸入地址訪問

 

 

OK,Spring3搭建成功!

 

3. 搭建 Struts2並整合Spring3

(1)下載Struts2所需要的jar

1.strtus2-core

2.struts2-spring-plugin

3.struts2-convention-plugin


在 pom.xml中編寫Spring3需要的包,maven會自動下載這些包

<!-- struts2 -->

<dependency>

<groupId>org.apache.struts</groupId>

<artifactId>struts2-core</artifactId>

<version>2.3.4.1</version>

<!--  

<exclusions>

<exclusion>

<groupId>javassist</groupId>

<artifactId>javassist</artifactId>

</exclusion>

</exclusions>

-->

</dependency>

<dependency>

<groupId>org.apache.struts</groupId>

<artifactId>struts2-spring-plugin</artifactId>

<version>2.3.4.1</version>

</dependency>

<dependency>

<groupId>org.apache.struts</groupId>

<artifactId>struts2-convention-plugin</artifactId>

<version>2.3.4.1</version>

</dependency>

<!-- hibernate4 -->

<dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate-core</artifactId>

<version>4.1.7.Final</version>

<exclusions>

<exclusion>

<groupId>javassist</groupId>

<artifactId>javassist</artifactId>

</exclusion>

</exclusions>

</dependency>

 

<exclusions>

<exclusion>

<groupId>javassist</groupId>

<artifactId>javassist</artifactId>

</exclusion>

</exclusions>

這裏的 exclusions 是排除包,因爲 Struts2中有javassistHibernate 中也有javassist,所以如果要整合Hibernate,一定要排除掉Struts2中的javassist,否則就衝突了。

 

(2)編寫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>

 

<!-- 指定由spring負責action對象的創建 -->

<constant name="struts.objectFactory" value="spring" />

<!-- 所有匹配*.action的請求都由struts2處理 -->

<constant name="struts.action.extension" value="action" />

<!-- struts配置文件改動後,是否重新加載(開發時設置爲true,發佈到生產環境後設置爲false) -->

<constant name="struts.configuration.xml.reload" value="true" />

<!-- 是否啓用開發模式(開發時設置爲true,發佈到生產環境後設置爲false)-->

<constant name="struts.devMode" value="true" />

<!-- 每次HTTP請求系統都重新加載資源文件,有助於開發(開發時設置爲true,發佈到生產環境後設置爲false) -->

<constant name="struts.i18n.reload" value="true" />

<!-- 請求參數的編碼方式 -->

<constant name="struts.i18n.encoding" value="utf-8" />

<!-- 設置瀏覽器是否緩存靜態內容(開發時設置爲false,發佈到生產環境後設置爲true) -->

<constant name="struts.serve.static.browserCache" value="false" />

<!-- 文件上傳最大值 -->

<constant name="struts.multipart.maxSize" value="104857600" />

<!-- 讓struts2支持動態方法調用,使用歎號訪問方法 -->

<constant name="struts.enable.DynamicMethodInvocation" value="true" />

<!-- Action名稱中是否還是用斜線 -->

<constant name="struts.enable.SlashesInActionNames" value="false" />

<!-- 允許標籤中使用表達式語法 -->

<constant name="struts.tag.altSyntax" value="true" />

<!-- 對於WebLogic,Orion,OC4J此屬性應該設置成true -->

<constant name="struts.dispatcher.parametersWorkaround" value="false" />

<package name="basePackage" extends="struts-default">

</package>

</struts>

 

(3)在web.xml中配置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>*.action</url-pattern>

</filter-mapping>

 

(4)編寫測試

首先,在src/main/java中創建com.zc.action包,在包中編寫一個 UserAction,代碼如下:

package com.zc.action;

 

import org.apache.log4j.Logger;

 

import org.apache.struts2.convention.annotation.Action;

import org.apache.struts2.convention.annotation.Namespace;

import org.apache.struts2.convention.annotation.ParentPackage;

import org.springframework.beans.factory.annotation.Autowired;

 

import com.zc.service.UserService;

 

@ParentPackage("basePackage")

@Namespace("/user")

@Action("userAction")

public class UserAction {

/**

 * Logger for this class

 */

private static final Logger logger = Logger.getLogger(UserAction.class);

private UserService userService;

public UserService getUserService() {

return userService;

}

@Autowired

public void setUserService(UserService userService) {

this.userService = userService;

}

 

public void test(){

logger.info("進入 test");

userService.test();

}

}

注意:這裏使用@Autowired註解將userService注入到UserAction中。

 

測試,先Maven install,然後放入tomcat服務器,最後啓動,輸入訪問地址:

http://localhost:8080/sshe_zc/user/userAction!test.action

 

 

OK,Struts2搭建並整合Spring3成功!

 

4. 搭建 Hibernate4並整合Spring3

(1)下載Hibernate4需要的jar

1.hibernate-core

在 pom.xml中編寫Spring3需要的包,maven會自動下載這些包

<!-- hibernate4 -->

<dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate-core</artifactId>

<version>4.1.7.Final</version>

</dependency>

一定要排除掉Struts2中的javassist,否則就衝突了。

 

(2)編寫Hibernate配置

<?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:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="

http://www.springframework.org/schema/beans 

http://www.springframework.org/schema/beans/spring-beans-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

">

 

<!-- 配置數據源 -->

<bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">

<property name="url" value="${jdbc_url}" />

<property name="username" value="${jdbc_username}" />

<property name="password" value="${jdbc_password}" />

 

<!-- 初始化連接大小 -->

<property name="initialSize" value="0" />

<!-- 連接池最大使用連接數量 -->

<property name="maxActive" value="20" />

<!-- 連接池最大空閒 -->

<property name="maxIdle" value="20" />

<!-- 連接池最小空閒 -->

<property name="minIdle" value="0" />

<!-- 獲取連接最大等待時間 -->

<property name="maxWait" value="60000" />

 

<property name="validationQuery" value="${validationQuery}" />

<property name="testOnBorrow" value="false" />

<property name="testOnReturn" value="false" />

<property name="testWhileIdle" value="true" />

 

<!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連接,單位是毫秒 -->

<property name="timeBetweenEvictionRunsMillis" value="60000" />

<!-- 配置一個連接在池中最小生存的時間,單位是毫秒 -->

<property name="minEvictableIdleTimeMillis" value="25200000" />

 

<!-- 打開removeAbandoned功能 -->

<property name="removeAbandoned" value="true" />

<!-- 1800秒,也就是30分鐘 -->

<property name="removeAbandonedTimeout" value="1800" />

<!-- 關閉abanded連接時輸出錯誤日誌 -->

<property name="logAbandoned" value="true" />

 

<!-- 監控數據庫 -->

<property name="filters" value="mergeStat" />

</bean>

 

<!-- 配置hibernate session工廠 -->

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">

<property name="dataSource" ref="dataSource" />

<property name="hibernateProperties">

<props>

<!-- web項目啓動時是否更新表結構 -->

<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>

<!-- 本地語言 -->

<prop key="hibernate.dialect">${hibernate.dialect}</prop>

<!-- 是否顯示Hibernate語言 -->

<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>

<!-- 是否顯示Hibernate語言格式化 -->

<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>

</props>

</property>

 

<!-- 自動掃描註解方式配置的hibernate類文件 -->

<property name="packagesToScan">

<list>

<value>com.zc.entity</value>

</list>

</property>

 

</bean>

 

<!-- 配置Hibernate事務管理器 -->

<bean name="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">

<property name="sessionFactory" ref="sessionFactory"></property>

</bean>

<!-- 攔截器方式配置事物 -->

<tx:advice id="transactionAdvice" transaction-manager="transactionManager">

<tx:attributes>

<!-- 以如下關鍵字開頭的方法使用事物 -->

<tx:method name="add*" />

<tx:method name="save*" />

<tx:method name="update*" />

<tx:method name="modify*" />

<tx:method name="edit*" />

<tx:method name="delete*" />

<tx:method name="remove*" />

<tx:method name="repair" />

<tx:method name="deleteAndRepair" />

<!-- 以如下關鍵字開頭的方法不使用事物 -->

<tx:method name="get*" propagation="SUPPORTS" />

<tx:method name="find*" propagation="SUPPORTS" />

<tx:method name="load*" propagation="SUPPORTS" />

<tx:method name="search*" propagation="SUPPORTS" />

<tx:method name="datagrid*" propagation="SUPPORTS" />

<!-- 其他方法不使用事物 -->

<tx:method name="*" propagation="SUPPORTS" />

</tx:attributes>

</tx:advice>

<!-- 切面,將事物用在哪些對象上 -->

<aop:config>

<aop:pointcut id="transactionPointcut" expression="execution(* com.zc.service..*Impl.*(..))" />

<aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice" />

</aop:config>

 

</beans>

 

 

(3)編寫測試

首先,在src/main/java中創建com.zc.dao包,在包中編寫一個 UserDao接口,代碼如下:

package com.zc.dao;

 

import java.io.Serializable;

 

import com.zc.entity.Tuser;

 

public interface UserDao {

public Serializable save(Tuser user);

}

然後,在src/main/java中創建com.zc.dao.imple包,在包中編寫 UserDaoImple 實現類,代碼如下:

package com.zc.dao.impl;

 

import java.io.Serializable;

 

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Repository;

 

import com.zc.dao.UserDao;

import com.zc.entity.Tuser;

 

@Repository("userDao")

public class UserDaoImpl implements UserDao {

private SessionFactory sessionFactory;

 

public SessionFactory getSessionFactory() {

return sessionFactory;

}

 

@Autowired

public void setSessionFactory(SessionFactory sessionFactory) {

this.sessionFactory = sessionFactory;

}

public Session getCurrentSession(){

return sessionFactory.getCurrentSession();

}

 

@Override

public Serializable save(Tuser user) {

return this.getCurrentSession().save(user);

}

}

 

注意:這裏使用@Repository("userDao")註解完成dao注入

使用@Autowired註解將sessionFactory注入到UserDaoImpl中。

 

最後,在src/main/test中創建com.zc.test包,在包中編寫 TestHibernate類,代碼如下:

package com.zc.test;

 

import java.util.Date;

import java.util.UUID;

 

import org.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

 

import com.zc.entity.Tuser;

import com.zc.service.UserService;

 

public class TestHibernate {

@Test

public void test(){

ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:spring/*");

UserService userService = (UserService) ac.getBean("userService");

Tuser user = new Tuser();

user.setUuid(UUID.randomUUID().toString());

user.setUsername("zc");

user.setPassword("123456");

user.setCreatetime(new Date());

userService.save(user);

}

}

運行後報錯,請在pom.xml中添加如下jar

<!-- druid -->

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>druid</artifactId>

<version>0.2.7</version>

</dependency>

<!-- aspectjweaver -->

<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjweaver</artifactId>

<version>1.7.0</version>

</dependency>

數據庫驅動

<!-- oracle數據庫驅動 -->

<dependency>

    <groupId>com.oracle</groupId>

    <artifactId>ojdbc14</artifactId>

    <version>10.2.0.4.0</version>

</dependency>

<!-- sql server數據庫驅動 

<dependency>

<groupId>net.sourceforge.jtds</groupId>

<artifactId>jtds</artifactId>

<version>1.2.4</version>

</dependency> -->

<!-- mysql數據庫驅動 

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>5.1.21</version>

</dependency> -->

這裏在下載 oracle數據庫驅動時會出錯,因爲oracle是商業用的,要收費的,解決方法:

a.到網上下載ojdbc14,

下載地址:http://ishare.iask.sina.com.cn/download/explain.php?fileid=22222387,

將下載ojdbc14-10.2.0.4.0.jar的放到d盤根目錄

b.執行如下DOS命令,回車

mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.4.0 -Dpackaging=jar -Dfile=D:/ojdbc14-10.2.0.4.0.jar

執行結果:

 

C.重啓MyEclipse就可以了。

 

再運行JUnit,添加數據

 

 

OK,Hibernate4搭建並整合Spring3成功!

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章