You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetty 12加载ResourceServlet出现ClassNotFoundException求助

解决Jetty 12中ResourceServlet类找不到与配置错误问题

问题根源分析

你遇到的ClassNotFoundException本质是类路径缺失或配置参数不符合Jetty 12规则,结合版本架构变化,具体原因如下:

  1. 虽启用ee10-servlet模块,但运行时类路径未实际包含jetty-ee10-servlet的jar包;
  2. baseResource路径配置不符合Jetty 12的资源解析逻辑;
  3. 未配置关键参数导致URL映射与资源路径匹配冲突。

分步解决方案

1. 确保依赖/模块正确加载

  • Maven/Gradle项目:添加与Jetty 12版本一致的jetty-ee10-servlet依赖:
    <!-- Maven示例 -->
    <dependency>
        <groupId>org.eclipse.jetty.ee10</groupId>
        <artifactId>jetty-ee10-servlet</artifactId>
        <version>12.0.7</version> <!-- 替换为你的Jetty版本 -->
        <scope>provided</scope>
    </dependency>
    
  • Jetty Home部署:确保通过命令或配置文件启用ee10-servlet模块:
    # 启动时临时添加模块
    java -jar start.jar --add-modules=ee10-servlet
    # 或持久化到start.ini
    echo "--module=ee10-servlet" >> start.ini
    
    验证:检查运行时类路径中是否存在jetty-ee10-servlet-12.x.x.jar,并确认该jar内包含org.eclipse.jetty.ee10.servlet.ResourceServlet类。

2. 修正web.xml配置

调整参数确保资源路径与URL映射匹配:

<servlet>
    <servlet-name>webapp-servlet</servlet-name>
    <servlet-class>org.eclipse.jetty.ee10.servlet.ResourceServlet</servlet-class>
    <init-param>
        <param-name>dirAllowed</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>baseResource</param-name>
        <param-value>./webapp</param-value> <!-- 指向WAR根目录下的webapp文件夹,去掉末尾斜杠 -->
    </init-param>
    <!-- 关键参数:让ResourceServlet仅处理URL中的pathInfo部分,避免映射冲突 -->
    <init-param>
        <param-name>pathInfoOnly</param-name>
        <param-value>true</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>webapp-servlet</servlet-name>
    <url-pattern>/webapp/*</url-pattern>
</servlet-mapping>
  • baseResource:用./webapp明确指向Web应用根目录下的静态资源文件夹,Jetty会自动解析相对路径;
  • pathInfoOnly:设为true后,ResourceServlet会忽略URL中的servlet路径(即/webapp),仅用pathInfo(即/*部分)匹配资源,确保访问/webapp/css/style.css时,正确读取webapp/css/style.css文件。

3. 关于DefaultServlet的警告

Jetty 12中DefaultServlet被设计为仅用于根路径映射(/*),映射到非根路径会触发警告是正常的设计约束,因此官方建议用ResourceServlet处理非根路径静态资源是正确选择。


内容的提问来源于stack exchange,提问作者rawcode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 18:05:05