Внутренняя ошибка Tomcat - PullRequest
1 голос
/ 13 июня 2011

У меня есть AuthorizationServlet, который вызывается, когда пользователь нажимает кнопку на странице входа. Вот фрагмент кода метода doPost сервлета:

        AuthorizationBean bean = new AuthorizationBean();
        String login = (String) request.getSession().getAttribute("login");
        String password = (String) request.getSession().getAttribute("password");
        try {
            UserType type = bean.getRoleOfUser(login, password);
            switch(type) {
                ...
            }
        } catch (DaoException ex) {
            throw new ServletException(ex.getMessage());
        }

Я пропустил некоторый код, потому что это не относится к проблеме. На самом деле, DaoException может быть брошено только в этой строке UserType type = bean.getRoleOfUser(login, password); В методе getRoleOfUser я делаю соединение с базой данных, используя пул соединений tomcat (описание того, как я получаю соединение, находится в первом посте здесь )

Также вот мой context.xml, который создает ресурс соединения с БД:

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/Project">
    <Resource name="jdbc/Project" auth="Container"
        type="javax.sql.DataSource" maxActive="100"
        maxIdle="30" maxWait="10000"
        username="name"
        password="password"
        driverClassName="oracle.jdbc.driver.OracleDriver"
        url="jdbc:oracle:thin:@127.0.0.1:1521:XE"/>
</Context>

Когда вызывается AuthorizationServlet, я получаю такую ​​ошибку:

javax.servlet.ServletException: Error instantiating servlet class com.tspp.common.AuthorizationServlet
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:864)
    org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
    org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1665)
    java.lang.Thread.run(Thread.java:662)
root cause

java.lang.NoClassDefFoundError: com/tspp/dao/exceptions/DaoException
    java.lang.Class.getDeclaredConstructors0(Native Method)
    java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
    java.lang.Class.getConstructor0(Class.java:2699)
    java.lang.Class.newInstance0(Class.java:326)
    java.lang.Class.newInstance(Class.java:308)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:864)
    org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
    org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1665)
    java.lang.Thread.run(Thread.java:662)
root cause

java.lang.ClassNotFoundException: com.tspp.dao.exceptions.DaoException
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
    java.lang.Class.getDeclaredConstructors0(Native Method)
    java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
    java.lang.Class.getConstructor0(Class.java:2699)
    java.lang.Class.newInstance0(Class.java:326)
    java.lang.Class.newInstance(Class.java:308)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:864)
    org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
    org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1665)
    java.lang.Thread.run(Thread.java:662)

Я попытался отладить его, но отладчик даже не попал в метод doPost сервлетов. На самом деле последние 2 исключения генерируются при запуске программы (до активации сервлета)

Как я могу решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 13 июня 2011

Убедитесь, что у вас есть все ваши классы в WEB-INF/classes

1 голос
/ 13 июня 2011

Ваш класс com/tspp/dao/exceptions/DaoException не найден JVM (System.loadClass() метод) и, следовательно, у вас есть ClassNotFoundException.

Убедитесь, что ваш код скомпилирован и включен в папку WEB-INF\classes вашего проекта. Если он находится в банке, убедитесь, что класс найден в банке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...