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

Spring Boot集成Jetty与Jersey时静态资源服务及路径配置问题

问题1:src/main/static公开静态资源无法访问

这个问题通常是Jersey Servlet默认匹配根路径,覆盖了Spring MVC负责处理静态资源的Servlet导致的,两种解决方式可选:

  • 开启Jersey 404转发配置:在application.properties中添加spring.jersey.init.jersey.config.servlet.filter.forwardOn404=true,Jersey处理不了的请求会自动转发给后续的Spring MVC Servlet,静态资源就可以正常访问
  • 直接给Jersey配置独立前缀(和第三个问题的解决方案联动),避免Jersey占用根路径匹配规则
问题2:私有静态资源目录配置

你可以直接复用Spring内置的静态资源处理能力,不需要自己实现资源读取、响应头设置等逻辑,修改后的代码如下:

@Bean
public ServletRegistrationBean<HttpServlet> privateStaticContent() {
    DefaultServletHttpRequestHandler staticHandler = new DefaultServletHttpRequestHandler();
    // 配置静态资源查找路径
    staticHandler.setLocations(List.of(new ClassPathResource("private-static/")));
    
    return new ServletRegistrationBean<>(new HttpServlet() {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            if (!isAuthenticated(req)) {
                resp.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
                return;
            }
            // 身份校验通过后直接交给Spring静态资源处理器处理
            staticHandler.handleRequest(req, resp);
        }
    }, "/private-static/*");
}

注意需要提前把src/main/private-static加入到项目的编译资源路径里,确保打包后会出现在classpath下。

问题3:Jersey单独配置访问前缀

Spring Boot原生支持仅对Jersey生效的路径前缀配置,两种方式任选即可:

  • 配置文件方式:在application.properties中添加spring.jersey.application-path=/api
  • 代码注解方式:在你的Jersey配置类(继承ResourceConfig的类)上添加@ApplicationPath("/api")注解

两种方式都只会给Jersey接口添加/api前缀,不会影响其他自定义Servlet、静态资源的访问路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:27:02