java - 噩梦 : Upgrading Tomcat 5. 5 到 6.0

标签 java tomcat6 tomcat5.5

我正在尝试将运行良好的嵌入式 Tomcat 5.5 升级到 Tomcat 6.0。我知道我需要做的就是用 6.0 替换 Tomcat 5.5 jar。 我就是这么做的。

所以我更换了以下 jar :

catalina-5.0.28.jar catalina-5.5.9.jar catalina-optional-5.5.9.jar 
commons-el.jar commons-modeler-1.1.0.jar jasper-compiler-jdt.jar 
jasper-compiler.jar jasper-runtime.jar jmx-5.0.28.jar jsp-api-2.0.jar 
naming-factory.jar naming-resources.jar servlet-api-2.4.jar 
servlets-default.jar tomcat-coyote.jar tomcat-http.jar tomcat-util.jar

与:

annotations-api.jar  catalina.jar    jasper.jar         tomcat-dbcp.jar
catalina-ant.jar     el-api.jar      jsp-api.jar        tomcat-i18n-es.jar
catalina-ha.jar      jasper-el.jar   servlet-api.jar    tomcat-i18n-fr.jar
catalina-tribes.jar  jasper-jdt.jar  tomcat-coyote.jar  tomcat-i18n-ja.jar
tomcat-juli.jar

一旦启动服务器,我就会在 INFO 级别的日志中收到以下消息:

INFO: Starting Servlet Engine: Apache Tomcat/6.0.29
Dec 31, 2010 6:04:18 AM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(/usr/local/blah/blue/./WEB-INF/lib/servlet-api.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

基于this说明,我需要删除一个具有冲突 Servlet.class 的 jar 文件。我向上帝发誓,没有其他冲突的 jar 文件,我在系统范围内搜索 Servlet.class,它只匹配 servlet-api.jar。

我还下载了 javaee.jar 并将其替换为 servlet-api.jar,效果相同。

尝试了很多这些东西后,我没有太多可看的,所以将 tomcat 日志记录级别设置为 ALL。在日志中,我可以看到它正在尝试检查它正在加载的每个 jar 中的 Servlet.class,直到找到 servlet-api.jar 并在找到 servlet-api.jar 后立即抛出“jar not loaded”消息.见下文:

FINE:  Checking for javax/servlet/Servlet.class
Jan 2, 2011 7:39:33 AM org.apache.catalina.loader.WebappLoader setRepositories
FINE: Deploy JAR /WEB-INF/lib/servlet-api.jar to /usr/local/blah/blue/./WEB-INF/lib/servlet-api.jar
Jan 2, 2011 7:39:33 AM org.apache.catalina.loader.WebappClassLoader addJar
FINE: addJar(/WEB-INF/lib/servlet-api.jar)
Jan 2, 2011 7:39:33 AM org.apache.catalina.loader.WebappClassLoader validateJarFile
FINE:  Checking for javax/servlet/Servlet.class
Jan 2, 2011 7:39:33 AM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(/usr/local/blah/blue/./WEB-INF/lib/servlet-api.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
Jan 2, 2011 7:39:33 AM org.apache.catalina.loader.WebappLoader setRepositories

更新 我可以通过将 servlet-api.jar 放在单独的文件夹(如 $CATALINA_HOME/common/lib)中来消除上述“jar not added”错误。但是,当我点击 URL 时,GUI 仍然显示空白(错误 404):(。点击 URL 时的日志消息如下所述。 更新结束

但是请注意,Tomcat 已成功启动! 一旦我在浏览器上点击 URL,我就会得到空白页(这可能只是我的情况,我猜是因为我的 web.xml,与大多数人有点不同。互联网上的其他人得到的是错误 404 .) 带有以下日志语句(最好的级别)

Jan 2, 2011 9:40:01 AM org.apache.catalina.connector.CoyoteAdapter parseSessionCookiesId
FINE:  Requested cookie session id is 0FBA716E3F9B0147C3AF7ABAE3B1C27B
Jan 2, 2011 9:40:01 AM org.apache.catalina.authenticator.AuthenticatorBase invoke
FINE: Security checking request GET /login.jsp
Jan 2, 2011 9:40:01 AM org.apache.catalina.realm.RealmBase findSecurityConstraints
FINE:   Checking constraint 'SecurityConstraint[protected]' against GET /login.jsp --> false
Jan 2, 2011 9:40:01 AM org.apache.catalina.realm.RealmBase findSecurityConstraints
FINE:   Checking constraint 'SecurityConstraint[protected]' against GET /login.jsp --> false
Jan 2, 2011 9:40:01 AM org.apache.catalina.realm.RealmBase findSecurityConstraints
FINE:   Checking constraint 'SecurityConstraint[protected]' against GET /login.jsp --> false
Jan 2, 2011 9:40:01 AM org.apache.catalina.realm.RealmBase findSecurityConstraints
FINE:   Checking constraint 'SecurityConstraint[protected]' against GET /login.jsp --> false
Jan 2, 2011 9:40:01 AM org.apache.catalina.realm.RealmBase findSecurityConstraints
FINE:   No applicable constraint located
Jan 2, 2011 9:40:01 AM org.apache.catalina.authenticator.AuthenticatorBase invoke
FINE:  Not subject to any constraint
Jan 2, 2011 9:40:01 AM org.apache.catalina.core.StandardWrapper allocate
FINEST:   Returning non-STM instance

我不确定上面的日志消息是否重要,但我在这里全面披露。

虽然有一件有趣的事情,但我在 WEB-INF 文件夹之外手动创建了一个仅包含“hellooo”的虚拟 jsp 文件(此文件没有安全限制)。该文件可访问并且可以显示。但是,我所有的 jsp 和类都在 WEB-INF 中(当然)。

厌倦了这个问题,请帮我解决一下。我已经为此花费了 20-24 小时,但没有成功。

有什么指点方向提示吗?

最佳答案

servlet-api.jar 绝对是运行tomcat embedded 所必需的。但是,这里似乎是一个类加载器问题。 webapp 的类加载器不能“直接”访问 servlet.jar,只能通过其父类加载器。

如果你只是替换了 jars,那么 6.0 和 5.5 的 ClassLoaders 肯定有细微的差别,但我不能说在哪里。

关于java - 噩梦 : Upgrading Tomcat 5. 5 到 6.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4577849/

相关文章:

java - TCP 上的多个 channel ?

java - BigBlueButton 有文件共享模块吗?

java - Tomcat 6.0 中的基本身份验证和 SSL 配置失败

java - 严重 : error registering connector Tomcat 5. 5

java.net.BindException : Address already in use:8080

java - 在相册或图库中创建一个文件夹,如 WhatsApp 图像、WhatsApp 视频

java - 尝试使用 FireBase 查看 Activity 中的 "Followers"和 "Following"时出现 NullPointerException

java - 创建 PShape 时,处理库中出现 NullPointerException

java - 配置 View 未找到异常以显示 404

mysql - 是什么导致 Hibernate SQL 查询异常?