我正在尝试使用Spring Boot重写配置繁重的香草Spring MVC项目。我使用Spring Boot Initiaizer在IntelliJ中启动了一个全新的Spring Boot项目,并且正在尝试基于Java的最小配置。许多教程指出,生成的默认主类就足够了,其中@SpringBootApplication包含了所有内容。我有一个示例REST Controller可以工作并以JSON形式返回一个序列化对象,但是事实证明很难显示视图。我的结构如下,除我创建的webapps目录外,所有其他默认设置。
@SpringBootApplication
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文件也无济于事。
application.properties
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>
我必须在这里遗漏一些令人痛苦的显而易见的东西,如果有人可以指出这一点,请多谢!
解决方案
我通过反复试验找到了答案,结果很烦人。如果这个结论是错误的,我希望有人可以纠正我,但是看来Spring Boot不喜欢string WEB- INF。我将WEB-INF目录重命名为,view并将更改application.properties为以下内容,并成功加载了视图。
WEB- INF
WEB-INF
view
spring.mvc.view.prefix=/view/ spring.mvc.view.suffix=.jsp
其他发现
本练习的目的是创建一个 最小的 ,基于Java的配置的工作示例,因此我继续最小化设置。然后,我发现在多个SO线程和论坛上提出的很多建议都无济于事。@JBNizet在他的评论中提供了指向Spring Boot文档的链接,该链接列出了一个没有人提到的非常突出的观点: JSP不能很好地与Spring Boot配合使用,因为它受选择的嵌入式容器的限制 。考虑到这一点,我决定尝试用ThymeLeaf模板替换JSP。
我的新工作配置消除了对这些的需要:
spring.mvc.view.prefix
spring.mvc.view.suffix
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。
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>