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

Spring Boot访问JSP遇404及自定义错误页无法加载问题

Spring Boot访问JSP出现404及控制器映射失效问题

问题现象

  • 访问http://localhost:8085/出现404错误,提示“此localhost页面无法找到”
  • 自定义CustomErrorController中打印errorMessage的日志正常输出,但无法返回对应的error.jsp页面
  • HomeController中根路径@GetMapping("/")的方法未触发日志输出,请求直接进入错误控制器逻辑

HomeController代码

package com.bhagya.app;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HomeController {

    @GetMapping("/")
    public String home() {
        System.out.println("hello");
        return "index"; // 对应views文件夹下的home.jsp
    }
}

CustomErrorController代码

package com.bhagya.app;

import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class CustomErrorController implements ErrorController {

    @GetMapping("/error")
    public String handleError(Exception e) {
        System.out.println("errorMessage ");
 
        // 处理错误并返回自定义错误页面
        return "error"; // 对应views文件夹下的error.jsp
    }

    public String getErrorPath() {
        return "/error";
    }
}

项目启动及请求日志

.   ____          _            __ _ _
        /\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
       ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
        \/  ___)| |_)| | | | | || (_| |  ) ) ) )
         '  |____| .__|_| |_|_| |_\__, | / / / /
        =========|_|==============|___/=/_/_/_/
       :: Spring Boot ::              (v3.2.2)
       
2024-02-02T06:44:36.155+05:30  INFO 19404 --- [           main] com.bhagya.app.Web2Application          : Starting Web2Application using Java 17.0.9 with PID 19404 (C:\Users\bhagy\web-2\target\classes started by bhagy in C:\Users\bhagy\web-2)
2024-02-02T06:44:36.159+05:30  INFO 19404 --- [           main] com.bhagya.app.Web2Application          : No active profile set, falling back to 1 default profile: "default"
2024-02-02T06:44:37.270+05:30  INFO 19404 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8085 (http)
2024-02-02T06:44:37.284+05:30  INFO 19404 --- [           main] o.apache.catalina.core.StandardService  : Starting service [Tomcat]
2024-02-02T06:44:37.285+05:30  INFO 19404 --- [           main] o.apache.catalina.core.StandardEngine   : Starting Servlet engine: [Apache Tomcat/10.1.18]
2024-02-02T06:44:37.358+05:30  INFO 19404 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]      : Initializing Spring embedded WebApplicationContext
2024-02-02T06:44:37.359+05:30  INFO 19404 --- [           main] w.s.c.ServletWebServerApplicationContext: Root WebApplicationContext: initialization completed in 1141 ms
2024-02-02T06:44:37.770+05:30  INFO 19404 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8085 (http) with context path ''
2024-02-02T06:44:37.781+05:30  INFO 19404 --- [           main] com.bhagya.app.Web2Application          : Started Web2Application in 2.209 seconds (process running for 3.126)
2024-02-02T06:44:43.900+05:30  INFO 19404 --- [nio-8085-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]      : Initializing Spring DispatcherServlet 'dispatcherServlet'
2024-02-02T06:44:43.900+05:30  INFO 19404 --- [nio-8085-exec-1] o.s.web.servlet.DispatcherServlet       : Initializing Servlet 'dispatcherServlet'
2024-02-02T06:44:43.902+05:30  INFO 19404 --- [nio-8085-exec-1] o.s.web.servlet.DispatcherServlet       : Completed initialization in 2 ms
errorMessage 
errorMessage

问题分析与解决方案

1. 补全JSP相关依赖与配置

Spring Boot默认不支持JSP视图,需手动添加依赖并配置路径:

  • Maven依赖(添加到pom.xml):
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>
  • 视图路径配置(添加到application.properties):
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
  • 确保JSP文件放在src/main/webapp/WEB-INF/views/目录下,比如home.jsp对应路径为src/main/webapp/WEB-INF/views/home.jsp,控制器返回值需与文件名一致(比如返回home而非index)。

2. 修复CustomErrorController代码问题

  • 删除重复的@Controller和@RequestMapping注解;
  • Spring Boot 2.3+后getErrorPath()方法已弃用,无需保留;
  • 确保error.jsp放在正确的视图目录下。

修改后的代码:

package com.bhagya.app;

import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class CustomErrorController implements ErrorController {

    @GetMapping("/error")
    public String handleError() {
        System.out.println("errorMessage ");
        return "error";
    }
}

3. 确保HomeController被正确扫描

  • 检查启动类Web2Application的包路径:如果启动类在com.bhagya下,com.bhagya.app会被自动扫描;否则需在启动类添加@ComponentScan(basePackages = "com.bhagya.app");
  • 修正控制器返回值与JSP文件名的对应关系:如果JSP文件是home.jsp,控制器需返回home。

4. 清理重建项目

  • Eclipse中执行Project -> Clean,再执行Maven -> Clean和Maven -> Install;
  • 重启Spring Boot应用后重新访问http://localhost:8085/。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 08:49:55