tomcat 6 HTTP身份validation

我有一个Web应用程序,我正在尝试在Redhat Enterprise 5.2上的Tomcat 6.0.9中部署。 我被给了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) 

其次,我注意到Basic Comparisons的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) 

任何帮助将不胜感激

谢谢

删除该JAR文件。 它不属于您的webapp库。 它是一个Glassfish特定的JAR文件,包含过时的Servlet API规范,该规范只会与Tomcat自己的JAR文件发生冲突。 此exception是类路径中找到的类版本冲突的结果:

 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版本相同,也不应该在webapp的库中包含特定于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将自动将其所有库都放在项目的构建路径中。

也可以看看:

  • 如何在Eclipse项目中导入javax.servlet API?

一旦修复并具有100%确定的干净类路径,那么您应该专注于以正确的方式解决实际问题而不是污染类路径。 如果你卡住了,只需在Stackoverflow上问一个新问题。

在构建路径中的servlet-api.jar中会有重复的条目。 删除重复的条目或从您的构建路径中丢失。 做完这个干净你的项目并运行