Servlet.init() for servlet action threw exception

项目用的spring+springMVC+myBatis,写了一个非常简单的url controller,运行后在页面输入对应url一直报下面的错误:
错误信息1:
message :Servlet.init() for servlet action threw exception


root cause:
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 13 in XML document from ServletContext resource [/WEB-INF/dispatcher-servlet.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 13; columnNumber: 79; cvc-elt.1: 找不到元素 'beans' 的声明。

明明是很简单的配置没想到是哪里出错了。最后在tomcat启动日志里发现如下错误信息:
错误信息2:
八月 12, 2015 12:19:02 下午 org.apache.catalina.deploy.WebXml setVersion
警告: Unknown version string [3.1]. Default version will be used.

突然想起来tomcat的conf目录下有个web.xml,估计是版本问题。最后查看tomcat果然我用的是tomat7.0对应的conf下web.xml是3.0,IDEA在项目中自动生产的web.xml是3.1,于是把IDEA中项目的web.xml换成3.0还是不行,于是只有去官网下了最新的tomcat8.0,查看conf目录下web.xml是3.1。重新启动项目,问题解决。

预计是这样,我们原来项目一直用的spring3.2版本,对应项目的web.xml是2.5版本,而tomcat7里的web.xml是3.0版本,可以向下兼容可以运行
新项目采用spring4.1.6,对应项目的web.xml自动生产的是3.1版本,因此tomcat7中的web.xml就不匹配了,只能用tomcat8才能运行成功。

====================================================
2015-8-13更新
记录自己的错误。
如上所述,即便在启动项目时出现了错误信息2,IDEA会采用预设版本,并不会出现错误信息1的情况。
更正如下:
错误信息2的确是因为项目的web.xml和tomcat的web.xml不匹配造成,但不影响项目运行,将两者匹配后则不会报该错误信息。
错误信息1出现是因为项目中的dispatch-servlet.xml中的版本号和spring jar包中的版本号不一致导致,更改成一致后如果还是不行,则将xml中的schemalocation地址改为本地地址。
如果还是不行,推测是spring用了新版本后web.xml也要用新版本才行。IDEA中ctrl+左键可查看版本和在本地位置

你可能感兴趣的:(spring,spring,mvc,Web)