java.io.FileNotFoundException:用于WebApp中的DispatcherServlet
我有一个在Spring项目中运行的程序,在定位DispatcherServlet时,由于java.io.FileNotFoundException:用于WebApp中的DispatcherServlet,java,xml,spring-mvc,filenotfoundexception,Java,Xml,Spring Mvc,Filenotfoundexception,我有一个在Spring项目中运行的程序,在定位DispatcherServlet时,由于java.io.FileNotFoundException而总是失败 DispatcherServlet位于\WEB-INF文件夹中,项目的其余部分可以访问它,而不会发生意外 因此,目前我被迫对DispatcherServlet的路径进行硬编码,如下所示: File config = new File("C:\\project\\build\\web\\WEB-INF\\project-servlet.xml
java.io.FileNotFoundException
而总是失败
DispatcherServlet
位于\WEB-INF
文件夹中,项目的其余部分可以访问它,而不会发生意外
因此,目前我被迫对DispatcherServlet的路径进行硬编码,如下所示:
File config = new File("C:\\project\\build\\web\\WEB-INF\\project-servlet.xml");
boolean exists = Misc.checkFileExists(config.getAbsolutePath());
if (exists) {
System.out.println("File: " + config.getAbsolutePath() + " found.");
}
ConfigurableApplicationContext context = new FileSystemXmlApplicationContext(config.getAbsolutePath());`
<servlet>
<servlet-name>project</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/project-servlet.xml</param-value>
</init-param>
</servlet>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/project-servlet.xml</param-value>
</context-param>
这根本不是最好的办法
但是,如果我试图将DispatcherServlet
放在\WEB-INF
下的文件夹中,例如\WEB-INF\resources
以满足类路径的要求,则仍然找不到该文件。因此,我不能使用ClassPathXmlApplicationContext
我已通过如下设置我的web.xml
文件来解决此问题:
File config = new File("C:\\project\\build\\web\\WEB-INF\\project-servlet.xml");
boolean exists = Misc.checkFileExists(config.getAbsolutePath());
if (exists) {
System.out.println("File: " + config.getAbsolutePath() + " found.");
}
ConfigurableApplicationContext context = new FileSystemXmlApplicationContext(config.getAbsolutePath());`
<servlet>
<servlet-name>project</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/project-servlet.xml</param-value>
</init-param>
</servlet>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/project-servlet.xml</param-value>
</context-param>
我应该补充一点,我只有一个projectservlet.xml
文件来配置所有内容。代码没有任何意义。ClassPathXmlApplicationContext,顾名思义,用于从类路径资源加载XML文件。但是您正在传递一个文件的路径。阅读:
独立XML应用程序上下文,从类路径获取上下文定义文件,将普通路径解释为包含包路径的类路径资源名称(例如“mypackage/myresource.txt”)
构成web应用程序类路径的是目录web-INF/classes和web-INF/lib中的所有jar文件。因此,您的XML文件不在类路径中,因此无法使用ClassPathXmlApplicationContext加载
如果要从WEB-INF加载上下文文件,请使用
无论如何,您不必手动执行此操作,因为Spring web应用程序通常使用web.xml文件或JavaConfig进行配置,如中所述。什么是完整的异常堆栈跟踪,以及导致此堆栈跟踪的代码是什么?添加到问题中。web-INF文件夹不在类路径上。默认情况下,类路径中包括WEB-INF/classes和WEB-INF/lib文件夹。还可以尝试在web.xml中使用ContextLoaderListener使用WebApplicationContext来配置Spring上下文。