【问题标题】:spring-boot basic JSP 404 Not Foundspring-boot 基本 JSP 404 未找到
【发布时间】:2015-05-09 10:37:53
【问题描述】:

无法使用spring-boot加载一个非常简单的JSP页面,得到404 Not Found。

src/main/java/SampleWebJspApplication.java

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class SampleWebJspApplication extends SpringBootServletInitializer {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(SampleWebJspApplication.class, args);
    }
}

src/main/java/WebController.java

@Controller
public class WebController {
    @RequestMapping("/")
    public String welcome() {
        return "welcome";
    }
}

src/main/webapp/WEB-INF/jsp/welcome.jsp

<!DOCTYPE html>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html lang="en">
    <body>
        <h1>Hello.</h1>      
    </body>
</html>

即使调试器显示控制器 RequestMapping 正在返回“欢迎”,也得到 404。

白标错误页面

这个应用程序没有明确的 /error 映射,所以你看到 这是一个后备。

2015 年 3 月 7 日星期六 19:35:15 EST 出现意外错误(type=Not 已找到,状态=404)。

【问题讨论】:

    标签: java spring jsp spring-mvc spring-boot


    【解决方案1】:

    我已经尝试了很多解决方案,但找不到可行的解决方案。

    如果您正在使用 Intellij IDEA 并在拉头发时阅读此内容:请勿尝试使用 IDE 的运行 ▶︎ 按钮运行 Spring Boot 应用程序(带有动态 .jsp 视图)。

    $ cd {your_project_folder_path}
    
    $ ls //Check if you are in the same place with the pom.xml
    

    然后输入

    $ mvn spring-boot:run
    

    现在您的应用程序已发送至localhost:8080

    【讨论】:

    【解决方案2】:

    在最新的 spring 版本中,要放在 application.properties 文件中的属性如下所示:

    spring.mvc.view.prefix=/WEB-INF/jsp/
    spring.mvc.view.suffix=.jsp
    

    注意“mvc”包含在“spring.view.prefix”

    另外,在较新版本的 Spring 中,@SpringBootApplication 有一个注解 @Configuration@EnableAutoConfiguration@ComponentScan

    【讨论】:

      【解决方案3】:

      通常 Spring boot 不需要任何配置,除了在使用 Thymeleaf 时添加依赖项。

      要在 Spring Boot 中运行 JSP,您必须进行一些配置:

      需要的依赖:

       <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>
      

      如果您连接的是 MySQL 数据库,那么:

       <dependency>
              <groupId>mysql</groupId>
              <artifactId>mysql-connector-java</artifactId>
              <scope>runtime</scope>
          </dependency>
      

      在 Application.Properties 文件中:

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

      现在你的好去! :D

      【讨论】:

        【解决方案4】:

        我需要将此添加到我的 application.properties 文件中:

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

        【讨论】:

        • @Crash-ID,知道了。谢谢。