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

如何在JAX-RS REST应用web.xml中声明多包及解决404问题

解决JAX-RS应用多包配置导致的HTTP 404错误

嘿,我来帮你搞定这个问题!你遇到的404错误是因为配置了两个独立的Jersey Servlet实例,且都映射到了/*路径——Servlet容器无法确定该把请求交给哪个Servlet处理,最终导致其中一个包的资源无法被正确识别和路由。

问题根源

你原本配置了两个ServletContainer:一个扫描cuLampPost包,另一个扫描radar包,两者都映射到/*。这种情况下,容器只会优先使用第一个声明的Servlet,第二个Servlet根本没有机会处理请求,所以radar包下的REST资源就会出现404;甚至如果请求匹配逻辑混乱,两个包的资源都可能无法正常访问。

正确解决方案

Jersey提供了更简单的方式:在同一个Servlet的jersey.config.server.provider.packages参数中,用逗号(或分号)分隔多个需要扫描的包,不需要配置多个Servlet。修改后的web.xml代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
    <display-name>LampPostZ12</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>lamppost12</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <!-- 用逗号分隔多个需要扫描的包 -->
            <param-value>cuLampPost, radar</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>lamppost12</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

为什么这样可行?

Jersey的ServletContainer会自动扫描param-value中所有逗号分隔的包,将其中的JAX-RS资源(比如标注了@Path的类)注册到应用中,这样两个包的资源都能被正确识别和处理,不会出现请求冲突的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:21:40