我正在尝试将完美运行的嵌入式 Tomcat 5.5 升级到 Tomcat 6.0。我知道我需要做的就是用 6.0 替换 Tomcat 5.5 罐子。这就是我所做的。
所以我更换了以下罐子:
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
根据这个解释,我需要删除一个 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 文件夹之外手动创建了一个仅包含“helloooo”的虚拟 jsp 文件(此文件没有安全限制)。该文件是可访问的并且可以显示。但是,我所有的 jsp 和类都在 WEB-INF(当然)内。
厌倦了这个问题,请帮我解决它。我已经花了 20-24 小时来解决这个问题,但没有成功。
任何指针方向提示线索?