Tomcat 6 HTTP-аутентификация

У меня есть веб-приложение, которое я пытаюсь развернуть в Tomcat 6.0.9 на Redhat Enterprise 5.2. Мне было предоставлено j2ee-1.4.jar для размещения в каталоге /lib. Я обнаружил, что после перезапуска tomcat возникло несколько проблем. Но также обратите внимание, что удаление вышеуказанной банки устраняет проблемы, перечисленные ниже. Мне сказали, что я должен включить j2ee-1.4.jar, но я не знаю, какие шаги мне нужно выполнить, чтобы сделать эту работу.

 First, when attempting to login to Tomcat Manager I am no longer presented with a login dialog. It jumps right to the 401 page stating "This request requires HTTP authentication ()"

Журнал менеджера для этого события показывает следующее:

 org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet jsp threw exception
javax.servlet.ServletException: javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ServletContext;)Ljavax/servlet/jsp/JspApplicationContext;
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:274)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:860)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:687)
        at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:471)
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:403)
        at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
        at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:424)
        at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:343)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:144)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:212)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
        at java.lang.Thread.run(Thread.java:662)

Во-вторых, я заметил, что пример JSP для базовых сравнений генерирует это:

org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: Unable to compile class for JSP:


Stacktrace:
        at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:85)
        at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
        at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:415)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:308)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:273)
        at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:308)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:860)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:212)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
        at java.lang.Thread.run(Thread.java:662)

Любая помощь будет принята с благодарностью

Спасибо

Ответы

Ответ 1

Удалите этот JAR файл. Он не принадлежит вашей библиотеке webapp. Это конкретный JAR файл Glassfish, содержащий устаревшую спецификацию API сервлета, которая будет сталкиваться только с собственными JAR файлами Tomcat. Это исключение является результатом конфликта в версиях классов, найденных в пути к классам:

javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ServletContext;)Ljavax/servlet/jsp/JspApplicationContext;

Указанный метод является новым в Servlet 2.5/JSP 2.1. Tomcat 6.0 сам по себе является контейнером Servlet 2.5, но включенный j2ee-1.4.jar имеет версию Servlet 2.4/JSP 2.0.

Несмотря на то, что если версия вашего сервлета JAR файла Servlet была одинаковой, вы никогда не должны включать JAR файлы, специфичные для сервлетов, в вашей библиотеке webapp. Это сделает ваш webapp неспортивным.

Если вы сделали это, чтобы обойти ошибки компиляции в неразрешенных классах javax.servlet.*, вам следует решить это по-другому. Вы должны, например, просто указать собственный файл servlet-api.jar Tomcat в пути класса компиляции. Например.

javac -cp .;/path/to/Tomcat/lib/servlet-api.jar com/example/MyServlet.java

Или, если вы используете IDE, например Eclipse, вы должны установить servletcontainer как Target Runtime в свойствах проекта. Таким образом, Eclipse автоматически примет все свои библиотеки в пути к реализации проекта.

См. также:


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

Ответ 2

в вашем пути сборки будет дублировать запись в файле servlet-api.jar. удалите дублируемую запись или она отсутствует в ur buildpath. после выполнения этого чистого проекта ур и запускать