spring-org.springframework.beans.factory.BeanDefinitionStoreException及相关介绍

自己做一个测试,要用到Springmvc,因为好久没有配置SpringMvc工程,所以就想自己慢慢试试,真是不试不知道,no zuo no die!!!

启动tomcat后报了下面的错:

严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/applicationContext.xml]

之前知道spring默认的配置文件是applicationContext.xml,所以如果又重命名要在web.xml中指定。我这里用的是自己重命名过的的mvc.xml配置文件,

我在下面的代码中进行了定义:


SpringMVC
org.springframework.web.servlet.DispatcherServlet

contextConfigLocation
classpath:config/mvc.xml

1



SpringMVC
/

可是为什么还会报错?这个问题似乎很严重的样子,以前配置springMvc时没有发现过。

网上:百度了一些方法如:

在web.xml中加入以下配置:

 
  contextConfigLocation  
  /WEB-INF/classes/applicationContext.xml  

 我把/WEB-INF/classes/applicationContext.xml换成/WEB-INF/classes/config/mvc.xml还是报错。

然后就去/WEB-INF/classes/去找是否生成了mvc.xml文件,一查才发现根本就没有生成,连config文件夹都没有,再去看整个工程时发现原来config文件夹不是在源文件夹src下而是和src并列,导致tomcat启动时根本就知道他的存在。

接着我把config文件夹及其内部文件移到src文件夹中,接着重启tomacat服务器发现还是报错。

严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/applicationContext.xml]

去/WEB-INF/classes/看,也生成了config/mvc.xml文件,为什么还要去找applicationContext?

tomcat加载spring的配置文件默认位置是在/WEB-INF/下找applicationContext.xml文件,而Myeclipse文件编译后生成的applicationContext配置文件放在/WEB-INF/classes/applicationContext.xml,所以加载时找不到applicationContext.xml文件。

解决方法:

方法1.在web.xml配置文件加上

 
  contextConfigLocation  
  /WEB-INF/
classes/config/mvc.xml  

其中:/WEB-INF/classes/你的spring配置文件路径及配置文件  根据自己的配置文件名定。


方法2:

把你的配置文件如我的是mvc.xml拷贝到WebRoot\WEB-INF\文件夹根目录下,记得如果你的文件名成applicationContext.xml那就没问题,但是如果你的文件名不是applicationContext那么就要改成applicationContext不然还是会报错说找不到applicationContext.xml文件。比如我的mvc.cml就要改成applicationContext.xml后才能启动正常。


我比较推崇第一种方法,第二种方法有点麻烦。

web.xml配置springmvc最简单的配置如下:

  
   	 
	   contextConfigLocation  
	   /WEB-INF/classes/config/mvc.xml  
	  
	
	
	
		SpringMVC
		org.springframework.web.servlet.DispatcherServlet
		 
			contextConfigLocation
			classpath:config/mvc.xml
		 
		1
	
	
	
		SpringMVC
		/
	
	
 	
		org.springframework.web.context.ContextLoaderListener
	

------

上面的问题解决了,于是我又把


contextConfigLocation
classpath:config/mvc.xml

注释掉,看看有什么错误?

错误如下:

严重: StandardWrapper.Throwable
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/SpringMVC-servlet.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/SpringMVC-servlet.xml]

这个错误和上面的错误是不是很相似。

可以得出结论:

一个spring工程,默认的有两个配置文件,一个是我们上面提到的tomcat加载的applicationContext.xml。另一个默认的就是 (你在web.xml写的servlet-name)加上-servlet.xml 比如我的是SpringMVC-servlet.xml。


所以如果我把


contextConfigLocation
classpath:config/mvc.xml

删除掉,不对配置文件进行初始化。也就是让容器去加载默认的spring配置文件ServletName-servlet.xml,注意默认的ServletName-servlet.xml是在src的根目录下,所以你要注意路径问题不然还是会报找不到ServletName-servlet.xml配置文件。

我下面这种配置springmvc的方法也可以,我的web.xml配置文件就要改成:

 
   	 
	   contextConfigLocation  
	   /WEB-INF/classes/SpringMVC-servlet.xml  
	  
	
	
	
		SpringMVC
		org.springframework.web.servlet.DispatcherServlet

		1
	
	
	
		SpringMVC
		/
	
	
 	
		org.springframework.web.context.ContextLoaderListener
	

接着我又把

 
1 




SpringMVC
/
 

也注释掉。虽然启动tomcat后没有报错,但是这样配置后的工程并不好,相关介绍可以看下面链接。


1)load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法)。

2)它的值必须是一个整数,表示servlet应该被载入的顺序

2)当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;

3)当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载。

4)正数的值越小,该servlet的优先级越高,应用启动时就越先加载。

5)当值相同时,容器就会自己选择顺序来加载。

所以,x,中x的取值1,2,3,4,5代表的是优先级,而非启动延迟时间。

(http://www.blogjava.net/xzclog/archive/2011/09/29/359789.html)

servlet-mapping 介绍 :-- http://www.blogjava.net/youngturk/archive/2012/05/22/378865.html



你可能感兴趣的:(JAVA,Spring,Springmvc)