谁没掉进过几个大坑
记得很久以前,总能时不时在某个地方看到一些标语,每每都是上面一个伟人的头像,而后不论是不是他说的话,下面老是有看起来很政治正确且没卵用的屁话,我活到目前为止,最令我笑的肚子痛得是下面这段标语。html
态度决定高度,思路决定出路,细节决定成败,环境决定心境,格局决定结局。java
没错,这是一个干过传销的朋友告诉个人。web
我来就讲讲思路
上一篇从零开始学 Java - Spring MVC 实现跨域资源 CORS 请求 中使用简单的配置后便可实现跨域请求,可是,我在走向配置成功的路上因为我瞎,掉进了一个大坑,由于是 Spring MVC 版本 4.2 及以上才支持 CORS 配置,因此,我下载了 4.2.5 配置后一直报错,接着我下载了 4.2.6 版本依然报这样的错误spring
报错信息具体代码以下:apache
严重: 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)
我搞了整整一个上午,任何方法都尝试了,已经快要崩溃了,依然没解决掉。跨域
首先,我用谷歌搜出来的信息没有一个是能够的,接着,我去查看官方文档、看源码,他们也是丝毫没有提到这个问题,我也开始怀疑人生了,你懂这种感受的。
整个项目组的人试着各类办法解决,依然没有任何做用,最后你们说:要不咱们仍是换回老版本吧,用最原始的方式跨域?我说,大家让我再试试吧... 这个期间,找来公司的技术大牛也来帮我解决这个问题,浪费了他老半天时间依然找不到缘由,感谢他浪费时间陪我折腾。markdown
我又加了几个技术群,在每一个群里发这个错误,求解决。这期间除了几个招聘的 HR 勾引我,仍是有几个群友出来帮我找问题的,最后我看到他们都是在用「百度一下」的时候,我也就放弃了,由于结果可想而知的。可是,我依然很感谢他们的热情。app
再接着,我去了一个技术社区发问题、提问了。我获得的结果和你们百度出来的同样同样的。
cors
问题解决了
下班回到家,饭都吃不了了。次日,到公司后,一同事告诉我:昨天晚上我回家新建了一个项目,配置后就能够成功的。我快要泪奔了,我说:昨天咱们又复制一个项目去去掉全部的配置也不行的啊?而后,我俩当场又新建了一个项目,居然启动成功了!!!post
接着,安装刚刚的配置修改项目,依然不成功。我特么真是日了狗了...我就去了厕所。
从厕所回来,我忽然的发现,因为咱们 Spring 版本升级到了4.2.6,Build Path
里的 jar 包都是导入的 4.2.6 版本的,可是可是,我没把 4.1 的版本的删除掉删除掉删除掉!!!
我到如今依然想不通的是:咱们项目中导的 jar 包是 4.2.6 版本的,只是老版本的 jar 包没从 WEB-INF\lib
下删除,它为啥依然回去加载老版本 jar 包?
最后总结一下
此次踩的坑主要缘由在于我,由于我没及时删除WEB-INF\lib
下老版本 jar 包,由于咱们当时是知道这目录下是有老版本jar包的,你们都认为没有影响,由于并无加载它。这多是你们的一个广泛的误区吧!
如今你们再搜索Configuration problem: Cannot locate BeanDefinitionParser for element [cors]
这个错误信息后,会找到个人提问和这篇文章,省得你们再次走进误区,浪费时间,那这篇文章的目的就达到了。谢谢你,看我唠叨到最后。
由于以为颇有用,就想摘录下来好学习。
摘自博主Mafly,连接:(pick me up)