【问题标题】:JSP page not rendering in Spring BootJSP页面未在Spring Boot中呈现
【发布时间】:2018-03-21 17:44:25
【问题描述】:

我已经开始使用 spring boot 并尝试创建这个基本程序 但它给出了白色错误页面:

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

Wed Mar 21 23:06:15 IST 2018
There was an unexpected error (type=Not Found, status=404).
No message available

这里是 pom.xml 文件的依赖部分

<dependencies>

    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</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>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

index.jsp:

<!DOCTYPE html>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html lang="en">
    <head></head>
    <body>
        Hello User....
    </body>
</html>

Application.properties 文件:

spring.mvc.view.prefix: /WEB-INF/views/
spring.mvc.view.suffix: .jsp

以下是控制器类:

package com.whiteboard.banking;

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

@Controller
public class HomeController {

    @RequestMapping("/")
    public String index(){
        return "index";
    }

}

我尝试在 index 方法中记录消息,它正在记录,这意味着该方法被调用但 index.jsp 没有呈现。

谁能告诉我错误的原因?

【问题讨论】:

    标签: java spring jsp spring-boot


    【解决方案1】:

    除了清晰的答案,我想精确/提醒:

    您应该将您的项目打包转换为可执行的战争,以便 spring 可以找到您的 *.jsp

    请看我的answer。希望对您有所帮助:)

    【讨论】:

    • 我的相同代码在别人的机器上运行。我发送给我的朋友的代码完全相同,他只是导入 maven 项目,构建并运行,它工作正常。可能的原因是什么?
    【解决方案2】:

    默认情况下,Spring Boot 从名为 /static(或 /public 或 /resources 或 /META-INF/resources)的目录中提供静态内容。您可以通过实现WebMvcConfigurer 或扩展WebMvcConfigurerAdapter 来覆盖这些,然后覆盖addResourceHandlers

    @Configuration
    public class MvcConfig extends WebMvcConfigurerAdapter {
      @Override
      public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**")
             .addResourceLocations(new String[] {"classpath:/", "classpath:/public/"}); 
      }
    }
    

    也许这可以帮助你spring static content

    【讨论】:

    • 我相同的代码在别人的机器上运行。我发送给我的朋友的代码完全相同,他只是导入 maven 项目,构建并运行,它工作正常。可能的原因是什么?
    • 第一个 WebMvcConfigurerAdapter 已被贬低,addResourceLocations 的名称没有带有字符串参数的方法
    • @Sarvesh 更新了答案。它在春季版本 5 中已弃用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 2020-04-13
    • 2021-01-05
    相关资源
    最近更新 更多