[英]nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/dispatcher-servlet.xml]
[英]nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/spring/servlet-context.xml]
好的,謝謝您幫助解決最后一個問題。 這是我的新錯誤以及隨后的代碼。 我只想解決錯誤中的粗體字問題,因為這是唯一的錯誤。
[Thread-36] ContextLoader錯誤上下文初始化失敗org.springframework.beans.factory.BeanDefinitionStoreException:IOException從ServletContext資源[/spring/servlet-context.xml]解析XML文檔; 嵌套異常是java.io.FileNotFoundException:無法在org.springframework上的org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:341)處打開ServletContext資源[/spring/servlet-context.xml] 。在org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)處的beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)在org.springframework.beans.factory.support.AbstractBeanDefinitionReader處org.springframework.webs.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:124)處的loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)在org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)在org.springframework.web.context.support。在org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:93 )在org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)在org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:467)在org.springframework.context.support.AbstractApplicationContext。在org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276)在org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197)刷新(AbstractApplicationContext.java:397)位於org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4701)的.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47),位於org.apache.catalina.core.StandardContext $ 1.call(StandardContext。 org.apache.catalina.core.StandardContext $ 1.call(StandardContext.java:5199)處java.util.concurrent.FutureTask.run(java.5204)java.util.c處(Unknown Source) java.util.concurrent.ThreadPoolExecutor $ Worker.run(java.lang.Thread.run(未知源)上的oncurrent.ThreadPoolExecutor.runWorker(未知源)原因:java.io.FileNotFoundException:無法打開ServletContext org.springframework.web.context.support.ServletContextResource.getInputStream(ServletContextResource.java:117)上的資源[/spring/servlet-context.xml] org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java) :328)...其他2013年10月16日上午org.apache.catalina.core.StandardContext startInternal嚴重:錯誤listenerStart 2013年10月16日上午org.apache.catalina.core.Standard。 StandardContext startInternal SEVERE:由於先前的錯誤,導致上下文[/mdimgmtsys-1.0-SNAPSHOT]啟動失敗
現在的代碼:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<context-param>
<param-name>contextAppConfigLocation</param-name>
<param-value>app-context.xml classpath*:app-context.xml</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/spring/servlet-context.xml classpath*:servlet-context.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Enables Spring Security -->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextAppConfigLocation</param-name>
<param-value>app-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>contextServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/spring/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
<servlet-name>contextServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
我所做的一切都無法在Tomcat中啟動應用程序。
Spring Web項目中的Application Context和Servlet Context之間有區別。 我們用來配置應用程序上下文,用法與您的用法相同
<context-param>
<param-name>contextAppConfigLocation</param-name>
<param-value>classpath:app-context.xml</param-value>
</context-param>
對於Servlet上下文,默認情況下,Web容器將嘗試在WEB-INF目錄中找到#servlet-name#-servlet.xml。因此,對於您的問題,您需要將您的文件移至WEB-INF目錄並將其名稱更改為相應的名稱。 (contextServlet-servlet.xml,appServlet-servlet.xml)
就像錯誤所說,這是servlet-context.xml文件位置的問題。 更改路徑,它將正常工作。
我通過將servlet.xml
放在正確的位置(即WEB-INF
文件夾下)解決了相同的錯誤。 您也可以嘗試。
如果要更改spring配置文件的位置和命名約定,則應在DispatcherServlet
定義中添加一個contextConfigLocation
,例如:
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:app-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
請注意,您的app-context.xml
應該位於src文件夾的根目錄中,否則,您必須在指向它的類路徑中或WEB-INF中的路徑中指定路徑,但不要帶classpath:
前綴。
有關更多詳細信息,請參見以下答案: https : //stackoverflow.com/a/14956773/120794 。
幾個月前我有同樣的問題。 這使用Maven而不是Spring的下載版本和web.xml中的某些更改解決了我的問題。
的pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>SpringWEB1</groupId>
<artifactId>SpringWEB1</artifactId>
<version>1</version>
<packaging>war</packaging>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
</project>
Controller.java
package com.jmtm.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@org.springframework.stereotype.Controller
public class Controller {
@RequestMapping("/hi")
public ModelAndView hi(){
return new ModelAndView("Hello", "msg", "Hello user.");
}
}
為spring-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:c="http://www.springframework.org/schema/c"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsd">
<context:component-scan base-package="com.jmtm.controller"></context:component-scan>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
</beans>
解決方案中最重要的部分包括web.xml中servlet調度程序的路徑(AKA spring-servlet.xml)。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>SpringWEB1</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
當我嘗試解決此問題時,發生了一些奇怪的事情。 從maven.springframework.org/release/org/springframework/spring下載的任何版本的Spring 都會給我帶來很多問題(Tomcat找不到servlet,Spring停止Tomcat,Eclipse無法啟動服務器{weird}),因此許多問題找到許多部分解決方案。 希望這對您有用。
作為一個額外的幫助,在Eclipse中,從Eclipse Marketplace中下載適用於Eclipse的Spring STS工具,這將幫助您創建配置文件(servlet.xml)並在web.xml文件中編寫Servlet的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.