Tutorials Spring Boot Integrate Apache Tiles3 to Spring Boot Web MVC Application

Integrate Apache Tiles3 to Spring Boot Web MVC Application

Spring Boot Web MVC configured to produce an executable WAR and ready for fully fledged web application development. In this tutorial, we will see how to use Apache Tiles3 framework in your Spring Boot Web MVC application.

Let us start by creating an application based on spring-boot-starter-web. You may use spring initializer to create a basic project template.

1. Spring Boot Dependencies

Add dependencies to the POM to pull in Tomcat, Jasper and Apache Tiles

<dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-tomcat</artifactid>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupid>org.apache.tomcat.embed</groupid>
    <artifactid>tomcat-embed-jasper</artifactid>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupid>org.apache.tiles</groupid>
    <artifactid>tiles-jsp</artifactid>
    <version>3.0.4</version>
</dependency>

If you’re using Gradle build system, you can add the following dependency to your build.gradle file.

compile group: 'org.apache.tomcat.embed', name: 'tomcat-embed-jasper', version: '9.0.12'
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
compile group: 'org.apache.tiles', name: 'tiles-jsp', version: '3.0.8'

Change the packaging to WAR in the POM

<packaging>war</packaging> 

Or for gradle

    
apply plugin: 'war'

2. Project Directory Structure

Create Web application structure the Maven way (tree showing all files):

ExampleApp:
    │   pom.xml
    ├───src
    │   ├───main
    │   │   ├───java
    │   │   │   └───com
    │   │   │       └───example
    │   │   │           └───app
    │   │   │               │   ExampleApplication.java
    │   │   │               │   TilesConfig.java
    │   │   │               └───controller
    │   │   │                       HelloWorldController.java
    │   │   ├───resources
    │   │   │       application.properties
    │   │   └───webapp
    │   │       ├───static       
    │   │       └───WEB-INF
    │   │           └───tiles
    │   │               │   tiles.xml
    │   │               ├───layouts
    │   │               │       basic.jsp
    │   │               └───views
    │   │                   │   footer.jsp
    │   │                   │   header.jsp
    │   │                   └───home
    │   │                          greeting.jsp
    │   │                          home.jsp
    │   └───test
    │       
    └───target

3. Tiles Configuration for Spring Boot

Configure tiles by adding a new configuration class – it will be pulled in by classpath scanning:

package com.example.app;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.view.tiles3.TilesConfigurer;
import org.springframework.web.servlet.view.tiles3.TilesView;
import org.springframework.web.servlet.view.tiles3.TilesViewResolver;

@Configuration
public class TilesConfig {

    @Bean
    public TilesConfigurer tilesConfigurer() {
        final TilesConfigurer configurer = new TilesConfigurer();
        configurer.setDefinitions(new String[]{"WEB-INF/tiles/tiles.xml"});
        configurer.setCheckRefresh(true);
        return configurer;
    }

    @Bean
    public TilesViewResolver tilesViewResolver() {
        final TilesViewResolver resolver = new TilesViewResolver();
        resolver.setViewClass(TilesView.class);
        return resolver;
    }
}

4. Tiles Layout and Views Declaration

Create the tiles configuration file: WEB-INF/tiles/tiles.xml

<!--?xml version="1.0" encoding="ISO-8859-1" ?-->

<tiles-definitions>

    <!-- Templates -->      
    <definition name="layout.basic" template="/WEB-INF/tiles/layouts/basic.jsp">
        <put-attribute name="title" value="Spring Web MVC with Tiles 3">
        <put-attribute name="header" value="/WEB-INF/tiles/views/header.jsp">
        <put-attribute name="body" value="">
        <put-attribute name="footer" value="/WEB-INF/tiles/views/footer.jsp">
    </put-attribute></put-attribute></put-attribute></put-attribute></definition>
    
    <!-- Pages -->        
    <definition name="site.home" extends="layout.basic">
        <put-attribute name="body" value="/WEB-INF/tiles/views/home/home.jsp">
    </put-attribute></definition>
    
    <definition name="site.greeting" extends="layout.basic">
        <put-attribute name="body" value="/WEB-INF/tiles/views/home/greeting.jsp">
    </put-attribute></definition>
</tiles-definitions>

Create the tiles themselves

basic.jsp:

<@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles">
        <title><tiles:getAsString name="title"/></title>
        <tiles:insertattribute name="header"></tiles:insertattribute>
        <tiles:insertattribute name="body"></tiles:insertattribute>
        <tiles:insertattribute name="footer">
</tiles:insertattribute>

header.jsp:

<div class="header">Page Header</div>

footer.jsp:

<div class="footer">Page Footer</div>

home.jsp:

<div class="main-contnet">
     Main page content goes here...
</div>

greeting.jsp:

<div>
  Hello ${name}
</div>

5. Spring Boot Controller

Add a controller class into a controller directory:

package com.example.app.controller;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloWorldController {    

    @RequestMapping(value = "/home", method=RequestMethod.GET)
    public String home() {
        return "site.home";
    }
    
    @RequestMapping(value = "/greet/{name}", method=RequestMethod.GET)
    public ModelAndView greetTwoWays(@PathVariable(value="name") final String name, final Model model) {        
        return new ModelAndView("site.greeting", "name", name);
    }
}

Build the project using Maven:

mvn clean package

When using Gradle:

gradle build

Now let us test the controller and confirm that Spring MVC has been configured as expected

http://localhost:8080/home    
http://localhost:8080/greet/John
Total
1
Shares
1 comment
Leave a Reply

Your email address will not be published.

Previous Post

Using H2 In-Memory Database in Spring Boot

Next Post

Git Commands Cheat Sheet

Related Posts
By clicking “Allow All”, you agree to the storing of cookies on your device to enhance site navigation, analyze site usage, and assist in our marketing efforts. Cookie Notice
Allow All