2
votes

Can't load a very simple JSP page with spring-boot, getting 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>

Getting 404 even though debugger shows that "welcome" is being returned from the Controller RequestMapping.

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Sat Mar 07 19:35:15 EST 2015 There was an unexpected error (type=Not Found, status=404).

4

4 Answers

8
votes

I have already tried many solutions, but couldn't find a working one.

If you are using Intellij IDEA and reading this while you are pulling your hair: do not try to run Spring Boot application(with dynamic .jsp views) with the IDE's run ▶︎ button.

$ cd {your_project_folder_path}

$ ls //Check if you are in the same place with the pom.xml

and then type

$ mvn spring-boot:run

Now your application is served at localhost:8080.

2
votes

In latest spring versions, the properties to be put in application.properties file look like following:

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

Note "mvc" included in "spring.view.prefix"

Also, in newer versions of Spring, there is an annotation @SpringBootApplication for @Configuration, @EnableAutoConfiguration, @ComponentScan

2
votes

Normally Spring boot doesnot require any configuration besides adding dependency while working with Thymeleaf.

To run JSP in Spring Boot, you have to have some configurations:

Dependencies needed:

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

If you are connecting with MySQL Database then:

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

In Application.Properties file:

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

Now your Good to go !!! :D

1
votes

I needed to add this to my application.properties file:

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