By default, where does Spring Boot expect views to be stored?
If you found this article and you are returning
return "home.jsp";
instead of just "home". Then you must remove
spring.mvc.view.suffix=.jsp
Otherwise remove .jsp from home and keep the suffix!
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>
Without any configuration Spring Boot expects the views to be stored inside /webapp, the view page may be of any format depends on application.properties settings(like html or jsp) to set .jsp as view page at /views/ folder
spring.mvc.view.prefix=/views/
spring.mvc.view.suffix=.jsp //for .html change it to .html
and you have to use tomcat jaspher , if you don't include it the page will not be parsed instead it gets downloaded as a file
spring.mvc.view.prefix=/views/
spring.mvc.view.suffix=.jsp