【问题标题】:tomcat 6 HTTP authenticationtomcat 6 HTTP 身份验证
【发布时间】:2011-10-23 08:20:18
【问题描述】:

我尝试在 Redhat Enterprise 5.2 上的 Tomcat 6.0.9 中部署一个 Web 应用程序。我得到了 j2ee-1.4.jar 放在 /lib 目录中。我发现重启tomcat后出现了几个问题。但还要注意,删除上面的 jar 可以解决下面列出的问题。我被告知我必须包含 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)

任何帮助将不胜感激

谢谢

【问题讨论】:

    标签: java tomcat servlets


    【解决方案1】:

    删除那个 JAR 文件。它确实属于您的网络应用程序库。这是一个 Glassfish 特定的 JAR 文件,其中包含一个过时的 Servlet API 规范,它只会与 Tomcat 自己的 JAR 文件发生冲突。此异常是类路径中的类版本冲突的结果:

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

    The mentioned method 是 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 版本相同,您也不应该在您的 web 应用程序库中包含特定于 servletcontainer 的 JAR 文件。它会使你的 webapp 不可移植。

    如果您这样做是为了规避未解决的javax.servlet.* 类的编译错误,那么您应该以不同的方式解决这个问题。例如,您应该在编译时类路径中指向 Tomcat 自己的 servlet-api.jar 文件。例如

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

    或者,如果您使用 Eclipse 之类的 IDE,您应该在项目的属性中将 servletcontainer 设置为 Target Runtime。这样 Eclipse 将自动将其所有库放入项目的构建路径中。

    另见:


    一旦解决了这个问题并 100% 确定有一个干净的类路径,那么您应该专注于以正确的方式解决实际问题,而不是污染类路径。如果您遇到问题,只需在 Stackoverflow 上提出一个新问题即可。

    【讨论】:

      【解决方案2】:

      在您的构建路径中的 servlet-api.jar 中会有重复的条目。删除重复的条目,或者它从你的构建路径中丢失。在完成这个清理你的项目并运行之后

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-04
        • 2021-10-09
        • 2011-12-25
        • 1970-01-01
        • 2012-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多