Struts2整合Spring问题,配置好久了,一直报错,求解决

snailjumpjump 2014-06-25 10:04:29
我在Eclipse中用Struts2、Spring和JDBC整合一个小例子,可是一直报错,
1、当我用如下方式配置时,
项目结构目录如下:


web.xml配置如下:

然后就一直报如下错误:
SEVERE: Context initialization failed
org.springframework.beans.factory.BeanDefinitionStoreException: 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
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:341)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:537)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:451)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:410)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4210)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4709)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:583)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:675)
at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:601)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:822)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
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:601)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: java.io.FileNotFoundException: class path resource [applicationContext.xml] cannot be opened because it does not exist
at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:157)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:328)
... 36 more

2、然后我换另一种方式,把applicationContext.xml文件放在WEB-INF下,结果又报错,
工程结构:

启动还是报错:
SEVERE: Context initialization failed
org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [xl.dao.impl.UserDaoImpl] for bean with name 'userDao' defined in ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is java.lang.ClassNotFoundException: xl.dao.impl.UserDaoImpl
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1281)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:575)
at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1350)
at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:916)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:609)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:410)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4210)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4709)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:583)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:675)
at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:601)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:822)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
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:601)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: java.lang.ClassNotFoundException: xl.dao.impl.UserDaoImpl
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
at org.springframework.util.ClassUtils.forName(ClassUtils.java:255)
at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:416)
at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1302)
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1273)
... 33 more


项目采用热部署的方式部署到tomcat上的,
<?xml version="1.0" encoding="UTF-8"?>
<Context path="ssj" reloadable="true" docBase="E:\Workspaces\eclipse-3.7.2\ssj\webapp">
</Context>

Spring配置文件如下:


...全文
301 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
浮云若水 2014-06-30
  • 打赏
  • 举报
回复
引用 14 楼 xlxiongliang 的回复:
[quote=引用 8 楼 zhouren1314 的回复:] classPath下方配置文件。。。
引用 9 楼 zy353003874 的回复:
放在Src目录下,还有看看你的名字不要写错了,一定要和配置文件中的一致
引用 10 楼 a276202031 的回复:
.FileNotFoundException: class path resource [applicationContext.xml] cannot be opened because it does not exist applicationContext.xml 把这文件放到src 目录下面
引用 11 楼 shiyanxuyao 的回复:
applicationContext.xml放回src目录,然后将classpath:applicationContext.xml 改成 classpath*:applicationContext.xml试试
引用 12 楼 pan_yu1548 的回复:
<param-value>classpath*:applicationContext*.xml</param-value> 把applicationContext.xml文件放到src 目录下面 然后再看看你的lib下是否有连接数据库的包或包是否正确。
引用 13 楼 OOCXC 的回复:
照这样指定路径,如果spring的xml不在src目录或者你的xml不叫applicationContext.xml,你可以把下面的加到web.xml里面.比如叫beans.xml.... <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/beans.xml </param-value> </context-param> 这样没错了,如果还报错,检查拼写了.
感谢你们的回帖,不过都没说到点子上,你们说的那些问题我都考虑到了,所以我发帖时特别强调用两种方式配置但都不行; 问题解决了,不过都不是你们说的这些。问题根源在于:我是用的Eclipse配置的,Eclipse建web项目时,会自动添加一个build目录,把编译好的class文件都放在下面,所以当我在web.xml中写classespath:appliactionContext.xml时说文件不存在,(另外顺便说一下,写成<param-value>/WEB-INF/classes/beans.xml </param-value>和写成 <param-value>classespath:appliactionContext.xml</param-value>的意思和作用是一样的。) 最后通过在右键点击的项目—>Build Path—>Configure Build Path,右边选择source选项卡,最下面有个default output folder,然后在WEB-INF下建一个classes文件夹,这样再编译一下就可以了,问题完美解决。 最后作为感谢,每楼都撒分,[/quote] 你这是修改项目编译文件存放目录 其实归根结底 问题就是编译文件 路径不对找不到,你该编译文件目录 和你该配置文件的目的都是一样 为了让路径能够找到对应编译文件 没你说的那么复杂
OOCXC 2014-06-28
  • 打赏
  • 举报
回复
照这样指定路径,如果spring的xml不在src目录或者你的xml不叫applicationContext.xml,你可以把下面的加到web.xml里面.比如叫beans.xml.... <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/beans.xml </param-value> </context-param> 这样没错了,如果还报错,检查拼写了.
snailjumpjump 2014-06-28
  • 打赏
  • 举报
