The Solution
I found the answer via trial-and-error, which turned out rather annoying. I hope someone can correct me if this conclusion is wrong, but it appears that Spring Boot does not like the string WEB-INF
. I renamed the WEB-INF
directory to view
and changed the application.properties
to the following and the view loaded successfully.
spring.mvc.view.prefix=/view/
spring.mvc.view.suffix=.jsp
Additional Findings
The objective of this exercise was to create a working example of a minimal, Java-based configuration so I continued minimalising the setup. I then found that lots of advice dished out on multiple SO threads and forums did not help. @JBNizet provided a link in his comment to the Spring Boot docs which lists a very salient point that no one has mentioned: JSPs simply do not play well with Spring Boot as it has limitations depending on the embedded container chosen. With that in mind, I decided to try replacing JSPs with ThymeLeaf templates.
My new working config removes the need for these:
- No need to add
application.properties
:spring.mvc.view.prefix
+spring.mvc.view.suffix
- No need to change the packaging type from jar to war
- No need to modify main class
- No need to add pom.xml dependencies for
org.springframework.boot / spring-boot-starter-tomcat
org.springframework.boot / tomcat-embed-jasper
javax.servlet / jstl
So just the default Spring Boot template and 2 ThymeLeaf dependencies with the views named as ViewName.html
placed in src/main/resources/templates
.
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring4</artifactId>
</dependency>