HTTP-аутентификация Tomcat 6
У меня есть веб-приложение, которое я пытаюсь развернуть в 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)
Любая помощь будет принята с благодарностью
Спасибо
2 ответа
Удалите этот файл JAR. Он не принадлежит библиотеке вашего веб-приложения. Это специальный JAR-файл Glassfish, содержащий устаревшую спецификацию Servlet 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 API была одинаковой, вы никогда не должны включать в библиотеку вашего веб-приложения JAR-файлы, относящиеся к servletcontainer. Это сделало бы ваше веб-приложение непереносимым.
Если вы сделали это, чтобы обойти ошибки компиляции на нерешенных javax.servlet.*
классы, то вы должны были решить это по-другому. Вы должны, например, просто указать собственный Tomcat servlet-api.jar
файл в classpath времени компиляции. Например
javac -cp .;/path/to/Tomcat/lib/servlet-api.jar com/example/MyServlet.java
Или, если вы используете IDE, такую как Eclipse, вы должны установить servletcontainer в качестве Target Runtime в свойствах проекта. Таким образом, Eclipse автоматически возьмет все свои библиотеки в путь сборки проекта.
Смотрите также:
После того, как вы исправите это и получите чистый путь к классу на 100%, тогда вам следует сосредоточиться на правильном решении реальных проблем, а не загрязнять путь к классам. Если вы застряли, просто задайте новый вопрос здесь, на Stackru.
В пути сборки будет повторяющаяся запись в servlet-api.jar. удалите повторяющуюся запись или она отсутствует в вашем build path. после выполнения этого чистого проекта ур и запустить