2013-04-10 165 views
4

由于某种原因(一个shiro过滤器)我将我的应用程序上下文文件保存在WEB-INF文件夹中。当我运行Tomcat一切正常,但是,当我尝试使用,以获得从控制器的应用程序上下文:applicationContext类路径找不到

context = new ClassPathXmlApplicationContext(fileContext); 

我总是收到此异常:

IOException parsing XML document from class path resource [applicationContext.xml]; nested exception is java.io.FileNotFoundException: class path resource [applicationContext.xml] cannot be opened because it does not exist 

看来,下ecplise我不能够在类路径下包含WEB-INF。我在这里看到了很多问题,但我还没有找到解决方案。

如果我移动src/main/java文件夹下的applicationContext.xml文件,我可以获取上下文,但定义到web.xml文件中的shiro filder无法看到在applicationContext下定义的shiro bean文件(我双重检查,并且bean正确工作)。我如何告诉web.xml从src/main/java获取内容?或者,如何才能访问applicationContext.xml

+1

为什么你想要从你的控制器内部创建一个**新的** ApplicationContext?改为使用现有的自动装配。 – 2013-04-10 20:57:01

+0

尝试使用@Autowired私有静态ApplicationContext上下文;但它始终为空。 – 2013-04-10 21:05:15

+1

试试这个:http://stackoverflow.com/questions/4914012/how-to-inject-applicationcontext-itself。另外,不要把它变成静态的。 – 2013-04-10 21:08:56

回答

0

问题已经解决移动WEB-INF /类下的所有配置文件,并添加前缀类路径:

<import resource="classpath:spring-data.xml"/> 

由于所有的帮助!我真的很感激!

干杯,安德烈

2

WEB-INF不在您的CLASSPATH中。 WEB-INF /类是。那么为什么不把它放在源文件夹中并打包应用程序呢?

+0

过滤器定义web.xml出现问题。正在寻找WEB-INF下的applicationContext。 – 2013-04-10 21:23:09

+0

好的,我移动了WEB-INF/classes下的applicationContext.xml,它的工作正常,但我无法在我的applicationContext中包含任何文件。我绝对需要包含ehcache.xml,并且不可能将它嵌入到applicationContext中。 – 2013-04-11 08:48:36

+0

这应该是直截了当的。在放置应用程序上下文xml的相同位置添加ehcache xml。看到,它表示此\t <属性名= “hibernateProperties”>一个例子 <丙键= “net.sf.ehcache.configurationResourceName”> ./ ehcache.xml中 <丙键=“hibernate.cache.region.factory_class “> org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory \t – maggu 2013-04-11 09:17:30

1

不要在您的控制器中创建ApplicationContext的实例。春天DispatcherServlet已经为你创建了一个。您只需要使用@Autowired访问应用程序上下文文件中的所有bean声明。

2

使用

context = new FileSystemXmlApplicationContext(fileContext); 

代替

context = new ClassPathXmlApplicationContext(fileContext); 
+0

同样的问题,它开始从绝对URL(相同的Eclipse)来读取,我不能够达到项目文件夹。 – 2013-04-11 08:22:13