Tomcat java.lang.NoClassDefFoundError: Could not initialize class

Tomcat java.lang.NoClassDefFoundError: Could not initialize class

完整错误:java.lang.NoClassDefFoundError: Could not initialize class lt.maze.dao.DAO

我的 LoginServlet 使用了 class DAO。编译部署好了,我查了WEB-INF/classesDAO.class 存在。

为什么没有加载?我应该手动将它们添加到我的 classpath 吗? (我有清单文件来加载我的属性文件)。

LoginServlet.java:

@WebServlet(name = "LoginServlet", urlPatterns = { "/login" })
public class LoginServlet extends HttpServlet {

@Override
public void init() throws ServletException
{
    System.out.println("System. out. Its online.");
    getServletContext().log("LoginServlet initialised");
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    getServletContext().log("Http request. Request URI: " + request.getRequestURI());
    System.out.println("Http request. Request URI: " + request.getRequestURI());
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    if(username == null || password == null) {
        response.sendError(401);
    } else {
        UserDAO userDAO = DAO.getUserDAO();
        User user = userDAO.find(username, password);
        if(user == null) {
            response.sendError(401, "Invalid username or password");
        } else {
            String sessionToken = SessionTokens.getSessionToken();
            response.addCookie(new Cookie("session-token", sessionToken));
            getServletContext().log("Valid connection. token:"+sessionToken);
        }
    }

}

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    getServletContext().log("Request received via GET.");
    System.out.println("Requeswt received via GET");
}

}

完整堆栈跟踪:

18-May-2015 14:49:35.133 SEVERE [http-nio-8080-exec-1]       org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [LoginServlet] in context with path [/ChatApp] threw exception [Servlet execution threw an exception] with root cause
java.lang.NoClassDefFoundError: Could not initialize class lt.maze.dao.DAO
at lt.maze.LoginServlet.doPost(LoginServlet.java:38)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
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:610)
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.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1517)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1474)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)

如果异常从 class 或静态初始值设定项的构造函数传播出去,那么您还会得到 java.lang.NoClassDefFoundError: Could not initialize class ... .