Java 来自servlet的NoClassDefFoundError
正在为基本MVC应用程序进行试运行。正在获取类MovieDAO的NoClassDefFoundError MovieDAO位于:com.library.model servlet MovieController位于:com.library.web中 已成功编译Servlet,并正确导入了MovieDAO类 在Tomcat 8.0/webapps/Planner/WEB-INF/classes中复制了目录结构的精确副本(Planner是项目根文件夹)。在web服务器上测试运行期间获取NoClassDefFoundError Servlet代码段:Java 来自servlet的NoClassDefFoundError,java,servlets,noclassdeffounderror,Java,Servlets,Noclassdeffounderror,正在为基本MVC应用程序进行试运行。正在获取类MovieDAO的NoClassDefFoundError MovieDAO位于:com.library.model servlet MovieController位于:com.library.web中 已成功编译Servlet,并正确导入了MovieDAO类 在Tomcat 8.0/webapps/Planner/WEB-INF/classes中复制了目录结构的精确副本(Planner是项目根文件夹)。在web服务器上测试运行期间获取NoClass
package com.library.web;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
import com.library.model.*;
import com.library.model.beans.*;
public class MovieController extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
String selectedMovie = request.getParameter("title");
MovieDAO movieDAO = new MovieDAO();
XML:
完整堆栈跟踪:
6-Jun-2015 10:58:50.665 SEVERE [http-nio-8080-exec-2] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [Movie Index Page] in context with path [/Planner] threw exception [Servlet execution threw an exception] with root cause
java.lang.NoClassDefFoundError: com/library/model/MovieDAO (wrong name: MovieDAO)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2472)
at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:854)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1274)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1157)
at com.library.web.MovieController.doGet(MovieController.java:16)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:617)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1521)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1478)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
显然是目录/包的错误放置问题。有人能指出到底是什么问题吗?您的
MovieDAO
类必须部署到您的应用程序WEB-INF/classes
文件夹或WEB-INF/lib
中的jar中。它可能丢失,从而导致您的NoClassDefFoundError
java.lang.NoClassDefFoundError: com/library/model/MovieDAO (wrong name: MovieDAO)
将此错误分为两部分
java.lang.NoClassDefFoundError:com/library/model/MovieDAO
这表明您的MovieController
正在尝试搜索一个类MovieDAO
,该类具有包声明package com.library.model
(错误名称:MovieDAO)
:基本上,这个名称是找到的类的完全限定类名。这说明它找到了类MovieDAO
,但没有任何包声明
因此,您可以尝试重新编译
MovieDAO
类,并将其放置在类下的正确目录中。同时搜索classes文件夹,查看是否已将其错误地放置在其他目录中,如果找到,则将其删除是否可以共享MovieDAO
类的源代码以及错误的完整堆栈跟踪?看起来MovieDAO
未部署到WEB-INF/classes/com/library/model
whereMovieController
希望找到它我希望你指的是WEB-INF/classes是的,我指的是WEB-INF/classes。抱歉。在查询Amit.rk3中更新了MovieDAO代码段。该.class文件位于/classes下。您确定正在运行您认为正确的代码吗?您是否有多个Tomcat安装?
6-Jun-2015 10:58:50.665 SEVERE [http-nio-8080-exec-2] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [Movie Index Page] in context with path [/Planner] threw exception [Servlet execution threw an exception] with root cause
java.lang.NoClassDefFoundError: com/library/model/MovieDAO (wrong name: MovieDAO)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2472)
at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:854)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1274)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1157)
at com.library.web.MovieController.doGet(MovieController.java:16)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:617)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1521)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1478)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
java.lang.NoClassDefFoundError: com/library/model/MovieDAO (wrong name: MovieDAO)