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

Spring Boot中如何配置并展示自定义404 page not found JSP页面

Spring Boot 替换默认Whitelabel页为自定义404页面实现方案

优先推荐新手使用错误页注册的实现方式,配置简单且不会影响静态资源(CSS/JS/图片等)的正常访问,步骤如下:

1. 基础配置调整

在项目的application.properties配置文件中添加以下配置(如果用yml格式自行对应层级即可):

# 关闭Spring Boot默认的白标错误页
server.error.whitelabel.enabled=false
# 配置JSP视图前缀,对应你存放JSP文件的src/main/webapp/views目录
spring.mvc.view.prefix=/views/
# 配置JSP视图后缀
spring.mvc.view.suffix=.jsp

2. 注册404错误页映射

新建配置类注册404状态码对应的跳转路径:

import org.springframework.boot.web.server.ErrorPage;
import org.springframework.boot.web.server.ErrorPageRegistrar;
import org.springframework.boot.web.server.ErrorPageRegistry;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;

@Configuration
public class ErrorPageConfig implements ErrorPageRegistrar {
    @Override
    public void registerErrorPages(ErrorPageRegistry registry) {
        // 所有返回404状态码的请求,都转发到/page-not-found路径
        registry.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/page-not-found"));
    }
}

3. 添加视图映射

新建MVC配置类,把错误跳转路径和你已经创建好的JSP页面做绑定:

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        // /page-not-found路径直接映射到page-not-found.jsp视图
        registry.addViewController("/page-not-found").setViewName("page-not-found");
    }
}

4. 依赖检查(必做)

如果项目还没引入JSP解析相关依赖,内嵌Tomcat无法正常渲染JSP页面,Maven项目在pom.xml中添加以下依赖即可:

<!-- 内嵌Tomcat JSP渲染支持 -->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<!-- 页面用到JSTL标签时才需要添加 -->
<dependency>
    <groupId>jakarta.servlet.jsp.jstl</groupId>
    <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
</dependency>

验证方式

重启项目后,访问任意不存在的路径(比如你举例的/blog/unknown-parameter),就会直接展示你自定义的page-not-found.jsp页面,不会再出现默认的Whitelabel错误页。如果测试时不生效,优先用浏览器无痕模式访问,避免本地缓存干扰。


可选方案:全局异常捕获(适合需要统一处理多类错误的场景)

如果后续需要同时处理500、403等其他错误,可以用全局异常拦截的方式实现,注意这个方案需要额外加配置,否则404异常不会被拦截:

  1. 先在application.properties追加配置:
# 找不到请求路径时抛出异常,方便全局拦截
spring.mvc.throw-exception-if-no-handler-found=true
  1. 新建全局异常处理类:
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.NoHandlerFoundException;

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(NoHandlerFoundException.class)
    public String handle404() {
        return "page-not-found";
    }
}

注意:这个方案如果配置不当会导致静态资源无法访问,新手优先用前面的错误页注册方案即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:54:17