使用Tomcat的Manager部署servlet是出现java.lang.NoClassDefFoundError异常的解决方法

使用Tomcat的Manager部署应用程序(servlet)时,可能会出现以下异常(视Tomcat版本):

javax.servlet.ServletException: Servlet execution threw an exception
...
java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream
...
java.lang.ClassNotFoundException: org.apache.commons.io.output.DeferredFileOutputStream
...

详细原因分析可以参见[1],简而言之,是因为当commons-fileupload包从版本1.0升到1.1时,DeferredFileOutputStream.class被移走了。如果Tomcat使用1.1及其以上版本,你得为它找到这个类。



解决方法

进入目录:$CATALINA/server/webapps/manager/WEB-INF/lib,检查是否存在三个包:

  • commons-io
  • catalina-manager.jar
  • commons-fileupload.jar
如果缺少commons-io,拷一个过来。