采用tomcat的 tomcat-coyote.jar 包上传文件功能时,报如题异常:
Caused by: java.lang.ClassNotFoundException: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException
完整异常:
java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.xxx.servlet.Handles.doGet(Handles.java:136) at com.xxx.servlet.Handles.doPost(Handles.java:206) at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:196) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:661) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:698) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:364) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:624) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:831) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1673) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.NoClassDefFoundError: org/apache/tomcat/util/http/fileupload/FileUploadBase$SizeLimitExceededException at com.xxx.web.Xxxx.xxxx(Xxxx.java:75) at com.xxx.service.Xxxx.xxxxxxxxxxx(Xxxx.java:207) ... 30 more Caused by: java.lang.ClassNotFoundException: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1415) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1223) ... 32 more
害得笔者找 Xxxx.java:75 里调用的Mmm.mm方法,一行一行代码看,删除,查看引入,最后才找到问题所在。
(已知Xxxx.java:75行有问题,然后75行调用了Mmm的mm方法,该Mmm没有出现在问题描述里,即没有报第几行,故估摸是引入出问题了,即import某class)
在 apache-tomcat-8.5.43 里没有问题,在 apache-tomcat-8.5.73
抛异常,所以:apache-tomcat-8.5.73的jar包有问题。
即:你引入了新版本jar包里没有的类
- 更新/还原 Tomcat版本;
- 去掉对应引入,寻找可替补的方案;
在如eclipse编辑器中,使用没有类的jar包的tomcat,代码会报红~



