spring-boot jsp whitelabel error page问题解决

本文介绍了在Spring-Boot项目中遇到的JSP Whitelabel Error Page问题及其解决方法。通过分析Spring-Boot内嵌Tomcat容器的源码,发现Tomcat上下文未正确指向项目路径。通过创建自定义配置类TomcatConfig.java,成功解决了这个问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spring-boot jsp whitelabel error page问题解决

spring-boot配置jsp,访问:http://127.0.0.1:8080,显示如下错误信息:

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Tue Dec 12 13:04:58 CST 2017
There was an unexpected error (type=Not Found, status=404).
/WEB-INF/jsp/test1.jsp

打印Tomcat上下文指向目录:

public static void main(Stringp[] args){
    ConfigurableApplicationContext context = SpringApplication.run(ApplicationMain.class, args);
    ServletContext context1 = context.getBean(ServletContext.class);
    URL url = context1.getRes
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.17</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>demo</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>这些依赖不够吗,为什么我浏览器上输入地址看到Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Sat Mar 08 01:42:22 CST 2025 There was an unexpected error (type=Not Found, status=404). No message available
03-10
### Spring Boot Whitelabel Error Page 404 的解决方案 Spring Boot 中出现 `Whitelabel Error Page` 和 `HTTP Status 404` 是常见的错误之一,通常表明应用程序无法找到匹配的请求映射。以下是可能导致该问题的原因以及对应的解决方法: #### 可能原因及解决办法 1. **控制器类未被扫描到** 如果控制器所在的包不在主应用启动类所在包及其子包范围内,则 Spring Boot 不会自动扫描并加载这些控制器类。可以通过调整包结构或将组件扫描范围扩大来解决问题[^5]。 ```java @SpringBootApplication(scanBasePackages = {"com.example", "other.package"}) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 2. **缺少视图解析器配置** 若使用的是基于 Thymeleaf 或 JSP 的视图渲染技术,而未正确配置视图解析器,可能会导致页面找不到的情况。确保已引入相应的依赖项,并在配置文件中启用支持[^3]。 对于 Thymeleaf: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> ``` 配置示例: ```properties spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html ``` 3. **请求路径不匹配** 请求 URL 路径与控制器中的定义不符也会引发此问题。务必确认浏览器访问地址是否完全一致,包括大小写和斜杠位置等细节。 4. **RESTful API 返回 JSON 数据而非 HTML 页面** 使用了 `@RestController` 注解而不是普通的 `@Controller` 导致返回数据形式不符合预期。如果希望展示网页内容,请改回标准控制层声明方式[^2]。 修改前: ```java @RestController public class HelloController { @GetMapping("/hello") public String helloWorld(){ return "Hello World!"; } } ``` 修改后: ```java @Controller public class HelloController { @GetMapping("/hello") public String helloWorld(Model model){ model.addAttribute("message","Hello World!"); return "index"; } } ``` 5. **静态资源放置不当** 将前端所需的 CSS/JS 文件存放在默认公共资源目录之外的地方也可能引起加载失败现象。按照约定俗成的做法把它们放到 src/main/resources/static 下即可避免此类状况发生[^4]。 6. **跨域资源共享(CORS)** 当前后端分离部署时,由于浏览器的安全策略限制,默认情况下不允许不同源之间的 AJAX 请求通信。此时需开启 CORS 支持以允许特定域名下的客户端发起调用操作[^1]。 --- ### 总结 通过以上分析可知,“Whitelabel Error Page”主要是因为服务器未能成功处理指定 URI 所造成的响应异常情况。针对具体场景逐一排查上述提到的各种可能性之后应该能够有效定位根本原因进而彻底修复该缺陷。 ```java @Controller public class HomeController { @RequestMapping("/") public String home() { return "home"; // 映射至 templates/home.html } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值