如何在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
相关产品推荐
相关产品推荐

