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

使用Arquillian测试Spring REST服务时遇ClassNotFoundException: JspServlet

解决Arquillian测试SpringBoot REST服务时JspServlet找不到的问题

这个报错我之前也踩过坑,本质就是Arquillian部署的Web应用里找不到JSP相关的类文件——要么是测试阶段没加对应依赖,要么是SpringBoot默认配置触发了容器加载JSP组件,但又没提供对应的类支持。给你几个实用的解决思路:

1. 添加Jasper依赖(如果确实需要JSP支持)

如果你的测试或应用本身涉及JSP视图,直接在pom.xml里加上Tomcat嵌入版的Jasper依赖,把scope设为test,只在测试阶段生效:

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>test</scope>
</dependency>

Gradle用户对应的配置是:

testImplementation 'org.apache.tomcat.embed:tomcat-embed-jasper'

2. 禁用JSP相关配置(REST服务推荐方案)

既然你写的是REST服务,完全不需要JSP视图解析,那直接让SpringBoot别去加载JSP相关组件就行:

  • 在测试专用配置文件(比如src/test/resources/application-test.properties)里添加:
# 禁用JSP视图解析器
spring.mvc.view.prefix=
spring.mvc.view.suffix=
  • 或者在测试类上直接排除JSP相关的自动配置:
@SpringBootTest
@EnableAutoConfiguration(exclude = {InternalResourceViewResolverAutoConfiguration.class})
public class YourRestControllerTest {
    // 测试代码逻辑
}

3. 确保Arquillian部署包包含Jasper类

如果用ShrinkWrap手动构建部署包,记得把Jasper依赖添加到部署的WebArchive中:

@Deployment
public static WebArchive createDeployment() {
    return ShrinkWrap.create(WebArchive.class)
            .addPackages(true, "com.your.rest.package")
            // 引入Jasper依赖及其传递依赖
            .addAsLibraries(Maven.resolver()
                    .resolve("org.apache.tomcat.embed:tomcat-embed-jasper")
                    .withTransitivity()
                    .asFile());
}

一般来说,REST服务用第二种方法最省心,直接禁用JSP相关的自动配置,避免容器去加载不需要的JspServlet,自然就不会报找不到类的错了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:58:51