Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring simply rendering an html page

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

like image 434
Gustavo Semião-Lobo Avatar asked Aug 15 '14 16:08

Gustavo Semião-Lobo


People also ask

Can we use html in spring boot?

This is a very basic Web Application using Spring Boot that serves a “Hello World” static HTML web page. This will start the embedded Tomcat server at port 8080. The web server is available out of the box with Spring Boot.

How do I return a page in spring boot?

The Best Answer is. Using @ResponseBody returns return "login"; as a String object. Any object you return will be attached as payload in the HTTP body as JSON. This is why you are getting just login in the response.


2 Answers

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.

like image 192
geoand Avatar answered Sep 25 '22 22:09

geoand


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.

like image 39
kryger Avatar answered Sep 23 '22 22:09

kryger