5

The problem:

Using Spring 4, I am getting this when visiting a webpage

Whitelabel Error Page

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

Fri Aug 15 16:41:29 BST 2014
There was an unexpected error (type=Not Found, status=404).

What I have:

I have this Main class:

// src/main/java/abc/Main.java
package abc;

import abc.web.WebAppConfig;
import org.springframework.boot.SpringApplication;

public class Main {
    public static void main(String[] args) {
        SpringApplication.run(WebAppConfig.class);

    }
}

Then I have this WebAppConfig.class (currently with just some configuration annotations):

// src/main/java/abc/web/WebAppConfig.java
package abc.web;

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;

@ComponentScan
@EnableAutoConfiguration
public class WebAppConfig {

}

And this controller HomeController.java:

// src/main/java/abc/web/HomeController.java
package abc.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import static org.springframework.web.bind.annotation.RequestMethod.GET;

@Controller
@RequestMapping("/")
public class HomeController {

    @RequestMapping(method = GET)
    public String home() {
        System.out.println("HELLO !!");
        return "home";
    }
}

The HELLO !! shows up in the logs.

And finally I have a html file at src/main/java/abc/webapp/home.html, with just some html tags including a p tag with Hello, world!.

The question:

I understand that I am missing the way of rendering the view, but I searched a couple of questions on stackoverflow and haven't find a solution yet.

Can someone explain how can I get Spring to render a webpage ? What am I missing ?

Thanks in advance :)

kryger
  • 12,906
  • 8
  • 44
  • 65
Gustavo Semião-Lobo
  • 2,468
  • 3
  • 18
  • 26

3 Answers3

10

Spring Boot will automatically use and configure Thymeleaf as the view rendering engine, as long as it's on the classpath. To put it on the classpath use

compile("org.springframework.boot:spring-boot-starter-thymeleaf")

in the gradle build file.

If you are using maven add the dependency:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

In your case in order to display the home.html view (in accordance to the controller you are using), you need to place it under /resources/templates.

For a complete example, check out this guide.

David Newcomb
  • 10,639
  • 3
  • 49
  • 62
geoand
  • 60,071
  • 24
  • 172
  • 190
7

The simplest answer to the "how can I get Spring Boot to render a webpage?" question is: place your home.html file inside src/main/resources/static/ folder. The page will be available under the /home.html URL.

More details in the documentation.

kryger
  • 12,906
  • 8
  • 44
  • 65
  • When to put the HTML files under subdirectory "static" and when under "templates"? Thanks – Farah Sep 15 '16 at 01:17
0

You probably not configured template engine and view resolver. See example with thymeleaf here http://www.thymeleaf.org/doc/thymeleafspring.html As thymeleaf template is a valid HTML code and vice verse you can use it.

kulatamicuda
  • 1,603
  • 2
  • 21
  • 40