首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tomcat 6 HTTP身份验证

tomcat 6 HTTP身份验证
EN

Stack Overflow用户
提问于 2011-08-09 23:29:55
回答 2查看 14.7K关注 0票数 2

我有一个web应用程序,我正试图在Redhat Enterprise 5.2上的Tomcat 6.0.9中部署它。我被指定将j2ee-1.4.jar放在/lib目录中。我发现重启tomcat后出现了几个问题。但也要注意,删除上面的jar可以修复下面列出的问题。有人告诉我必须包含j2ee-1.4.jar,但我不知道需要完成哪些步骤才能实现这一点。

代码语言:javascript
复制
 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 ()"

此事件的管理器日志显示以下内容:

代码语言:javascript
复制
 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示例生成以下代码:

代码语言:javascript
复制
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)

任何帮助都将不胜感激

谢谢

EN

回答 2

Stack Overflow用户

发布于 2011-08-09 23:45:43

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

代码语言:javascript
复制
javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ServletContext;)Ljavax/servlet/jsp/JspApplicationContext;

The mentioned method是Servlet2.5/JSP2.1中的新特性。Tomcat 6.0本身是一个Servlet 2.5容器,但是包含的j2ee-1.4.jar是Servlet 2.4 /JSP2.0版本。

即使您的JAR文件的Servlet API版本相同,也不应该在webapp的库中包含特定于servletcontainer的JAR文件。这会让你的webapp变得不可移植。

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

代码语言:javascript
复制
javac -cp .;/path/to/Tomcat/lib/servlet-api.jar com/example/MyServlet.java

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

另请参阅:

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

票数 4
EN

Stack Overflow用户

发布于 2013-08-02 15:35:22

在构建路径中的servlet-api.jar中将有重复的条目。删除重复条目,或者该条目在您的buildpath中丢失。在完成这项工作后,请运行

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6998747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档