启动tomcat,发现功能异常,检查日志后,发现有以下一段错误记录:
validateJarFile(E:\workspace\gzmetro\webapp\WEB-INF\lib\servlet-api-2.4.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
错误原因:
tomcat的lib目录下已经有Servlet.class这个类了,工程目录下的lib的的某些jar包里又有,导致加载失败。
解决方案:
清楚工程lib下多余的jar包。
附:
tomcat类加载顺序(引用:http://my.unix-center.net/~Zianed/?p=1026)
Tomcat下的文件目录
/bin:存放启动和关闭tomcat的脚本文件;
/conf:存放tomcat的各种配置文件,比如:server.xml
/server/lib:存放tomcat服务器所需要的各种jar文件(jar文件只可被tomcat 服务器访问)
/server/webapps:存放tomcat自带的两个web应用:admin应用和manager应用。
/common/lib:存放tomcat服务器以及所有web应用都可以访问的jar文件夹(web和tomcat服务器都可访问此jar)
/shared/lib:存放web都可访问的jar文件。(可以被所有的web访问,但不能被tomcat访问)
/logs:存放tomcat的日志文件
/webapps:当发布web应用时,默认情况下把web应用文件放于此目录下
/work:tomcat把由jsp生成的Servlet放于此目录
另:在web应用中,WEB-Inf目录下,也可以建立lib子目录,在此子目录下可以存放各种jar文件,这些jar文件只能被当前web应用访问。其中,在web-
inf目录下的lib与classes目录,Tomcat类装载器先装载classes目录下的类,再装载lib目录下的类。因为类同名时,classes优先。
其中jsp运行时,查找class的顺序为:项目文件夹(WEB-INF\lib)—>容器文件夹(tomcat\common\lib)—>jdk文件夹(jdk\jre\lib\ext)
Tomcat是一种向上寻找的层次结构,也有向下的,或者是可配置的。
Tomcat的class加载的优先顺序一览
————-
1.最先是$JAVA_HOME/jre/lib/ext/下的jar文件。
2.环境变量CLASSPATH中的jar和class文件。
3.$CATALINA_HOME/common/classes下的class文件。
4.$CATALINA_HOME/commons/endorsed下的jar文件。
5.$CATALINA_HOME/commons/i18n下的jar文件。
6.$CATALINA_HOME/common/lib 下的jar文件。(JDBC驱动之类的jar文件可以放在这里,避免配置好数据源却找不到JDBC Driver的情况。)
7.$CATALINA_HOME/server/classes下的class文件。
8.$CATALINA_HOME/server/lib/下的jar文件。
9.$CATALINA_BASE/shared/classes 下的class文件。
10.$CATALINA_BASE/shared/lib下的jar文件。
11.各自具体的webapp /WEB-INF/classes下的class文件。
12.各自具体的webapp /WEB-INF/lib下的jar文件。
class的搜寻顺序如下
————-
/WEB-INF/classes of your web application
/WEB-INF/lib/*.jar of your web application
$CATALINA_HOME/common/classes
$CATALINA_HOME/common/endorsed/*.jar
$CATALINA_HOME/common/i18n/*.jar
$CATALINA_HOME/common/lib/*.jar
$CATALINA_BASE/shared/classes
$CATALINA_BASE/shared/lib/*.jar
————–
因此放在不同webapp里的class文件,会被classloader加载成不同的实例。
在不同的webapp加载相同类名的类互不影响。
但是注意,以下包名开头的class例外:
javax.*
org.xml.sax.*
org.w3c.dom.*
org.apache.xerces.*
org.apache.xalan.*
ps,注意.在各个jar中的\META-INF\MAINFEST.MF文件里Class-Path键值对,也会提供jar的加载优先顺序。
例如某jar的MAINFEST.MF内容如下:
Manifest-Version: 1.0
Created-By: Zianed
Class-Path: commons-beanutils.jar
Class-Path: commons-collections.jar
Class-Path: commons-dbcp.jar
Class-Path: commons-digester.jar
Class-Path: commons-logging.jar
Class-Path: commons-pool.jar
Class-Path: commons-services.jar
Class-Path: commons-validator.jar
Class-Path: jakarta-oro.jar
Main-Class: Test
那么在加载这个jar的时候,会先在此jar所在目录下依次先加载commons-beanutils.jar,commons-collections.jar等jar文件。
在不同的地方放置jar和class可能会产生意想不到的后果,尤其是不同版本的jar文件,因此在实际应用部署web应用时候要特别留心.
例如 使用javamail常见的一个出错信息:
javax.mail.NoSuchProviderException: No provider for smtp
其真实原因就很可能如下:
在不同的加载jar的目录下放置了不同版本的mail.jar,比如一个是javamail1.3.1的mail.jar
在D:\jakarta-tomcat-5.5.8\common\lib下,而另外一个是javamail1.3.2的mail.jar在
D:\jakarta-tomcat-5.5.8\webapps\mialtest\WEB-INF/lib下,
那么mialtest中使用到javamail进行邮件发送的时候,便会出现No provider for smtp的错误。
分享到:
相关推荐
cannot be cast to javax.servlet.... Offending class: javax/servlet/Servlet.class 然后输出错误: 严重: Exception starting filter encodingFilter java.lang.ClassCastException: org.springframework.web.f
Offending resource: class path resource [beans.xml] at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:70) 由于缺少依赖包 aspectjweaver-1.6.12...
《Spring Framework 4.0.6.RELEASE:深入解析与应用》 Spring Framework作为Java开发中的核心框架,自诞生以来就备受开发者喜爱。4.0.6.RELEASE是Spring4的一个稳定版本,它在功能、性能和兼容性上都有着显著的提升...
The SQL Window will now navigate to the offending cell in the result set after an insert or update with a column-specific error. The rowid column is now omitted when exporting a result set grid in SQL...
#### 一、SSH简介及重要性 SSH(Secure Shell)是一种网络协议,用于计算机之间的加密登录。它为数据通信提供了安全性的保障,尤其是在远程登录场景下,能够有效防止数据窃听、篡改等安全问题。在现代互联网环境中,...
The SQL Window will now navigate to the offending cell in the result set after an insert or update with a column-specific error. The rowid column is now omitted when exporting a result set grid in SQL...
The SQL Window will now navigate to the offending cell in the result set after an insert or update with a column-specific error. The rowid column is now omitted when exporting a result set grid in SQL...
The SQL Window will now navigate to the offending cell in the result set after an insert or update with a column-specific error. The rowid column is now omitted when exporting a result set grid in SQL...
The SQL Window will now navigate to the offending cell in the result set after an insert or update with a column-specific error. The rowid column is now omitted when exporting a result set grid in SQL...
The SQL Window will now navigate to the offending cell in the result set after an insert or update with a column-specific error. The rowid column is now omitted when exporting a result set grid in SQL...
Contents Module Overview 1 Lesson 1: Memory 3 Lesson 2: I/O 73 Lesson 3: CPU 111 Module 3: Troubleshooting Server Performance ...Troubleshooting server performance-based support calls requires ...
Offending text: iarbuild.exe $SIMPLELINK_CC13X2_26X2_SDK_INSTALL_DIR$/kernel/tirtos/builds/CC1352R1_LAUNCHXL/release/iar/tirtos_builds_CC1352R1_LAUNCHXL_release.ewp Debug -log all 使用CCS提示的...
Troubleshooting with Wireshark: Locate the Source of Performance Problem ) By Laura Chappell Foreword by Gerald Combs Edit by Jim Aragon This book focuses on the tips and techniques used to identify ...
8. 动名词:在短语"at the risk of offending people"中,"offending"是动名词形式,表示冒犯他人的风险。 9. 宾语补足语:在句子"I'd like to introduce myself to Prof. Liu"中,"introduce"是动词不定式,作...
该算法简单的实现了SVM算法的基本原理,利于读者初步理解 学习SVM算法
Process Tamer solves this problem by identifying such these degenerate conditions and temporarily reducing the priority of the offending processes in order to allow your system to respond to other ...
快取猴子 太热了。 构建设置 # install dependencies npm install # serve with hot reload at localhost:9080 npm run dev # build electron application for production ...xattr -lr ./ // fix them find
By the end of this book, you’ll know how to analyze traffic, find patterns of various offending traffic, and secure your network from them. What You Will Learn Configure Wireshark 2 for effective ...
1. **词汇应用**:在填词练习中,出现了一些英语词汇,如"亲戚"(relatives)、"小册子"(brochure)、"像"(resemble)、"祝贺"(congratulate)、"无意的"(unconscious)、"冒犯"(offence)、"明确的"(explicit...
An concluded sportsman offending so provision mr education. Bed uncommonly his discovered for estimating far. Equally he minutes my hastily. Up hung mr we give rest half. Painful so he an comfort is ...