使用Maven搭建Struts2+Spring3+Hibernate4的整合开发环境 做了三年多的JavaEE开发了,在平时的JavaEE开发中,为了能够用最快的速度开发项目,一般都会选择使用Struts2,SpringMVC,Spring,Hibernate,MyBatis这些开源框架来开发项目,而这些框架一般不是单独使用的,经常是Struts2+Spring3+Hibernate、SpringMVC+Spring+Hibernate、SpringMVC+Spring+Mybatis这几种组合中的一种,也就是多个框架配合起来使用。今天来总结一下如何使用Maven搭建Struts2+Spring3+Hibernate4的整合开发环境。
一、建立Maven工程 第一步:
第二步:
第三步:
创建好的项目如下图所示:
第四步:
注意:这里的JDK要选择默认的,这样别人在使用的时候,如何JDk不一致的话也不会出错,如下图所示:
第五步:
创建Maven标准目录 src/main/java src/main/resources src/test/java src/test/resources
第六步:
发布项目:Maven install
清除编译过的项目:Maven clean
Maven install命令执行结果如下:
OK,Maven工程创建成功!
二、搭建Spring3开发环境 2.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会自动下载这些包以及相关的依赖jar包。
复制代码 1 2 3 org.springframework 4 spring-core 5 3.1.2.RELEASE 6 7 8 org.springframework 9 spring-context 10 3.1.2.RELEASE 11 12 13 org.springframework 14 spring-jdbc 15 3.1.2.RELEASE 16 17 18 org.springframework 19 spring-beans 20 3.1.2.RELEASE 21 22 23 org.springframework 24 spring-web 25 3.1.2.RELEASE 26 27 28 org.springframework 29 spring-expression 30 3.1.2.RELEASE 31 32 33 org.springframework 34 spring-orm 35 3.1.2.RELEASE 36 复制代码
2.2、编写Spring配置文件 在src/main/resources目录下创建一个spring.xml文件,如下图所示:
spring.xml文件的内容如下:
复制代码 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns=“http://www.springframework.org/schema/beans” 3 xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” 4 xmlns:context=“http://www.springframework.org/schema/context” 5 xsi:schemaLocation="http://www.springframework.org/schema/beans 6 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 7 http://www.springframework.org/schema/context 8 http://www.springframework.org/schema/context/spring-context-3.0.xsd 9 "> 10 11 12 <context:property-placeholder location=“classpath:config.properties” /> 13 14 15 <context:component-scan base-package=“me.gacl.dao,me.gacl.service” /> 16 17 复制代码 在src/main/resources目录下创建一个config.properties文件,如下图所示:
config.properties文件主要是用来编写一些系统的配置信息,例如数据库连接信息,config.properties文件中的内容暂时先不编写,等整合到Hibernate时再编写具体的数据库连接信息。
2.3、编写单元测试 首先,在src/main/java中创建me.gacl.service包,在包中编写一个 UserServiceI 接口,如下图所示:
代码如下:
复制代码 1 package me.gacl.service; 2 3 /** 4 * 测试 5 * @author gacl 6 * 7 / 8 public interface UserServiceI { 9 10 /* 11 * 测试方法 12 */ 13 void test(); 14 } 复制代码 然后,在src/main/java中创建me.gacl.service.impl包,在包中编写UserServiceImpl实现类,如下图所示:
代码如下:
复制代码 1 package me.gacl.service.impl; 2 3 import org.springframework.stereotype.Service; 4 5 import me.gacl.service.UserServiceI; 6 //使用Spring提供的@Service注解将UserServiceImpl标注为一个Service 7 @Service(“userService”) 8 public class UserServiceImpl implements UserServiceI { 9 10 @Override 11 public void test() { 12 System.out.println(“Hello World!”); 13 } 14 15 } 复制代码 进行单元测试时需要使用到Junit,所以需要在pom.xml文件中添加Junit的jar包描述,如下:
复制代码 1 2 3 junit 4 junit 5 4.12 6 test 7 复制代码 test这里的test表示测试时编译src/main/test文件夹中的文件,等发布的时候不编译。 最后,在src/main/test中创建me.gacl.test包,在包中编写 TestSpring类,如下图所示:
代码如下:
复制代码 1 package me.gacl.test; 2 3 import me.gacl.service.UserServiceI; 4 5 import org.junit.Test; 6 import org.springframework.context.ApplicationContext; 7 import org.springframework.context.support.ClassPathXmlApplicationContext; 8 9 public class TestSpring { 10 11 @Test 12 public void test(){ 13 //通过spring.xml配置文件创建Spring的应用程序上下文环境 14 ApplicationContext ac = new ClassPathXmlApplicationContext(“classpath:spring.xml”); 15 //从Spring的IOC容器中获取bean对象 16 UserServiceI userService = (UserServiceI) ac.getBean(“userService”); 17 //执行测试方法 18 userService.test(); 19 } 20 } 复制代码 JUnit Test运行,结果如图所示:
2.4、在web.xml中配置Spring监听器 复制代码 1 2 3 org.springframework.web.context.ContextLoaderListener 4 5 6 7 contextConfigLocation 8 classpath:spring.xml 9 复制代码 在tomcat服务器中进行测试,先执行【Maven install】命令发布项目,然后将SSHE项目部署到tomcat服务器,最后启动tomcat服务器
tomcat服务器启动的过程中没有出现报错,输入地址:http://localhost:8080/SSHE/ 能够正常进行访问,就说明Spring3的开发环境搭建成功,如下图所示:
测试通过,Spring3开发环境搭建成功!
三、搭建Struts2开发环境并整合Spring3 3.1、下载Struts2需要的jar包 1.strtus2-core 2.struts2-spring-plugin(struts2和Spring整合时需要使用到的插件) 3.struts2-convention-plugin(使用了这个插件之后,就可以采用注解的方式配置Struts的Action,免去了在struts.xml中的繁琐配置项)
4.struts2-config-browser-plugin(config-browser-plugin插件不是必须的,但是使用了这个插件之后,就可以很方便的浏览项目中的所有action及其与 jsp view的映射)
在pom.xml文件中编写Struts2所需要的jar包,Maven会自动下载这些包
复制代码 1 2 3 org.apache.struts 4 struts2-core 5 2.3.16 6 16 17 18 19 org.apache.struts 20 struts2-convention-plugin 21 2.3.20 22 23 24 25 org.apache.struts 26 struts2-config-browser-plugin 27 2.3.20 28 29 30 31 org.apache.struts 32 struts2-spring-plugin 33 2.3.4.1 34 复制代码
3.2、编写Struts.xml配置文件 在src/main/resources目录下创建一个struts.xml文件,如下图所示:
struts.xml文件中的内容如下:
复制代码 1 <?xml version="1.0" encoding="UTF-8"?> 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 复制代码 3.3、在web.xml中配置Struts2的过滤器 复制代码 1 2 3 struts2 4 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 5 6 7 8 struts2 9 *.action 10 复制代码 3.4、编写测试 首先,在src/main/java中创建me.gacl.action包,在包中编写一个 TestAction类,如下图所示:
代码如下:
复制代码 1 package me.gacl.action; 2 3 import me.gacl.service.UserServiceI; 4 5 import org.apache.struts2.convention.annotation.Action; 6 import org.apache.struts2.convention.annotation.Namespace; 7 import org.apache.struts2.convention.annotation.ParentPackage; 8 import org.springframework.beans.factory.annotation.Autowired; 9 10 @ParentPackage(“basePackage”) 11 @Action(value=“strust2Test”)//使用convention-plugin插件提供的@Action注解将一个普通java类标注为一个可以处理用户请求的Action,Action的名字为struts2Test 12 @Namespace("/")//使用convention-plugin插件提供的@Namespace注解为这个Action指定一个命名空间 13 public class TestAction { 14 15 /** 16 * 注入userService 17 / 18 @Autowired 19 private UserServiceI userService; 20 21 /* 22 * http://localhost:8080/SSHE/strust2Test!test.action 23 * MethodName: test 24 * Description: 25 * @author xudp 26 */ 27 public void test(){ 28 System.out.println(“进入TestAction”); 29 userService.test(); 30 } 31 } 复制代码 这里使用@Autowired注解将userService注入到UserAction中。
测试Struts2的开发环境是否搭建成功,先执行【Maven install】操作,然后部署到tomcat服务器,最后启动tomcat服务器运行,
输入访问地址:http://localhost:8080/SSHE/strust2Test!test.action,访问结果如下:
测试通过,Struts2的开发环境搭建并整合Spring成功!这里提一下遇到的问题,我执行完Maven install命令之后,重新发布到tomcat服务器运行,第一次运行时出现了找不到action的404错误,后来就先执行Maven clean,然后clean一下项目,再执行Maven install命令重新编译项目,然后再发布到tomcat服务器中运行,这次就可以正常访问到action了,使用Maven总是会遇到一些奇怪的问题,好在凭借着一些平时积累的解决问题的经验把问题解决了。
四、搭建Hibernate4开发环境并整合Spring3 4.1、下载Hibernate4需要的jar包 1.hibernate-core
在pom.xml文件中编写Hibernate4所需要的jar包,Maven会自动下载这些包。
1 2 3 org.hibernate 4 hibernate-core 5 4.1.7.Final 6
注意:一定要排除掉Struts2中的javassist,否则就冲突了。
4.2、添加数据库驱动jar包 我们知道,Hibernate是用于和数据库交互的,应用系统所有的CRUD操作都要通过Hibernate来完成。既然要连接数据库,那么就要使用到相关的数据库驱动,所以需要加入数据库驱动的jar包,根据自身项目使用的数据库在pom.xml文件中编写相应的数据库驱动jar:
MySQL数据库驱动jar:
1 2 3 mysql 4 mysql-connector-java 5 5.1.34 6 SQLServer数据库驱动jar:
1 2 3 net.sourceforge.jtds 4 jtds 5 1.3.1 6 这里要说一下使用Maven管理Oracle JDBC驱动的问题了,正常情况下,Maven在下载 oracle数据库驱动时会出错,如下图所示:
这是由于Oracle授权问题,Maven3不提供Oracle JDBC driver,为了在Maven项目中应用Oracle JDBC driver,必须手动添加到本地仓库。
解决办法:先从网上下载Oracle的驱动包,然后通过Maven命令放到本地库中去:
安装命令:
mvn install:install-file -Dfile={Path/to/your/ojdbc.jar} -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.1.0 -Dpackaging=jar 例如把位于F:\oracle驱动\ojdbc6.jar添加到本地仓库中
执行命令:
mvn install:install-file -Dfile=F:/oracle驱动/ojdbc6.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.1.0 -Dpackaging=jar 如下图所示:
然后在pom.xml文件中编写ojdbc6.jar包的信息,如下所示:
1 2 3 com.oracle 4 ojdbc6 5 11.2.0.1.0 6 由于我们已经将ojdbc6.jar包加入到本地仓库中了,因此这次可以正常使用针对Oracle数据库的驱动包了。如下图所示:
4.3、添加数据库连接池jar包 在平时开发中,我们一般都会使用数据库连接池,应用系统初始化时,由数据库连接池向数据库申请一定数量的数据库连接,然后放到一个连接池中,当需要操作数据库时,就从数据库连接池中取出一个数据库连接,通过从连接池中获取到的数据库连接对象连接上数据库,然后进行CRUD操作,关于数据库连接池的选择,常用的有DBCP,C3P0和Druid,这里我们使用Druid作为我们的数据库连接池。这三种连接池各自有各自的特点,自己熟悉哪个就用哪个,萝卜白菜,各有所爱。
在pom.xml文件中编写Druid的jar包,Maven会自动下载,如下:
1 2 3 com.alibaba 4 druid 5 1.0.12 6 4.4、添加aspectjweaver包 使用Spring的aop时需要使用到aspectjweaver包,所以需要添加aspectjweaver包,在pom.xml文件中添加aspectjweaver的jar包,Maven会自动下载,如下:
1 2 3 org.aspectj 4 aspectjweaver 5 1.8.5 6 4.5、编写连接数据库的配置信息 之前我们在src/main/resources目录下创建了一个config.properties文件,里面的内容是空的,现在我们就在这个config.properties文件中编写连接数据库需要使用到的相关信息,如下所示:
复制代码 1 #hibernate.dialect=org.hibernate.dialect.OracleDialect 2 #driverClassName=oracle.jdbc.driver.OracleDriver 3 #validationQuery=SELECT 1 FROM DUAL 4 #jdbc_url=jdbc:oracle:thin:@127.0.0.1:1521:orcl 5 #jdbc_username=gacl 6 #jdbc_password=xdp 7 8 hibernate.dialect=org.hibernate.dialect.MySQLDialect 9 driverClassName=com.mysql.jdbc.Driver 10 validationQuery=SELECT 1 11 jdbc_url=jdbc:mysql://localhost:3306/sshe?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull 12 jdbc_username=root 13 jdbc_password=XDP 14 15 #hibernate.dialect=org.hibernate.dialect.SQLServerDialect 16 #driverClassName=net.sourceforge.jtds.jdbc.Driver 17 #validationQuery=SELECT 1 18 #jdbc_url=jdbc:jtds:sqlserver://127.0.0.1:1433/sshe 19 #jdbc_username=sa 20 #jdbc_password=123456 21 22 #jndiName=java:comp/env/dataSourceName 23 24 hibernate.hbm2ddl.auto=update 25 hibernate.show_sql=true 26 hibernate.format_sql=true 复制代码 4.6、编写Hibernate与Spring整合的配置文件 在src/main/resources目录下新建一个spring-hibernate.xml文件,如下图所示:
spring-hibernate.xml文件的内容如下:
复制代码 1 <?xml version="1.0" encoding="UTF-8"?> 2 10 11 12 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 h i b e r n a t e . h b m 2 d d l . a u t o < / p r o p > 66 < ! − − 系 统 使 用 的 数 据 库 方 言 , 也 就 是 使 用 的 数 据 库 类 型 − − > 67 < p r o p k e y = " h i b e r n a t e . d i a l e c t " > {hibernate.hbm2ddl.auto}</prop> 66 <!-- 系统使用的数据库方言,也就是使用的数据库类型 --> 67 <prop key="hibernate.dialect"> hibernate.hbm2ddl.auto</prop>66<!−−系统使用的数据库方言,也就是使用的数据库类型−−>67<propkey="hibernate.dialect">{hibernate.dialect} 68 69 h i b e r n a t e . s h o w s q l < / p r o p > 70 < ! − − 是 否 格 式 化 打 印 出 来 的 S Q L − − > 71 < p r o p k e y = " h i b e r n a t e . f o r m a t s q l " > {hibernate.show_sql}</prop> 70 <!-- 是否格式化打印出来的SQL --> 71 <prop key="hibernate.format_sql"> hibernate.showsql</prop>70<!−−是否格式化打印出来的SQL−−>71<propkey="hibernate.formatsql">{hibernate.format_sql} 72 73 74 75 76 77 78 me.gacl.model 79 80 81 82 83 90 91 92 93 94 95 96 97 98 99 100 101 <tx:advice id=“transactionAdvice” transaction-manager=“transactionManager”> 102 tx:attributes 103 104 <tx:method name=“add*” /> 105 <tx:method name=“save*” /> 106 <tx:method name=“update*” /> 107 <tx:method name=“modify*” /> 108 <tx:method name=“edit*” /> 109 <tx:method name=“delete*” /> 110 <tx:method name=“remove*” /> 111 <tx:method name=“repair” /> 112 <tx:method name=“deleteAndRepair” /> 113 114 <tx:method name=“get*” propagation=“SUPPORTS” /> 115 <tx:method name=“find*” propagation=“SUPPORTS” /> 116 <tx:method name=“load*” propagation=“SUPPORTS” /> 117 <tx:method name=“search*” propagation=“SUPPORTS” /> 118 <tx:method name=“datagrid*” propagation=“SUPPORTS” /> 119 120 <tx:method name="" propagation=“SUPPORTS” /> 121 </tx:attributes> 122 </tx:advice> 123 124 aop:config 125 <aop:pointcut id=“transactionPointcut” expression="execution( me.gacl.service…Impl.(…))" /> 126 <aop:advisor pointcut-ref=“transactionPointcut” advice-ref=“transactionAdvice” /> 127 </aop:config> 128 129 复制代码 4.7、编写单元测试代码 1、在MySQL中创建sshe数据库
SQL脚本:
CREATE DATABASE SSHE; 2、在src/main/java中创建me.gac.model包,在包中编写一个 User类,如下图所示:
代码如下:
复制代码 1 package me.gacl.model; 2 3 import java.util.Date; 4 5 import javax.persistence.Column; 6 import javax.persistence.Entity; 7 import javax.persistence.Id; 8 import javax.persistence.Table; 9 import javax.persistence.Temporal; 10 import javax.persistence.TemporalType; 11 12 @Entity 13 @Table(name = “T_USER”, schema = “SSHE”) 14 public class User implements java.io.Serializable { 15 16 // Fields 17 private String id; 18 private String name; 19 private String pwd; 20 private Date createdatetime; 21 private Date modifydatetime; 22 23 // Constructors 24 25 /** default constructor / 26 public User() { 27 } 28 29 /* minimal constructor / 30 public User(String id, String name, String pwd) { 31 this.id = id; 32 this.name = name; 33 this.pwd = pwd; 34 } 35 36 /* full constructor */ 37 public User(String id, String name, String pwd, Date createdatetime, Date modifydatetime) { 38 this.id = id; 39 this.name = name; 40 this.pwd = pwd; 41 this.createdatetime = createdatetime; 42 this.modifydatetime = modifydatetime; 43 } 44 45 // Property accessors 46 @Id 47 @Column(name = “ID”, unique = true, nullable = false, length = 36) 48 public String getId() { 49 return this.id; 50 } 51 52 public void setId(String id) { 53 this.id = id; 54 } 55 56 @Column(name = “NAME”,nullable = false, length = 100) 57 public String getName() { 58 return this.name; 59 } 60 61 public void setName(String name) { 62 this.name = name; 63 } 64 65 @Column(name = “PWD”, nullable = false, length = 32) 66 public String getPwd() { 67 return this.pwd; 68 } 69 70 public void setPwd(String pwd) { 71 this.pwd = pwd; 72 } 73 74 @Temporal(TemporalType.TIMESTAMP) 75 @Column(name = “CREATEDATETIME”, length = 7) 76 public Date getCreatedatetime() { 77 return this.createdatetime; 78 } 79 80 public void setCreatedatetime(Date createdatetime) { 81 this.createdatetime = createdatetime; 82 } 83 84 @Temporal(TemporalType.TIMESTAMP) 85 @Column(name = “MODIFYDATETIME”, length = 7) 86 public Date getModifydatetime() { 87 return this.modifydatetime; 88 } 89 90 public void setModifydatetime(Date modifydatetime) { 91 this.modifydatetime = modifydatetime; 92 } 93 } 复制代码 3、在src/main/java中创建me.gacl.dao包,在包中编写一个 UserDaoI接口,如下图所示:
代码如下:
复制代码 1 package me.gacl.dao; 2 3 import java.io.Serializable; 4 5 import me.gacl.model.User; 6 7 public interface UserDaoI { 8 9 /** 10 * 保存用户 11 * @param user 12 * @return 13 */ 14 Serializable save(User user); 15 } 复制代码 在src/main/java中创建me.gacl.dao.impl包,在包中编写 UserDaoImpl实现类,如下图所示:
代码如下:
复制代码 1 package me.gacl.dao.impl; 2 3 import java.io.Serializable; 4 5 import org.hibernate.SessionFactory; 6 import org.springframework.beans.factory.annotation.Autowired; 7 import org.springframework.stereotype.Repository; 8 9 import me.gacl.dao.UserDaoI; 10 import me.gacl.model.User; 11 12 @Repository(“userDao”) 13 public class UserDaoImpl implements UserDaoI { 14 15 /** 16 * 使用@Autowired注解将sessionFactory注入到UserDaoImpl中 17 */ 18 @Autowired 19 private SessionFactory sessionFactory; 20 21 @Override 22 public Serializable save(User user) { 23 return sessionFactory.getCurrentSession().save(user); 24 } 25 } 复制代码 这里使用@Repository(“userDao”)注解完成dao注入, 使用@Autowired注解将sessionFactory注入到UserDaoImpl中。
4、在之前创建好的UserServiceI接口中添加一个save方法的定义,如下:
复制代码 1 package me.gacl.service; 2 3 import java.io.Serializable; 4 import me.gacl.model.User; 5 6 /** 7 * 测试 8 * @author gacl 9 * 10 / 11 public interface UserServiceI { 12 13 /* 14 * 测试方法 15 / 16 void test(); 17 18 /* 19 * 保存用户 20 * @param user 21 * @return 22 */ 23 Serializable save(User user); 24 } 复制代码 5、在UserServiceImpl类中实现save方法,如下:
复制代码 1 package me.gacl.service.impl; 2 3 import java.io.Serializable; 4 5 import org.springframework.beans.factory.annotation.Autowired; 6 import org.springframework.stereotype.Service; 7 8 import me.gacl.dao.UserDaoI; 9 import me.gacl.model.User; 10 import me.gacl.service.UserServiceI; 11 //使用Spring提供的@Service注解将UserServiceImpl标注为一个Service 12 @Service(“userService”) 13 public class UserServiceImpl implements UserServiceI { 14 15 /** 16 * 注入userDao 17 */ 18 @Autowired 19 private UserDaoI userDao; 20 21 @Override 22 public void test() { 23 System.out.println(“Hello World!”); 24 } 25 26 @Override 27 public Serializable save(User user) { 28 return userDao.save(user); 29 } 30 } 复制代码 6、在src/main/test下的me.gacl.test包中编写 TestHibernate类,代码如下:
复制代码 1 package me.gacl.test; 2 3 import java.util.Date; 4 import java.util.UUID; 5 6 import me.gacl.model.User; 7 import me.gacl.service.UserServiceI; 8 9 import org.junit.Before; 10 import org.junit.Test; 11 import org.springframework.context.ApplicationContext; 12 import org.springframework.context.support.ClassPathXmlApplicationContext; 13 14 public class TestHibernate { 15 16 private UserServiceI userService; 17 18 /** 19 * 这个before方法在所有的测试方法之前执行,并且只执行一次 20 * 所有做Junit单元测试时一些初始化工作可以在这个方法里面进行 21 * 比如在before方法里面初始化ApplicationContext和userService 22 */ 23 @Before 24 public void before(){ 25 ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{“spring.xml”,“spring-hibernate.xml”}); 26 userService = (UserServiceI) ac.getBean(“userService”); 27 } 28 29 @Test 30 public void testSaveMethod(){ 31 //ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{“spring.xml”,“spring-hibernate.xml”}); 32 //UserServiceI userService = (UserServiceI) ac.getBean(“userService”); 33 User user = new User(); 34 user.setId(UUID.randomUUID().toString().replaceAll("-", “”)); 35 user.setName(“孤傲苍狼”); 36 user.setPwd(“123”); 37 user.setCreatedatetime(new Date()); 38 userService.save(user); 39 } 40 } 复制代码 执行Junit单元测试,如下所示:
测试通过,再看看sshe数据库,如下图所示:
Hibernate在执行过程中,先帮我们在sshe数据库中创建一张t_user表,t_user的表结构根据User实体类中的属性定义来创建的,然后再将数据插入到t_user表中,如下图所示:
到此,Hibernate4开发环境的搭建并且与Spring整合的工作算是全部完成并且测试通过了。
五、三大框架综合测试 经过前面的四大步骤,我们已经成功地搭建好基于struts2+hibernate4+spring3这三大框架的整合开发环境,下面我们来综合测试一下三大框架配合使用进行开发的效果。
5.1、完善web.xml文件中的配置 复制代码 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version=“3.0” xmlns=“http://java.sun.com/xml/ns/javaee” 3 xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” 4 xsi:schemaLocation=“http://java.sun.com/xml/ns/javaee 5 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd”> 6 7 8 index.jsp 9 10 11 12 13 org.springframework.web.context.ContextLoaderListener 14 15 16 17 contextConfigLocation 18 classpath:spring.xml,classpath:spring-hibernate.xml 19 20 21 22 23 org.springframework.web.util.IntrospectorCleanupListener 24 25 26 27 28 openSessionInViewFilter 29 org.springframework.orm.hibernate4.support.OpenSessionInViewFilter 30 31 singleSession 32 true 33 34 35 36 openSessionInViewFilter 37 .action 38 39 40 41 42 struts2 43 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 44 45 46 47 struts2 48 .action 49 50 51 52 53 druidStatView 54 com.alibaba.druid.support.http.StatViewServlet 55 56 57 druidStatView 58 /druid/* 59 60 复制代码 5.2、编写测试代码 在TestAction类中添加一个saveUser方法,如下:
复制代码 1 package me.gacl.action; 2 3 import java.util.Date; 4 import java.util.UUID; 5 6 import me.gacl.model.User; 7 import me.gacl.service.UserServiceI; 8 9 import org.apache.struts2.convention.annotation.Action; 10 import org.apache.struts2.convention.annotation.Namespace; 11 import org.apache.struts2.convention.annotation.ParentPackage; 12 import org.springframework.beans.factory.annotation.Autowired; 13 14 @ParentPackage(“basePackage”) 15 @Action(value=“strust2Test”)//使用convention-plugin插件提供的@Action注解将一个普通java类标注为一个可以处理用户请求的Action 16 @Namespace("/")//使用convention-plugin插件提供的@Namespace注解为这个Action指定一个命名空间 17 public class TestAction { 18 19 /** 20 * 注入userService 21 / 22 @Autowired 23 private UserServiceI userService; 24 25 /* 26 * http://localhost:8080/SSHE/strust2Test!test.action 27 * MethodName: test 28 * Description: 29 * @author xudp 30 / 31 public void test(){ 32 System.out.println(“进入TestAction”); 33 userService.test(); 34 } 35 36 /* 37 * http://localhost:8080/SSHE/strust2Test!saveUser.action 38 */ 39 public void saveUser(){ 40 User user = new User(); 41 user.setId(UUID.randomUUID().toString().replaceAll("-", “”)); 42 user.setName(“xdp孤傲苍狼”); 43 user.setPwd(“123456”); 44 user.setCreatedatetime(new Date()); 45 userService.save(user); 46 } 47 } 复制代码 执行【Maven install】操作,重新编译和发布项目,在执行【Maven install】操作之前,需要修改TestSpring这个测试类中的test方法的代码,如下:
复制代码 1 package me.gacl.test; 2 3 import me.gacl.service.UserServiceI; 4 5 import org.junit.Test; 6 import org.springframework.context.ApplicationContext; 7 import org.springframework.context.support.ClassPathXmlApplicationContext; 8 9 public class TestSpring { 10 11 @Test 12 public void test(){ 13 //通过spring.xml配置文件创建Spring的应用程序上下文环境 14 //ApplicationContext ac = new ClassPathXmlApplicationContext(“classpath:spring.xml”); 15 /** 16 *因为已经整合了Hibernate,UserServiceImpl类中使用到了userDao, 17 *userDao是由spring创建并且注入给UserServiceImpl类的,而userDao中又使用到了sessionFactory对象 18 *而创建sessionFactory对象时需要使用到spring-hibernate.xml这个配置文件中的配置项信息, 19 *所以创建Spring的应用程序上下文环境时,需要同时使用spring.xml和spring-hibernate.xml这两个配置文件 20 *否则在执行Maven install命令时,因为maven会先执行test方法中的代码,而代码执行到 21 *UserServiceI userService = (UserServiceI) ac.getBean(“userService”); 22 *这一行时就会因为userDao中使用到sessionFactory对象无法正常创建的而出错,这样执行Maven install命令编译项目时就会失败! 23 * 24 */ 25 ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{“spring.xml”,“spring-hibernate.xml”}); 26 //从Spring的IOC容器中获取bean对象 27 UserServiceI userService = (UserServiceI) ac.getBean(“userService”); 28 //执行测试方法 29 userService.test(); 30 } 31 } 复制代码 每次执行【Maven install】命令时都会执行Junit单元测试中的代码有时候感觉挺累赘的,有时候往往就是因为一些单元测试中的代码导致【Maven install】命令编译项目失败!
将编译好的项目部署到tomcat服务器中运行,输入地址:http://localhost:8080/SSHE/strust2Test!saveUser.action进行访问,如下所示:
访问action的过程中没有出现错误,并且后台也没有报错并且打印出了Hibernate执行插入操作时的SQL语句,如下所示:
这说明三大框架整合开发的测试通过了。以上就是使用使用Maven搭建Struts2+Spring3+Hibernate4的整合开发环境的全部内容。
分类: 框架整合 标签: 框架整合 好文要顶 关注我 收藏该文 孤傲苍狼 关注 - 90 粉丝 - 15656 +加关注 37 0 « 上一篇:关于在win8系统下用VMware 9.0装系统导致物理机不断重启的解决办法 » 下一篇:安卓手机刷机常识 posted on 2015-02-28 18:19 孤傲苍狼 阅读(49941) 评论(42) 编辑 收藏
评论 #1楼 2015-02-28 19:01 D瓜哥 推荐LZ玩玩SpringMVC,估计上手后再也不想用Struts2了。呵呵
支持(0)反对(0)
#2楼[楼主] 2015-02-28 19:05 孤傲苍狼 @ D瓜哥 嗯,springmvc是挺好的,后面也会写关于springmvc的东西的,struts2也用了很长时间了,就想好好总结一下!
支持(1)反对(0)
#3楼 2015-02-28 22:18 yonghu86 写得很详细 SpringMVC+Mybatis爽呆了
支持(1)反对(0)
#4楼 2015-02-28 22:57 爱上问题少宇 怎么跟孙宇的easyui+struts2+spring3+hibernate4的整合如此的相似
支持(0)反对(0)
#5楼 2015-03-01 01:18 雪夜 SpringMVC+Spring+Hibernate 来个这个吧。。~
支持(0)反对(0)
#6楼 2015-03-01 01:19 雪夜 @ C#快速开发框架
引用 写得很详细SpringMVC+Mybatis爽呆了
怎么个爽。。~ 支持(0)反对(0)
#7楼 2015-03-01 15:43 HelpForPersonal 给个源码地址就更好啦
支持(2)反对(0)
#8楼 2015-03-03 10:53 亦步亦趋 学习!
支持(0)反对(0)
#9楼 2015-03-10 12:18 pandalia 非常好 不过一般不用strust
支持(0)反对(0)
#10楼 2015-04-07 23:10 feiyulunbi 你好 我在测试Hibernate时出现以下错误 希望能帮帮我 我是java新手org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘userDao’: Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.hibernate.SessionFactory me.gacl.dao.impl.UserDaoImpl.sessionFactory; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘sessionFactory’ defined in class path resource [spring-hibernate.xml]: Cannot resolve reference to bean ‘dataSource’ while setting bean property ‘dataSource’; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘dataSource’ defined in class path resource [spring-hibernate.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are: PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property ‘maxIdle’ threw exception; nested exception is java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1202) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:762) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480) at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:139) at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:93) at me.gacl.test.TestHibernate.before(TestHibernate.java:25) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606)
支持(6)反对(0)
#11楼 2015-04-28 17:32 bennett_lan 博客写得很赞!做到4.7、编写单元测试代码这一步时候报出以下错误: Loading properties file from class path resource [config.properties] org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named ‘userService’ is defined at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:687) at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1168) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:281) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:956) at com.hellossh.test.TestSpring.test(TestSpring.java:16) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) at org.junit.runners.ParentRunner.run(ParentRunner.java:300) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
检查过spring.xml发现自动扫描的两个包确实没有userService,
<context:component-scan base-package=“com.hellossh.dao,com.hellossh.service” /> 苦思冥想几天也得不到解决,所以请求楼主帮帮忙,也顺便完善一下您的博客。谢谢!
盼复。
支持(0)反对(0)
#12楼 2015-06-01 16:58 skyishero 楼主 struts2-convention-plugin 2.3.20这个jar包能发给我吗?492112413@qq.com
支持(0)反对(0)
#13楼 2015-06-04 13:32 蜗牛小姐 很赞!
支持(0)反对(0)
#14楼 2015-06-10 15:40 陈树义 想问一下,在“第六步: 发布项目:Maven install”。
这里为什么需要把项目install到本地库呢? 是基于什么样的考虑?
支持(0)反对(0)
#15楼 2015-06-30 22:25 夼趸蒋 好文啊,能给源码么?170819739@qq.com。好文。。
支持(0)反对(0)
#16楼 2015-07-26 18:06 Go·Ku 你好,我想请教你一下。 我最近用eclipse(mars)建了一个maven管理的SpringMVC项目,Spring的配置文件放在src/main/resources下,启动项目时提示找不到Spring的配置文件。还有一点疑问是maven编译之后target夹下没有classes文件夹,但是本次磁盘中是有的,eclipse中刷新target文件夹不出来classes文件夹。 能否告知其中原由么?非常感谢。
支持(0)反对(0)
#17楼 2015-08-24 14:31 brucegan 太好了,赞一个。
支持(0)反对(0)
#18楼 2015-09-16 19:43 穿梭无极限 @ bennett_lan 我也遇到了这个问题,后来把MySQL驱动包的版本改小一点就好了,比如版本是5.1.36,可以改为5.1.24
支持(0)反对(0)
#19楼 2015-10-10 09:53 Mingo321 @ feiyulunbi 我也遇到这个错,一直无法解决,估计是log4j包冲突导致
支持(0)反对(0)
#20楼 2015-10-22 17:20 锦风很常见 配置struts的时候会出现action not map(对于低版本的) 解决方法:总之把asm相关的jar 都导进来试试。加了三个JAR asm-tree-3.3.jar asm-3.3.jar asm-commons-3.3.jar
支持(0)反对(1)
#21楼 2015-10-25 22:50 mike_2001 挺详细的,但唯一不足就是不知道怎么样在页面端进行展示.
支持(0)反对(0)
#22楼 2015-10-29 09:17 那只是一股逆流 好详细,赞~
支持(0)反对(1)
#23楼 2015-11-12 10:45 颖辉
2.3的单元测试报错。前面一步一步来完全一样的,请问怎么回事啊
支持(1)反对(0)
#24楼 2015-11-23 23:05 凫.鸳 内容太丰富了,得好好看看了
支持(0)反对(0)
#25楼 2015-11-27 13:48 北原之风 遇到 与 10楼一样的问题 不知道楼主 能说下是为什么??
支持(0)反对(0)
#26楼 2015-12-09 11:10 寶爺早 我是一個開放Java幾年的了,最近學習maven。樓主這篇文章實在是寫得太好了,非常詳細與貼心。作用很大,非常感謝!!(特地申請了一個賬號過來評論的)
支持(0)反对(0)
#27楼 2015-12-11 15:34 shl1988012 @ 颖辉 我也是这样 ,用了比较笨的方法,把test里面的类给删了 然后就可以install了
支持(0)反对(0)
#28楼 2015-12-11 19:05 shl1988012 后面一堆jar包冲突问题,解决了半天还是不行。群主源码有吗? 。严重: Servlet.service() for servlet jsp threw exception java.lang.NullPointerException at org.apache.jsp.index_jsp._jspInit(index_jsp.java:23) at org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:52) at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:164) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:340) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) at javax.servlet.http.HttpServlet.service(HttpServlet.java:723) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:879) at org.apache.coyote.http11.Http11AprProtocol H t t p 11 C o n n e c t i o n H a n d l e r . p r o c e s s ( H t t p 11 A p r P r o t o c o l . j a v a : 617 ) a t o r g . a p a c h e . t o m c a t . u t i l . n e t . A p r E n d p o i n t Http11ConnectionHandler.process(Http11AprProtocol.java:617) at org.apache.tomcat.util.net.AprEndpoint Http11ConnectionHandler.process(Http11AprProtocol.java:617)atorg.apache.tomcat.util.net.AprEndpointWorker.run(AprEndpoint.java:1778) at java.lang.Thread.run(Thread.java:745)
支持(0)反对(0)
#29楼 2015-12-17 12:34 迷你小蜜蜂 UserServiceImpl包中的 @Override为什么提示要删除啊,,,
支持(0)反对(0)
#30楼 2016-01-09 21:12 飒行 楼主能给份源码吗? 我的错和10楼的一样。。
错误开始部分: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘userDao’: Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.hibernate.SessionFactory org.lh.dao.impl.UserDaoImpl.sessionFactory; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘sessionFactory’ defined in class path resource [spring-hibernate.xml]: Cannot resolve reference to bean ‘dataSource’ while setting bean property ‘dataSource’; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘dataSource’ defined in class path resource [spring-hibernate.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are: PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property ‘maxIdle’ threw exception; nested exception is java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:287) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:609) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:469) at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:139) at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:93) at org.lh.test.TestHibernate.before(TestHibernate.java:21)
支持(0)反对(0)
#31楼 2016-01-11 16:30 黯然销魂掌 @ 飒行 我出现同样错误,原因是在UserServiceImpl里面sessionFactory前面忘记加@Autowired注解,不知道你是不是。
支持(0)反对(0)
#32楼 2016-01-11 22:21 CoderDream https://github.com/CoderDream/sshe
用eclipse Java EE 4.4.x版,导入Maven项目即可。
这里打了4个tag,对应四个版本。
暂时没有遇到错误。
支持(1)反对(0)
#33楼 2016-02-20 21:22 wjw48818 @ feiyulunbi getBean(“userServiceImpl”);
支持(1)反对(0)
#34楼 2016-03-29 17:05 成长的码农 搭建Struts2开发环境并整合Spring3 这里整合完之后 运行链接 报错 严重: Could not find action or result /SSHE/strust2Test!test.action There is no Action mapped for namespace [/] and action name [strust2Test] associated with context path [/SSHE]. - [unknown location] at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185) at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63) at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:37) at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58) at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:552) at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) at org.apache.coyote.http11.Http11Protocol H t t p 11 C o n n e c t i o n H a n d l e r . p r o c e s s ( H t t p 11 P r o t o c o l . j a v a : 583 ) a t o r g . a p a c h e . t o m c a t . u t i l . n e t . J I o E n d p o i n t Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint Http11ConnectionHandler.process(Http11Protocol.java:583)atorg.apache.tomcat.util.net.JIoEndpointWorker.run(JIoEndpoint.java:454) at java.lang.Thread.run(Unknown Source) 楼主知道什么原因吗??为了回复你 特意注册的博客园 真心求教
支持(2)反对(0)
#35楼 2016-06-21 00:37 冰清555 关于10楼的问题,调了很长时间,发现是slf4j版本问题,pom.xml加入以下,可解决。
org.slf4j slf4j-log4j12 1.7.7支持(2)反对(0)
#36楼 2016-06-30 15:04 bigd 博主你好!我发现两个问题
1.tomcat进入项目 一直报404问题 clean 再 install 都是这样
2.sessionfactory 不能注入 导致10楼等几个同学都产生userDao不能创建的报错
您能否把已经创建好的源码公开 大家学习一下
支持(0)反对(0)
#37楼 2016-08-19 13:43 hhjuliet @ bigd sessionfactory不能注入有如下几个原因: 1.没写@Repository(“userDao”) 2. contextConfigLocation classpath:spring.xml,classpath:spring-hibernate.xml 少了classpath:spring-hibernate.xml 3.仔细检查
支持(1)反对(1)
#38楼 2016-11-17 17:23 南小鸟 @ 成长的码农 这个问题最后有没有解决?现在我也遇到这个问题了,百度一天了,都解决不了,新手求解答。
支持(0)反对(0)
#39楼 2017-01-09 14:13 紫雨之中再无一人 提醒一下maven install没问题但tomcat运行找不到spring配置文件的人,注意tomcat,jdk和eclipse是32位还是64位,哎呀妈呀,坑哭我了
支持(0)反对(0)
#40楼 2017-02-20 15:21 致良知的萌新 @ 紫雨之中再无一人 用IDEA 就好了,是不分32位还是64位的
支持(0)反对(0)
#41楼 2017-11-09 17:28 鹿亡玫瑰海丶 对我帮助很大 感谢!
支持(0)反对(0)
#42楼 2018-03-23 14:26 桑榆非晚! 狼哥牛逼,我就把TestHibernate中读取xml文件时,加了classpath就能正常的运行。 ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{“classpath:spring.xml”,“classpath:spring-hibernate.xml”});
