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成功!

 

 

 

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