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

Spring Boot集成Jersey时JSP无法编译渲染问题求助

解决Spring Boot集成Jersey后JSP渲染异常问题

看起来你遇到的核心问题是Jersey默认接管了所有HTTP请求,导致负责JSP视图渲染的Spring MVC无法处理相关请求;而引入JSTL后返回空白,是因为Jersey没有配置JSP渲染支持,无法解析带JSTL的页面。下面是具体的解决方案:

方案1:让Jersey只处理API请求(推荐)

这种方式把API和视图请求分开,让Spring MVC负责JSP渲染,更符合Spring Boot的使用习惯:

1. 调整Jersey的请求路径

修改你的JerseyConfig,将@ApplicationPath设置为/api(或其他专属前缀),这样Jersey只会拦截/api开头的请求,JSP请求会交给Spring MVC处理:

package com.example.jersey.configuration;

import javax.ws.rs.ApplicationPath;
import org.glassfish.jersey.server.ResourceConfig;

@ApplicationPath("/api") // 仅接管/api前缀的请求
public class JerseyConfig extends ResourceConfig {
    public JerseyConfig() {
        packages("com.example.jersey.controller"); // 你的REST API控制器所在包
    }
}

2. 配置Spring MVC的JSP视图解析器

在application.properties(或application.yml)中添加JSP视图的前缀和后缀配置:

# JSP视图解析配置
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

确保你的JSP文件放在src/main/webapp/WEB-INF/views/目录下(比如hello.jsp)。

3. 正确引入JSTL依赖

在pom.xml(Maven)中添加JSTL和Tomcat Jasper依赖(如果是Gradle请对应转换):

<!-- JSTL依赖 -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

<!-- Tomcat的JSP编译依赖,Spring Boot默认引入,但打包方式不同需调整scope -->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <!-- 如果是WAR包,用provided;如果是JAR包,改成compile -->
    <scope>provided</scope>
</dependency>

方案2:让Jersey直接处理JSP渲染(不推荐)

如果必须让Jersey负责JSP视图,需要开启Jersey的JSP支持特性:

1. 配置Jersey的JSP支持

修改JerseyConfig,注册JSP相关Feature并设置视图路径:

package com.example.jersey.configuration;

import javax.ws.rs.ApplicationPath;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.servlet.jsp.JspMvcFeature;

@ApplicationPath("/")
public class JerseyConfig extends ResourceConfig {
    public JerseyConfig() {
        packages("com.example.jersey.controller");
        // 开启JSP视图支持
        register(JspMvcFeature.class);
        // 设置JSP文件的基础路径
        property(JspMvcFeature.TEMPLATE_BASE_PATH, "/WEB-INF/views");
    }
}

2. 在API方法中返回Viewable对象

你的REST接口需要返回Viewable来指定要渲染的JSP页面:

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import org.glassfish.jersey.server.mvc.Viewable;

@Path("/hello")
public class HelloController {
    @GET
    public Viewable showHelloPage() {
        // 第一个参数是JSP文件名(对应/WEB-INF/views/hello.jsp),第二个参数是页面模型数据
        return new Viewable("/hello", null);
    }
}

常见遗漏点总结

  • 请求路径冲突:Jersey默认@ApplicationPath("/")会拦截所有请求,导致Spring MVC无法处理JSP
  • 缺少视图解析配置:Spring MVC需要明确的前缀后缀才能找到JSP文件
  • JSTL依赖问题:依赖版本不对或scope设置错误,导致JSTL标签无法解析
  • Jersey未开启JSP支持:如果用Jersey处理JSP,必须注册JspMvcFeature并配置路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 07:05:02