我是靠谱客的博主 背后向日葵,最近开发中收集的这篇文章主要介绍Java Web解决已经导入了jar包 却仍出现 java.lang.NoClassDefFoundError的问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Java Web解决已经导入了jar包 却仍出现 java.lang.NoClassDefFoundError的问题

最近做本科毕业设计的时候,需要做一点Java web,在使用上传文件与servlet接收文件时,用到了两个jar包:Commons FileUpload与Commons IO。

但将这两个jar包按照常规方法导入Referenced Libraries后,服务器报错:
servlet java.lang.NoClassDefFoundError: org/apache/commons/fileupload/servle(忘记截图了)。在网上浪费一个小时,全是说jar包没有导入,后来终于找到了解决办法:

首先,需要明确NoClassDefFoundError和ClassNotFoundException是不同的:

1、NoClassDefFoundError错误发生的原因
NoClassDefFoundError错误的发生,是因为Java虚拟机在编译时能找到合适的类,而在运行时不能找到合适的类导致的错误。例如在运行时我们想调用某个类的方法或者访问这个类的静态成员的时候,发现这个类不可用,此时Java虚拟机就会抛出NoClassDefFoundError错误。与ClassNotFoundException的不同在于,这个错误发生只在运行时需要加载对应的类不成功,而不是编译时发生。很多Java开发者很容易在这里把这两个错误搞混。

简单总结就是,NoClassDefFoundError发生在编译时对应的类可用,而运行时在Java的classpath路径中,对应的类不可用导致的错误。

2、NoClassDefFoundError和ClassNotFoundException区别
我们经常被java.lang.ClassNotFoundException和java.lang.NoClassDefFoundError这两个错误迷惑不清,尽管他们都与Java classpath有关,但是他们完全不同。NoClassDefFoundError发生在JVM在动态运行时,根据你提供的类名,在classpath中找到对应的类进行加载,但当它找不到这个类时,就发生了java.lang.NoClassDefFoundError的错误,而ClassNotFoundException是在编译的时候在classpath中找不到对应的类而发生的错误。ClassNotFoundException比NoClassDefFoundError容易解决,是因为在编译时我们就知道错误发生,并且完全是由于环境的问题导致。而如果你在J2EE的环境下工作,并且得到NoClassDefFoundError的异常,而且对应的错误的类是确实存在的,这说明这个类对于类加载器来说,可能是不可见的。

其实是jar包已经导进来了,但运行时找不到。

如果只是在eclipse上运行一个程序,直接点击项目-build path常规导入就行,这时eclipse会自动构建classpath,但当项目运行在服务器上时,正确的做法是,将jar包放入Web-Inf下的lib中,再右键lib进行build path,这时lib中的jar包也会自动被放入referenced libraries中 。

最后

以上就是背后向日葵为你收集整理的Java Web解决已经导入了jar包 却仍出现 java.lang.NoClassDefFoundError的问题的全部内容,希望文章能够帮你解决Java Web解决已经导入了jar包 却仍出现 java.lang.NoClassDefFoundError的问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部