回复
引用 8 楼 zhouren1314 的回复:
classPath下方配置文件。。。
引用 9 楼 zy353003874 的回复:
放在Src目录下,还有看看你的名字不要写错了,一定要和配置文件中的一致
引用 10 楼 a276202031 的回复:
.FileNotFoundException: class path resource [applicationContext.xml] cannot be opened because it does not exist applicationContext.xml 把这文件放到src 目录下面
引用 11 楼 shiyanxuyao 的回复:
applicationContext.xml放回src目录,然后将classpath:applicationContext.xml 改成 classpath*:applicationContext.xml试试
引用 12 楼 pan_yu1548 的回复:
<param-value>classpath*:applicationContext*.xml</param-value> 把applicationContext.xml文件放到src 目录下面 然后再看看你的lib下是否有连接数据库的包或包是否正确。
引用 13 楼 OOCXC 的回复:
照这样指定路径,如果spring的xml不在src目录或者你的xml不叫applicationContext.xml,你可以把下面的加到web.xml里面.比如叫beans.xml.... <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/beans.xml </param-value> </context-param> 这样没错了,如果还报错,检查拼写了.
感谢你们的回帖,不过都没说到点子上,你们说的那些问题我都考虑到了,所以我发帖时特别强调用两种方式配置但都不行; 问题解决了,不过都不是你们说的这些。问题根源在于:我是用的Eclipse配置的,Eclipse建web项目时,会自动添加一个build目录,把编译好的class文件都放在下面,所以当我在web.xml中写classespath:appliactionContext.xml时说文件不存在,(另外顺便说一下,写成<param-value>/WEB-INF/classes/beans.xml </param-value>和写成 <param-value>classespath:appliactionContext.xml</param-value>的意思和作用是一样的。) 最后通过在右键点击的项目—>Build Path—>Configure Build Path,右边选择source选项卡,最下面有个default output folder,然后在WEB-INF下建一个classes文件夹,这样再编译一下就可以了,问题完美解决。 最后作为感谢,每楼都撒分,
zy_think123 2014-06-27
  • 打赏
  • 举报
回复
放在Src目录下,还有看看你的名字不要写错了,一定要和配置文件中的一致
pan_yu1548 2014-06-27
  • 打赏
  • 举报
回复
<param-value>classpath*:applicationContext*.xml</param-value> 把applicationContext.xml文件放到src 目录下面 然后再看看你的lib下是否有连接数据库的包或包是否正确。
shiyanxuyao 2014-06-27
  • 打赏
  • 举报
回复
applicationContext.xml放回src目录,然后将classpath:applicationContext.xml 改成 classpath*:applicationContext.xml试试
浮云若水 2014-06-27
  • 打赏
  • 举报
回复
.FileNotFoundException: class path resource [applicationContext.xml] cannot be opened because it does not exist applicationContext.xml 把这文件放到src 目录下面
海里的顽石 2014-06-26
  • 打赏
  • 举报
回复
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <context-param> <description>spring配置文件指定</description> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/classes/applicationContext.xml </param-value> </context-param> web.xml中增加这一段
suciver 2014-06-26
  • 打赏
  • 举报
回复
把applicationContext.xml这个文件放到src目录里。
乔不思 2014-06-26
  • 打赏
  • 举报
回复
classPath下方配置文件。。。
野树林 2014-06-26
  • 打赏
  • 举报
回复
看你的图咋在xl包下又是其他包呢,如果是这样的话肯定找不到其他类
snailjumpjump 2014-06-26
  • 打赏
  • 举报
回复
引用 4 楼 sj1231984 的回复:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <context-param> <description>spring配置文件指定</description> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/classes/applicationContext.xml </param-value> </context-param> web.xml中增加这一段
截图中我有这个的, <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> 这样写也是一样的啊
snailjumpjump 2014-06-26
  • 打赏
  • 举报
回复
引用 3 楼 suciver 的回复:
把applicationContext.xml这个文件放到src目录里。
第一种方法,applicationContext.xml就在src下啊,上面有截图
snailjumpjump 2014-06-26
  • 打赏
  • 举报
回复
引用 2 楼 aazbc 的回复:
看你的图咋在xl包下又是其他包呢,如果是这样的话肯定找不到其他类
什么在xl包下又在其他包下?
snailjumpjump 2014-06-25
  • 打赏
  • 举报
回复
Spring配置文件如下:



81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