小编典典

默认情况下,Spring Boot期望视图存储在哪里?

spring-boot

我正在尝试使用Spring Boot重写配置繁重的香草Spring MVC项目。我使用Spring Boot
Initiaizer在IntelliJ中启动了一个全新的Spring
Boot项目,并且正在尝试基于Java的最小配置。许多教程指出,生成的默认主类就足够了,其中@SpringBootApplication包含了所有内容。我有一个示例REST
Controller可以工作并以JSON形式返回一个序列化对象,但是事实证明很难显示视图。我的结构如下,除我创建的webapps目录外,所有其他默认设置。

src
`-main
   `-java
   `-resources
     `-static
     `-templates
   `-webapp
     `-WEB-INF
        `-home.jsp

控制器很简单。

@Controller
public class ViewMaster {
    @RequestMapping("/home")
    public String home() {
        return "home";
    }
}

没有任何配置,我想知道Spring
Boot希望将视图存储在何处以及使用什么扩展名(html?)。我也尝试将以下内容包括在内,application.properties但仍然出现404错误。在资源中四处移动WEB-
INF目录或仅html文件也无济于事。

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

我还尝试了在我的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>

我必须在这里遗漏一些令人痛苦的显而易见的东西,如果有人可以指出这一点,请多谢!


阅读 479

收藏
2020-05-30

共1个答案

小编典典

解决方案

我通过反复试验找到了答案,结果很烦人。如果这个结论是错误的,我希望有人可以纠正我,但是看来Spring Boot不喜欢string WEB- INF。我将WEB-INF目录重命名为,view并将更改application.properties为以下内容,并成功加载了视图。

spring.mvc.view.prefix=/view/
spring.mvc.view.suffix=.jsp

其他发现

本练习的目的是创建一个 最小的
,基于Java的配置的工作示例,因此我继续最小化设置。然后,我发现在多个SO线程和论坛上提出的很多建议都无济于事。@JBNizet在他的评论中提供了指向Spring
Boot文档的链接,该链接列出了一个没有人提到的非常突出的观点: JSP不能很好地与Spring Boot配合使用,因为它受选择的嵌入式容器的限制
。考虑到这一点,我决定尝试用ThymeLeaf模板替换JSP。

我的新工作配置消除了对这些的需要:

  • 无需添加application.propertiesspring.mvc.view.prefix+spring.mvc.view.suffix
  • 无需将包装类型从 jar 改为 战争
  • 无需修改主类
  • 无需为其添加pom.xml依赖项
    • org.springframework.boot / spring-boot-starter-tomcat
    • org.springframework.boot / tomcat-embed-jasper
    • javax.servlet / jstl

所以,只是默认spring引导模板和2
ThymeLeaf依赖关系与命名的意见ViewName.html摆在src/main/resources/templates

<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf</artifactId>
</dependency>

<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring4</artifactId>
</dependency>
2020-05-30