Tomcat 7 - java.lang.NoClassDefFoundError: Не удалось инициализировать класс javax.servlet.http.Cookie - PullRequest
2 голосов
/ 20 января 2012

У меня есть приложение, которое использует j_security для аутентификации на основе форм.Когда приложение развертывается впервые (или перезапускается кот), пользователь получает это исключение при попытке доступа к защищенному контенту напрямую (без входа в систему).

GRAVE: Servlet.service() for servlet [default] in context with path [/mycontext]  threw exception [Could not initialize class javax.servlet.http.Cookie] with root cause
    java.lang.NoClassDefFoundError: Could not initialize class javax.servlet.http.Cookie
    at org.apache.catalina.core.ApplicationSessionCookieConfig.createSessionCookie(ApplicationSessionCookieConfig.java:127)
    at org.apache.catalina.connector.Request.doGetSession(Request.java:2875)
    at org.apache.catalina.connector.Request.getSession(Request.java:2307)
    at org.apache.catalina.connector.RequestFacade$GetSessionPrivilegedAction.run(RequestFacade.java:216)
    at org.apache.catalina.connector.RequestFacade$GetSessionPrivilegedAction.run(RequestFacade.java:205)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:894)
    at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:909)
    at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:238)
    at com.mycompany.myfilter.SaasComponentImpl.getTenantId(SaasComponentImpl.java:284)

Исключительное поведение - перенаправить пользователя в форму входа, а когда пользователь входит в систему, перенаправить его на запрошенный защищенный ресурс.

Но странная вещь заключается в том, что это работает правильно, если первый запрос, отправленный на перезагруженный сервер, запрашивает форму входа !!!Похоже, что после этого tomcat правильно находит и загружает класс cookie, а затем все запросы обрабатываются должным образом.

Почему tomcat не может найти класс Cookie, который наверняка находится в lib / servlet-api.jar?ИМХО, нет метра, когда этот класс запрашивается для загрузки в первый раз ... он должен быть там для любого клапана, сервлета, фильтра и т. Д ... Я прав?

PS: Это былонормально работал до переноса приложения с tomcat 6.

1 Ответ

0 голосов
/ 10 октября 2012

Убедитесь, что в вашем приложении WEB-INF / lib нет файла servlet-api.jar.

Если у вас есть, он будет загружен двумя разными загрузчиками классов и может привести к странным сообщениям об ошибках, таким как у вас.

Кроме этого, попробуйте запустить приложение в новой установке tomcat.

...