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

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

最近做本科毕业设计的时候,需要做一点Java web,在使用上传文件与servlet接收文件时,用到了两个jar包:Commons FileUploadCommons 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中 。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值