使用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加入以下,可解决。
支持(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”});