摘要:作为项目开发人员,千万不要外部包放到系统目录和路径下,这是在为以后埋坑。
源于学习用spring十分钟搭建restful风格的web服务
最近开始着手学习spring,按照官网的guide,十分钟搭建一个restful风格的web服务的hello world,原地址在这里:Building a RESTful Web Service。
一切过程都很顺利,直到运行的时候,出现了这个鬼:
第一反应是官网的case太老,疏于更新了。这种情况也不是没有。
但我一看spring的官网这么酷炫,貌似经常更新,不应该出现这么低级的错误。
就我的经验来看,这种问题,一般都是jar的版本问题导致的。
而对于servlet来说,就有两种情况,要么是servlet包太老,要么就是servlet容器太老。
我google一下,在stackoverflow上,对于同一个问题,看到这么一个答案:
按照其解决步骤:
我查看了一下servlet容器,spring的demo里面是内置tomcat8的,所以不存在容器问题,那么只可能是servlet包问题了。
这个时候第三个步骤:
千万不要把servlet-api.jar或者j2ee.jar放在/WEB-INF/lib里,更糟糕的是放在JRE/lib或者JRE/lib/ext里面,这是新手常犯的错误。
看到这里,我第一反应是检查了classpath的路径,果然在一个路径下发现有躺着一个servlet.jar,不知道什么时候放上去的。
移除掉这个jar,再运行就成功了。
稍微有点遗憾的是,那位大神没解释原因。
我仔细回想了一下,大学时曾看过一些JVM类加载的问题,顺便找到了这篇文章:
深入研究Java类加载机制
详细请看那篇文章,这里简单总结下:
JVM会优先加载系统lib或者用户自己配置的classpath下的jar包,然后再加载项目中的jar包。作为项目开发人员,千万不要外部包放到系统目录和classpath路径下,这是在为以后埋坑。
有一个小tips:
对于eclipse,最好选择eclipse自带的servlet容器,其操作方式是:
右键项目 ---> Properties ---> Java Build Path ---> Add Library... ---> Server Runtime ---> J2EE Priview(当然,如果你需要配置自己的tomcat,在这里选择tomcat即可) ----> Finish.
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/64368.html
摘要:,到现在为止一切都按部就班,执行上面的命令正常运行,读取里面的文件,并输出相应的属性。那么,如果我们想改变配置文件的内容是否需要修改源文件里的然后重新打包成呢显然这样做太麻烦也不太合理,你可以在外面配置一个新的让里的去读取。 Java中经常要用到各种配置文件xxx.properties来控制程序的运行或进行国际化等但是也常常遇到配置文件放置路径找不到的问题,这里以java.uitl.R...
摘要:本文章记录本人在深入学习条件表达式中看书理解到的一些东西,并且整理记录下来,加深记忆和方便之后的复习。表达式的值具有线性特征,如对连续的区间值进行判断。 本文章记录本人在深入学习js条件表达式中看书理解到的一些东西,并且整理记录下来,加深记忆和方便之后的复习。主要是深入学习if else和switch语句的一些性能优化和逻辑思维。 提高条件性能的策略 js的条件表达式和其他语言一样...
摘要:第一次写技术文章,主要内容是使用创建一个简单的项目,如有操作或理解错误请务必指出,当谦虚学习。基本思想其实就是一个项目引用别的模块包,最终项目被打成包发布。 第一次写技术文章,主要内容是使用maven创建一个简单的SpringMVC WEB 项目,如有操作或理解错误请务必指出,当谦虚学习。做这一次的工作主要是因为想加强一下自己对Spring Web 项目的理解,因为平时都是直接写业务代...
阅读 2718·2021-11-16 11:45
阅读 1583·2021-09-26 10:19
阅读 1992·2021-09-13 10:28
阅读 2765·2021-09-08 10:46
阅读 1506·2021-09-07 10:13
阅读 1490·2019-08-30 13:50
阅读 1358·2019-08-30 11:17
阅读 1414·2019-08-29 13:18