Java applicationContext.xml正在从src/main/resources复制到/WEB-INF/classes

Java applicationContext.xml正在从src/main/resources复制到/WEB-INF/classes,java,spring,Java,Spring,但是tomcat抛出了错误: IOException parsing XML document from ServletContext resource [/WEB-INF/applicationContext.xml]; 这表明tomcat希望applicationContext.xml位于复制到的目录之上。它被复制到/WEB-INF/classes目录,而不仅仅是普通的/WEB-INF 我正在使用maven。在您的web.xml中,您可以说明您的applicationContext.xm

但是tomcat抛出了错误:

 IOException parsing XML document from ServletContext resource [/WEB-INF/applicationContext.xml];
这表明tomcat希望applicationContext.xml位于复制到的目录之上。它被复制到/WEB-INF/classes目录,而不仅仅是普通的/WEB-INF


我正在使用maven。

在您的
web.xml
中,您可以说明您的
applicationContext.xml
的位置。如果在
/WEB-INF/classes
中,则必须声明
/WEB-INF/classes/applicationContext.xml
(而不仅仅是
/WEB-INF/applicationContext.xml

试试这个:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/classes/applicationContext.xml
    </param-value>
</context-param>
<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener> 

如果已将其置于src/main/resources下,则应将资源称为
classpath:/applicationContext.xml

标准方法是创建新的源目录
src/main/webapp
。此目录中的所有文件都将放在与WEB-INF相同的文件夹中,从而导致war。因此,在这个新的源目录中,您可以创建
WEB-INF
,并将您
applicationcontext.xml
放入其中

所以你的结构看起来很像

+src
+---main
+---+---java
+---+---webapp
+---+------WEB-INF

检查文档

在web.xml()中使用以下语法:


上下文配置位置
classpath*:applicationContext.xml
它将从classes/*目录加载它。 顺便说一句,如果要将applicationContext.xml直接复制到WEB-INF目录中,请将其移动到/src/main/webapp中

顺便说一句,以下是spring文档推荐的方法:


这是标准的专业行为,也是很多人毫无异议地使用的行为。你为什么喜欢在WEB-INF中使用它


不管怎样,如果你想把它放在那里,你可以把它放在
src/main/webapp/WEB-INF

什么是标准方式?我以为maven只是惯例,我没有改变任何东西,好吧。我想第二个问题是如何让maven将src/main/resources复制到/WEB-INF@NimChimpsky我补充了一些细节。如果足够的话,我会查一查(我想我错过了听众)。您不想将src/main/resources复制到/WEB-INF。因为您的spring配置不属于那里。我建议您将它放在/WEB-INF/spring/@NimChimpsky中,这样,现在它就完成了。好了,现在我得到了spring-servlet.xml的相同结果:-(,但那是因为我应该将该文件保存在根/WEB-INF中?@NimChimpsky您可以在applicationContext.xml中包含其他上下文xml文件,语法为
路径是相对于applicationContext.xmllol的位置的,我并不介意它在哪里。但是我将它从webapp/WEB-INF移动到src/main/resources,如下所示它更有意义,而且是惯例,这导致了我的部署失败。是的,
src/main/resources
是通常的位置:)好的,现在我对spring-servlet.xml也有了相同的理解:-(,但那是因为我应该将该文件保存在根/WEB-INF中?好吧,我将所有配置文件放在
src/main/resources
中。在这种情况下,您可以在WEB.xml中设置正确的位置:您必须在
DispatcherServlet
中设置
contextConfigLocation
参数。
+src
+---main
+---+---java
+---+---webapp
+---+------WEB-INF
<!-- list of the configuration files to load -->
<context-param>
    <!-- Spring -->
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:applicationContext.xml</param-value>
</context-param>