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

如何在WAR包内配置Jetty专属web.xml设置并兼容原有容器

Jetty双容器兼容JSP配置解决方案

完全可以通过WAR包内的Jetty专属配置文件实现需求,且不会影响其他容器运行,你之前的overrideDescriptor方案无效是因为配置时机错误,具体解决方案如下:

方案:使用WEB-INF/jetty-web.xml直接配置JSP Servlet

WEB-INF/jetty-web.xml是Jetty专属的Web应用扩展配置文件,仅Jetty会识别并加载该文件,其他Servlet容器会直接忽略,完全满足双容器兼容、仅WAR包层面配置的要求。

配置示例

把jetty-web.xml放在WAR包的WEB-INF目录下,内容参考如下:

<?xml version="1.0"  encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "https://www.eclipse.org/jetty/configure_10_0.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
  <!-- 查找名为jsp的Servlet,替换实现类为Jetty专属的JspServlet -->
  <Call name="getServletHandler">
    <Call name="getServlet" id="jspServlet">
      <Arg>jsp</Arg>
    </Call>
    <Set name="servletClass">org.eclipse.jetty.jsp.JettyJspServlet</Set>
    <!-- 添加自定义JSP初始化参数,可重复该节点配置多个参数 -->
    <Call name="setInitParameter">
      <Arg>yourCustomParam</Arg>
      <Arg>paramValue</Arg>
    </Call>
    <Call name="setInitParameter">
      <Arg>anotherParam</Arg>
      <Arg>anotherValue</Arg>
    </Call>
  </Call>
</Configure>

配置说明

  • 上述配置会自动找到原有web.xml中名为jsp的Servlet,将其实现类替换为Jetty专属的JettyJspServlet,同时添加你需要的自定义初始化参数,原有web.xml中的通用配置不受影响。
  • 请根据你使用的Jetty版本调整头部的DTD声明,避免版本不兼容问题。

为什么之前的overrideDescriptor配置无效

overrideDescriptor是JettyWebAppContext的属性,需要在Web应用上下文初始化的早期阶段配置,而jetty-web.xml本身就是上下文加载过程中执行的补充配置,在这个阶段再设置overrideDescriptor已经过了描述符加载的时机,因此会被忽略。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:36:03