tomcat6 - Web 应用程序 WAR 文件中包含的自定义 Tomcat Valve

标签 tomcat6 classloader catalina context.xml tomcat-valve

我希望实现自定义 Valve 并使用 META-INF/context.xml 对其进行配置。

但目前,在部署期间解析 context.xml 时,Tomcat (6.0.32) 在我的自定义 Valve 实现上因 ClassNotFoundException 而死亡。

我的印象是我遇到了类加载上下文问题,但我不是 100% 确定我理解它。

是不是因为我的类位于 WEB-INF/classes 文件中而找不到我的类,而上下文级别的类加载器由于层次结构而无法定位该类?

提前致谢。

最佳答案

您无法加载 Valve s 来自 webapp 类加载器。如果你看 http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html它显示了可用的类加载器。您必须使用 Bootstrap、System 或 Common 类加载器之一,因为 Valve在创建单个 webapp 类加载器之前处理定义:必须在 webapp 可用之前处理上下文。

将您的 Valve 单独包装在一个 jar 中,并将其复制到 $CATALINA_HOME/lib文件夹,你应该都设置好了。

关于tomcat6 - Web 应用程序 WAR 文件中包含的自定义 Tomcat Valve,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6138396/

相关文章:

java - Tomcat 生命周期异常 LifecycleException : Failed to start component [StandardEngine[Catalina]. StandardHost[localhost].StandardContext

xml - 如何配置tomcat直接提供xml文件

rest - Tomcat v7.0 服务器不读取 context.xml

tomcat6 - org.apache.tomcat.dbcp.dbcp.SQLNestedException : Cannot create JDBC driver of class '' for connect URL 'null'

java - 目录结构错误的 NoClassDefFoundError 解决方法

当我加载 jar 时出现 java.lang.UnsatisfiedLinkError 。

java - 如何配置 Tomcat (Catalina) 以在不重启服务器的情况下部署 Web 应用程序?

tomcat - Tomcat 中的 SL4JF 未显示在日志文件中

tomcat - 部署 .war 重启竞争条件

java - 为什么Class.forName ("Test").getClassLoader()?