重装Tomcat后Servlet报NoClassDefFoundError异常求助
解决Tomcat重装后
NoClassDefFoundError: org/json/simple/parser/JSONParser的问题 兄弟,从你贴的异常栈来看,核心问题很明确:编译时能找到JSON Simple的类,但Tomcat运行时找不到了。你说已经把Jar包加进类路径,但大概率是Jar包放错位置或者Tomcat没读到,给你一步步捋排查方法:
1. 先确认Jar包的放置位置(最关键!)
Tomcat运行Web应用时,只认两个地方的Jar包:
- 你自己项目的
WEB-INF/lib目录(这是每个应用专属的依赖目录,强烈推荐用这个) - Tomcat全局的
lib目录(不建议用,容易搞出多应用依赖冲突)
别只在IDE里把Jar包加到编译路径!IDE的配置只是给编译用的,Tomcat运行时根本不看这个。你得把json-simple-xxx.jar(比如常用的json-simple-1.1.1.jar)实打实放到项目的WEB-INF/lib文件夹里,然后重新部署项目。
2. 检查Jar包本身有没有问题
- 会不会是Jar包下载坏了?去靠谱的渠道重新下载一个对应版本的Jar包,替换掉原来的。
- 如果是用Maven/Gradle构建的项目,记得在配置文件里正确引入依赖,确保打包时Jar包能被自动复制到
WEB-INF/lib:
比如Maven的pom.xml里要加这段:
执行<dependency> <groupId>com.googlecode.json-simple</groupId> <artifactId>json-simple</artifactId> <version>1.1.1</version> <scope>compile</scope> </dependency>mvn package打包后,去target目录里的war包/解压文件夹里看看WEB-INF/lib有没有这个Jar包。
3. 清掉Tomcat缓存再重启
Tomcat重装后可能残留旧的缓存,导致它没读到新放的Jar包:
- 先把Tomcat停了
- 删掉Tomcat安装目录下的
work文件夹(这里存的是编译后的类缓存,删了没事) - 如果你的项目是自动部署到Tomcat的
webapps目录下,也把项目对应的文件夹/war包删掉 - 重新部署项目,再启动Tomcat
4. 加段代码验证Jar包是否被加载
实在不确定的话,在你的ReadFile Servlet的doGet方法开头加一段调试代码:
// 调试用,确认JSONParser是否能被加载 ClassLoader loader = Thread.currentThread().getContextClassLoader(); URL parserClass = loader.getResource("org/json/simple/parser/JSONParser.class"); if (parserClass == null) { System.out.println("完蛋!JSONParser类找不到!"); } else { System.out.println("找到了!路径是:" + parserClass.getPath()); }
启动Tomcat后看控制台日志,如果输出“找不到”,那就是Jar包确实没被Tomcat读到;如果找到了,那可能是其他依赖缺失(不过json-simple基本是独立的,这种情况很少)。
5. 版本兼容性问题?
你用的是Tomcat 7.0.88,json-simple 1.1.1及以上版本和Tomcat 7完全兼容,所以这个概率很低,但别用太老的版本就行,比如1.0.0这种。
按上面的步骤来,99%能解决这个问题!
内容的提问来源于stack exchange,提问作者jzz




