- 浏览: 157833 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (130)
- Database (5)
- JavaSE (23)
- JavaScript (11)
- Struts2 (15)
- Hibernate (11)
- Spring (16)
- Linux (4)
- Jquery (3)
- Tools (12)
- Jsp (7)
- 杂谈 (9)
- WEB Project (10)
- WebService (16)
- maven (2)
- android (1)
- memcache (2)
- 网络通信 (4)
- solr (1)
- cxf (7)
- powerdesigner (1)
- jxls (1)
- springmvc (1)
- nosql (1)
- node.js (0)
- thrift (0)
- REST (1)
- tag (1)
最新评论
最近在学习Struts2,进行测试驱动开发,对于struts2与Spring集成的测试,Struts2给出了一个插件struts2-junit-plugin-2.1.8.1.jar,这个插件需要spring-test.jar包的支持,所有需要测试的Action类都继承StrutsSpringTestCase。这个测试要求只能用个application.xml文件,而且必须放到类路径根目录下面。在我们开发中往往编写许多以application开头的部署文件,一般也不在类路径下面存放,例如我一般习惯在WEB-INF目录下建立一个config文件夹,将spring的部署文件都放到config文件夹下面。但是用StrutsSpringTestCase类不能解决改问题,我查看了一下StrutsSpringTestCase的原代码,代码如下:
Java代码
public abstract class StrutsSpringTestCase extends StrutsTestCase {
private static final String DEFAULT_CONTEXT_LOCATION = "classpath*:applicationContext.xml";
protected static ApplicationContext applicationContext;
protected void setupBeforeInitDispatcher() throws Exception {
//init context
GenericXmlContextLoader xmlContextLoader = new GenericXmlContextLoader();
applicationContext = xmlContextLoader.loadContext(getContextLocations());
servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, applicationContext);
}
protected String getContextLocations() {
return DEFAULT_CONTEXT_LOCATION;
}
}
public abstract class StrutsSpringTestCase extends StrutsTestCase {
private static final String DEFAULT_CONTEXT_LOCATION = "classpath*:applicationContext.xml";
protected static ApplicationContext applicationContext;
protected void setupBeforeInitDispatcher() throws Exception {
//init context
GenericXmlContextLoader xmlContextLoader = new GenericXmlContextLoader();
applicationContext = xmlContextLoader.loadContext(getContextLocations());
servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, applicationContext);
}
protected String getContextLocations() {
return DEFAULT_CONTEXT_LOCATION;
}
} 我们只要写一个继承类,重载setupBeforeInitDispatcher()方法就可以解决改问题了,如果我们有两个配置文件applicationContext.xml、applicationContext-other.xml,我们就可以这样写:
Java代码
@Override
protected void setupBeforeInitDispatcher() throws Exception {
GenericXmlContextLoader xmlContextLoader = new GenericXmlContextLoader();
applicationContext = xmlContextLoader.loadContext(new String[]{"applicationContext.xml,","applicationContext-other.xml,"});
servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, applicationContext);
}
@Override
protected void setupBeforeInitDispatcher() throws Exception {
GenericXmlContextLoader xmlContextLoader = new GenericXmlContextLoader();
applicationContext = xmlContextLoader.loadContext(new String[]{"applicationContext.xml,","applicationContext-other.xml,"});
servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, applicationContext);
} 这样我们就解决了多个配置文件的问题,但是还有一个,我们一开始也不能确定有几个配置文件,这个方法还是不通用,需要再次重构,这样,我决定写一个方法,从config文件下读取文件,所有以application开通的文件组成一个字符串数组,这样就不需要修改改类了。代码如下:
Java代码
public class SpringBeanFactoryMock extends StrutsSpringTestCase {
@Override
public void setUp() throws Exception {
super.setUp();
}
@Override
protected void setupBeforeInitDispatcher() throws Exception {
GenericXmlContextLoader xmlContextLoader = new GenericXmlContextLoader();
applicationContext = xmlContextLoader.loadContext(getContextLocation());
servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, applicationContext);
}
public String[] getContextLocation(){
URL classUrl = SpringBeanFactoryMock.class.getResource("");
String path = classUrl.getPath();
try {
path = URLDecoder.decode(path, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
path = path.substring(1 , path.indexOf("WEB-INF"))+ "WEB-INF/";
File configPath = new File(path);
String[] applicationContexts = configPath.list(new FilenameFilter(){
public boolean accept(File dir, String name){
if(name.toLowerCase().startsWith("applicationcontext")){
return true;
}
return false;
}
});
for(int i=0;i<applicationContexts.length;i++){
applicationContexts[i] = "file:"+path + applicationContexts[i];
}
return applicationContexts;
}
}
public class SpringBeanFactoryMock extends StrutsSpringTestCase {
@Override
public void setUp() throws Exception {
super.setUp();
}
@Override
protected void setupBeforeInitDispatcher() throws Exception {
GenericXmlContextLoader xmlContextLoader = new GenericXmlContextLoader();
applicationContext = xmlContextLoader.loadContext(getContextLocation());
servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, applicationContext);
}
public String[] getContextLocation(){
URL classUrl = SpringBeanFactoryMock.class.getResource("");
String path = classUrl.getPath();
try {
path = URLDecoder.decode(path, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
path = path.substring(1 , path.indexOf("WEB-INF"))+ "WEB-INF/";
File configPath = new File(path);
String[] applicationContexts = configPath.list(new FilenameFilter(){
public boolean accept(File dir, String name){
if(name.toLowerCase().startsWith("applicationcontext")){
return true;
}
return false;
}
});
for(int i=0;i<applicationContexts.length;i++){
applicationContexts[i] = "file:"+path + applicationContexts[i];
}
return applicationContexts;
}
}
以后我们测试Struts2的Action类时候,只要继承SpringBeanFactoryMock类就可以了。
Java代码
public abstract class StrutsSpringTestCase extends StrutsTestCase {
private static final String DEFAULT_CONTEXT_LOCATION = "classpath*:applicationContext.xml";
protected static ApplicationContext applicationContext;
protected void setupBeforeInitDispatcher() throws Exception {
//init context
GenericXmlContextLoader xmlContextLoader = new GenericXmlContextLoader();
applicationContext = xmlContextLoader.loadContext(getContextLocations());
servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, applicationContext);
}
protected String getContextLocations() {
return DEFAULT_CONTEXT_LOCATION;
}
}
public abstract class StrutsSpringTestCase extends StrutsTestCase {
private static final String DEFAULT_CONTEXT_LOCATION = "classpath*:applicationContext.xml";
protected static ApplicationContext applicationContext;
protected void setupBeforeInitDispatcher() throws Exception {
//init context
GenericXmlContextLoader xmlContextLoader = new GenericXmlContextLoader();
applicationContext = xmlContextLoader.loadContext(getContextLocations());
servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, applicationContext);
}
protected String getContextLocations() {
return DEFAULT_CONTEXT_LOCATION;
}
} 我们只要写一个继承类,重载setupBeforeInitDispatcher()方法就可以解决改问题了,如果我们有两个配置文件applicationContext.xml、applicationContext-other.xml,我们就可以这样写:
Java代码
@Override
protected void setupBeforeInitDispatcher() throws Exception {
GenericXmlContextLoader xmlContextLoader = new GenericXmlContextLoader();
applicationContext = xmlContextLoader.loadContext(new String[]{"applicationContext.xml,","applicationContext-other.xml,"});
servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, applicationContext);
}
@Override
protected void setupBeforeInitDispatcher() throws Exception {
GenericXmlContextLoader xmlContextLoader = new GenericXmlContextLoader();
applicationContext = xmlContextLoader.loadContext(new String[]{"applicationContext.xml,","applicationContext-other.xml,"});
servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, applicationContext);
} 这样我们就解决了多个配置文件的问题,但是还有一个,我们一开始也不能确定有几个配置文件,这个方法还是不通用,需要再次重构,这样,我决定写一个方法,从config文件下读取文件,所有以application开通的文件组成一个字符串数组,这样就不需要修改改类了。代码如下:
Java代码
public class SpringBeanFactoryMock extends StrutsSpringTestCase {
@Override
public void setUp() throws Exception {
super.setUp();
}
@Override
protected void setupBeforeInitDispatcher() throws Exception {
GenericXmlContextLoader xmlContextLoader = new GenericXmlContextLoader();
applicationContext = xmlContextLoader.loadContext(getContextLocation());
servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, applicationContext);
}
public String[] getContextLocation(){
URL classUrl = SpringBeanFactoryMock.class.getResource("");
String path = classUrl.getPath();
try {
path = URLDecoder.decode(path, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
path = path.substring(1 , path.indexOf("WEB-INF"))+ "WEB-INF/";
File configPath = new File(path);
String[] applicationContexts = configPath.list(new FilenameFilter(){
public boolean accept(File dir, String name){
if(name.toLowerCase().startsWith("applicationcontext")){
return true;
}
return false;
}
});
for(int i=0;i<applicationContexts.length;i++){
applicationContexts[i] = "file:"+path + applicationContexts[i];
}
return applicationContexts;
}
}
public class SpringBeanFactoryMock extends StrutsSpringTestCase {
@Override
public void setUp() throws Exception {
super.setUp();
}
@Override
protected void setupBeforeInitDispatcher() throws Exception {
GenericXmlContextLoader xmlContextLoader = new GenericXmlContextLoader();
applicationContext = xmlContextLoader.loadContext(getContextLocation());
servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, applicationContext);
}
public String[] getContextLocation(){
URL classUrl = SpringBeanFactoryMock.class.getResource("");
String path = classUrl.getPath();
try {
path = URLDecoder.decode(path, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
path = path.substring(1 , path.indexOf("WEB-INF"))+ "WEB-INF/";
File configPath = new File(path);
String[] applicationContexts = configPath.list(new FilenameFilter(){
public boolean accept(File dir, String name){
if(name.toLowerCase().startsWith("applicationcontext")){
return true;
}
return false;
}
});
for(int i=0;i<applicationContexts.length;i++){
applicationContexts[i] = "file:"+path + applicationContexts[i];
}
return applicationContexts;
}
}
以后我们测试Struts2的Action类时候,只要继承SpringBeanFactoryMock类就可以了。
发表评论
-
spring之BeanFactoryAware接口
2014-01-16 10:47 632要直接在自己的代码中读取spring的bean,我们除了根据常 ... -
classpath:xxx.xml 与 classpath*:xxx.xml的区别
2012-12-14 14:45 773在使用开源框架如spring、struts2等经常需要配 ... -
最新SpringMVC + spring3.1.1 + hibernate4.1.0 集成及常见问题总结
2012-12-14 14:19 692一 开发环境 1、动态web工程 2、部分依赖 ... -
HTTP Keep-Alive详解
2012-12-07 10:15 827HTTP Keep Alive HTTP Keep-Alive ... -
关于“无状态的HTTP连接提供有状态的连接"
2012-12-07 09:58 1257HTTP是无状态链接,请求 ... -
spring AOP 教程
2012-03-26 11:35 727URL http://wenku.baidu.com/vi ... -
利用Session防止表单重复提交
2011-12-13 18:36 11751 由于服务器缓慢或者 ... -
servlet 中获得spring Bean 的方法
2011-12-01 10:58 1114只需要servlet 中的servletCo ... -
传智播客——Struts2转发类型 【转】
2011-07-26 12:24 894原文转自:http://bl ... -
spring 3 中使用注解的方式来进行任务调度。
2011-07-13 12:14 1111以上内容基于Spring 3.0.5 ... -
Struts2+spring注解配置简介
2011-07-13 10:08 908如题。。。。 -
spring mail 实例
2010-12-06 11:35 1133啥也不说了,见附件: 发送ftl模板实例: pr ... -
spring中autowire的用法
2010-12-06 10:37 1546原文链接:http://blog.sina.com.cn/s/ ... -
StrutsPrepareAndExecuteFilter 与 FilterDispatcher的区别
2010-09-27 17:35 3590FilterDispatcher是早期struts2的过滤器 ... -
一个超好的struts2的学习笔记
2010-07-20 11:13 654偶然在网上遇见的,就上传来学习下。感觉还不错。。。。。。 -
strtus2 编码问题 (js提交中文参数的编码解码问题)
2010-06-28 11:16 1530描述:本人在做项目中遇到这样的问题:struts2 用java ... -
Flush() Spring/Hibernate
2010-05-20 11:00 936当service更新修改数据,执行flush() ... -
关于spring+hibernate的FlushMode的记录
2010-05-15 17:12 1217NEVEL 已经废弃了,被MANUAL取代了 2 MAN ... -
ognl vs jstl
2010-03-16 09:18 12151. 表格页面迭代中用Struts2的iterator和pr ... -
spring 5中事务配置方法<链接>
2010-03-16 09:13 867http://www.iteye.com/topic/6154 ...
相关推荐
struts-spring-other-lib 等jar包struts-spring-other-lib 等jar包struts-spring-other-lib 等jar包struts-spring-other-lib 等jar包struts-spring-other-lib 等jar包struts-spring-other-lib 等jar包struts-spring-...
Struts2-Spring-Plugin-2.2.1.jar 是一个专门为 Struts2 框架与 Spring 框架集成而设计的插件。这个插件的主要目的是简化在基于Struts2的应用程序中整合Spring的功能,如依赖注入(DI)、AOP(面向切面编程)以及...
JavaEE源代码 struts2-spring-plugin-2.0.11JavaEE源代码 struts2-spring-plugin-2.0.11JavaEE源代码 struts2-spring-plugin-2.0.11JavaEE源代码 struts2-spring-plugin-2.0.11JavaEE源代码 struts2-spring-plugin-...
struts2-spring-plugin-2.3.15.2.jar ; struts2-json-plugin-2.3.16.3.jarstruts2-spring-plugin-2.3.15.2.jar ; struts2-json-plugin-2.3.16.3.jar
Struts2-Spring-Plugin-2.3.4.jar 是一个专门为 Struts 2 框架和 Spring 框架整合而设计的插件,主要用于处理 Struts 2 和 Spring 之间的集成问题。在Java Web开发中,这两个框架经常一起使用,Spring 提供了依赖...
struts2-spring-plugin-2.3.31.jar
最新struts2-spring-plugin-2.3.24.1.jar
在给定的压缩包文件中,我们关注的是"struts2-spring-plugin-2.2.1.jar",这是一个插件,它将Struts2框架与Spring框架集成。 Struts2 Spring Plugin是Struts2框架的一个重要组成部分,它的主要作用是允许开发者在...
struts2-spring-plugin-2.3.15.3.jar struts整合Spring的插件Jar包。
搭建struts2 + spring框架时需要使用的关联jar struts.xml中action的属性class引用applicationContext中bean的属性id指向的值
struts2-spring-plugin-2.0.6.jar
struts-spring-hibernate-_-integration-2.zip
java jar包,亲测试可用 安全,可以对其进行数字签名,只让能够识别数字签名的用户使用里面的东西。 加快下载速度; 压缩,使文件变小,与ZIP压缩机制完全相同。 包封装。能够让JAR包里面的文件依赖于统一版本的...
Struts2-Spring-Plugin-2.2.3.1.jar是Apache Struts框架与Spring框架集成的一个插件,主要用于帮助开发者在基于Struts2的应用程序中无缝地使用Spring进行依赖注入(Dependency Injection,DI)和控制反转(Inversion...
struts2+spring整合插件 struts2-spring-plugin-2.0.12.jar
struts2-spring-plugin-2.3.4.1.jar,放在eclipse里直接导入使用即可
struts2-spring-plugin-2.1.8.1.jar
struts2-spring-plugin-2.5.10.1.jar ---官方最新版本
这个插件是在strtus2和spring集成必备的一个插件