记得好久之前,总能时不时在某个地方看到一些标语,往往都是上面一个伟人的头像,然后不管是不是他说的话,下面总是有看起来很政治正确且没卵用的屁话,我活到目前为止,最令我笑的肚子痛得是下面这段标语。
态度决定高度,思路决定出路,细节决定成败,环境决定心境,格局决定结局。
没错,这是一个干过传销的朋友告诉我的。
上一篇 中使用简单的配置后即可实现跨域请求,但是,我在走向配置成功的路上由于我瞎,掉进了一个大坑,因为是 Spring MVC 版本 4.2 及以上才支持 CORS 配置,所以,我下载了 4.2.5 配置后一直报错,接着我下载了 4.2.6 版本依然报这样的错误
报错信息具体代码如下:
- 严重: StandardWrapper.Throwable org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Cannot locate BeanDefinitionParser
- for element[cors] Offending resource: ServletContext resource[/web-INF/springMVC - servlet.xml] at org.springframework.beans.factory.parsing.FailFastProblemReporter.fatal(FailFastProblemReporter.java: 60) at org.springframework.beans.factory.parsing.ReaderContext.fatal(ReaderContext.java: 68) at org.springframework.beans.factory.parsing.ReaderContext.fatal(ReaderContext.java: 55) at org.springframework.beans.factory.xml.NamespaceHandlerSupport.findParserForElement(NamespaceHandlerSupport.java: 85) at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java: 74) at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java: 1424) at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java: 1414) at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java: 189) at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java: 143) at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java: 110) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java: 508) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java: 391) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java: 335) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java: 303) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java: 180) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java: 216) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java: 187) at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java: 125) at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java: 94) at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java: 129) at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java: 537) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java: 452) at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java: 658) at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java: 624) at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java: 672) at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java: 543) at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java: 484) at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java: 136) at javax.servlet.GenericServlet.init(GenericServlet.java: 158) at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java: 1282) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java: 1195) at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java: 1085) at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java: 5349) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java: 5641) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java: 147) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java: 1571) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java: 1561) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)
我搞了整整一个上午,任何方法都尝试了,已经快要崩溃了,依然没解决掉。
首先,我用谷歌搜出来的信息没有一个是可以的,接着,我去查看官方文档、看源码,他们也是丝毫没有提到这个问题,我也开始怀疑人生了,你懂这种感觉的。
整个项目组的人试着各种办法解决,依然没有任何作用,最后大家说:要不我们还是换回老版本吧,用最原始的方式跨域?我说,你们让我再试试吧... 这个期间,找来公司的技术大牛也来帮我解决这个问题,浪费了他老半天时间依然找不到原因,感谢他浪费时间陪我折腾。
我又加了几个技术群,在每个群里发这个错误,求解决。这期间除了几个招聘的 HR 勾引我,还是有几个群友出来帮我找问题的,最后我看到他们都是在用「百度一下」的时候,我也就放弃了,因为结果可想而知的。但是,我依然很感谢他们的热情。
再接着,我去了一个技术社区发问题、提问了。我得到的结果和大家百度出来的一样一样的。
下班回到家,饭都吃不了了。第二天,到公司后,一同事告诉我:昨天晚上我回家新建了一个项目,配置后就可以成功的。我快要泪奔了,我说:昨天我们又复制一个项目去去掉所有的配置也不行的啊?然后,我俩当场又新建了一个项目,竟然启动成功了!!!
接着,安装刚刚的配置修改项目,依然不成功。我特么真是日了狗了... 我就去了厕所。
从厕所回来,我突然的发现,由于我们 Spring 版本升级到了 4.2.6,
里的 jar 包都是导入的 4.2.6 版本的,但是但是,我没把 4.1 的版本的删除掉删除掉删除掉!!!
- Build Path
我到现在依然想不通的是:我们项目中导的 jar 包是 4.2.6 版本的,只是老版本的 jar 包没从
下删除,它为啥依然回去加载老版本 jar 包?
- WEB-INF\lib
这次踩的坑主要原因在于我,因为我没及时删除
下老版本 jar 包,因为我们当时是知道这目录下是有老版本 jar 包的,大家都认为没有影响,因为并没有加载它。这可能是大家的一个普遍的误区吧!
- WEB-INF\lib
现在大家再搜索
这个错误信息后,会找到我的提问和这篇文章,免得大家再次走进误区,浪费时间,那这篇文章的目的就达到了。谢谢你,看我唠叨到最后。
- Configuration problem: Cannot locate BeanDefinitionParser for element [cors]
来源: http://www.cnblogs.com/mafly/p/cors_keng.html