diff --git a/spring-mvc-tiles/pom.xml b/spring-mvc-tiles/pom.xml
new file mode 100644
index 0000000000..abbb9a2870
--- /dev/null
+++ b/spring-mvc-tiles/pom.xml
@@ -0,0 +1,99 @@
+
+ 4.0.0
+ com.baeldung
+ spring-mvc-tiles
+ 0.0.1-SNAPSHOT
+ war
+ spring-mvc-tiles
+ Integrating Spring MVC with Apache Tiles
+
+
+ 4.3.2.RELEASE
+ 3.0.5
+
+
+
+
+
+ org.springframework
+ spring-core
+ ${springframework.version}
+
+
+ org.springframework
+ spring-web
+ ${springframework.version}
+
+
+ org.springframework
+ spring-webmvc
+ ${springframework.version}
+
+
+
+ org.apache.tiles
+ tiles-core
+ ${apachetiles.version}
+
+
+ org.apache.tiles
+ tiles-api
+ ${apachetiles.version}
+
+
+ org.apache.tiles
+ tiles-servlet
+ ${apachetiles.version}
+
+
+ org.apache.tiles
+ tiles-jsp
+ ${apachetiles.version}
+
+
+
+
+ javax.servlet
+ javax.servlet-api
+ 3.1.0
+
+
+ javax.servlet.jsp
+ javax.servlet.jsp-api
+ 2.3.1
+
+
+ javax.servlet
+ jstl
+ 1.2
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.2
+
+ 1.7
+ 1.7
+
+
+
+ org.apache.maven.plugins
+ maven-war-plugin
+ 2.4
+
+ src/main/webapp
+ spring-mvc-tiles
+ false
+
+
+
+
+ spring-mvc-tiles
+
+
\ No newline at end of file
diff --git a/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationConfiguration.java b/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationConfiguration.java
new file mode 100644
index 0000000000..1ae6d1b23c
--- /dev/null
+++ b/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationConfiguration.java
@@ -0,0 +1,47 @@
+package com.baeldung.tiles.springmvc;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
+import org.springframework.web.servlet.view.tiles3.TilesConfigurer;
+import org.springframework.web.servlet.view.tiles3.TilesViewResolver;
+
+@Configuration
+@EnableWebMvc
+@ComponentScan(basePackages = "com.baeldung.tiles.springmvc")
+public class ApplicationConfiguration extends WebMvcConfigurerAdapter {
+
+ /**
+ * Configure TilesConfigurer.
+ */
+ @Bean
+ public TilesConfigurer tilesConfigurer() {
+ TilesConfigurer tilesConfigurer = new TilesConfigurer();
+ tilesConfigurer.setDefinitions(new String[] { "/WEB-INF/views/**/tiles.xml" });
+ tilesConfigurer.setCheckRefresh(true);
+ return tilesConfigurer;
+ }
+
+ /**
+ * Configure ViewResolvers to deliver views.
+ */
+ @Override
+ public void configureViewResolvers(ViewResolverRegistry registry) {
+ TilesViewResolver viewResolver = new TilesViewResolver();
+ registry.viewResolver(viewResolver);
+ }
+
+ /**
+ * Configure ResourceHandlers to serve static resources
+ */
+
+ @Override
+ public void addResourceHandlers(ResourceHandlerRegistry registry) {
+ registry.addResourceHandler("/static/**").addResourceLocations("/static/");
+ }
+
+}
diff --git a/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationController.java b/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationController.java
new file mode 100644
index 0000000000..b85ad54587
--- /dev/null
+++ b/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationController.java
@@ -0,0 +1,27 @@
+package com.baeldung.tiles.springmvc;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+
+@Controller
+@RequestMapping("/")
+public class ApplicationController {
+
+ @RequestMapping(value = { "/"}, method = RequestMethod.GET)
+ public String homePage(ModelMap model) {
+ return "home";
+ }
+
+ @RequestMapping(value = { "/apachetiles"}, method = RequestMethod.GET)
+ public String productsPage(ModelMap model) {
+ return "apachetiles";
+ }
+
+ @RequestMapping(value = { "/springmvc"}, method = RequestMethod.GET)
+ public String contactUsPage(ModelMap model) {
+ return "springmvc";
+ }
+}
diff --git a/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationInitializer.java b/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationInitializer.java
new file mode 100644
index 0000000000..ababe0ae07
--- /dev/null
+++ b/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationInitializer.java
@@ -0,0 +1,22 @@
+package com.baeldung.tiles.springmvc;
+
+import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
+
+public class ApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
+
+ @Override
+ protected Class>[] getRootConfigClasses() {
+ return new Class[] { ApplicationConfiguration.class };
+ }
+
+ @Override
+ protected Class>[] getServletConfigClasses() {
+ return null;
+ }
+
+ @Override
+ protected String[] getServletMappings() {
+ return new String[] { "/" };
+ }
+
+}
diff --git a/spring-mvc-tiles/src/main/webapp/WEB-INF/views/pages/apachetiles.jsp b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/pages/apachetiles.jsp
new file mode 100644
index 0000000000..9936957c04
--- /dev/null
+++ b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/pages/apachetiles.jsp
@@ -0,0 +1,12 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+ pageEncoding="ISO-8859-1"%>
+
+
+
+
+Apache Tiles
+
+
+Tiles with Spring MVC Demo
+
+
\ No newline at end of file
diff --git a/spring-mvc-tiles/src/main/webapp/WEB-INF/views/pages/home.jsp b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/pages/home.jsp
new file mode 100644
index 0000000000..b501d4968e
--- /dev/null
+++ b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/pages/home.jsp
@@ -0,0 +1,12 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+ pageEncoding="ISO-8859-1"%>
+
+
+
+
+Home
+
+
+Welcome to Apache Tiles integration with Spring MVC
+
+
\ No newline at end of file
diff --git a/spring-mvc-tiles/src/main/webapp/WEB-INF/views/pages/springmvc.jsp b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/pages/springmvc.jsp
new file mode 100644
index 0000000000..209b1004de
--- /dev/null
+++ b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/pages/springmvc.jsp
@@ -0,0 +1,12 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+ pageEncoding="ISO-8859-1"%>
+
+
+
+
+Spring MVC
+
+
+Spring MVC configured to work with Apache Tiles
+
+
\ No newline at end of file
diff --git a/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/layouts/defaultLayout.jsp b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/layouts/defaultLayout.jsp
new file mode 100644
index 0000000000..9b727473f9
--- /dev/null
+++ b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/layouts/defaultLayout.jsp
@@ -0,0 +1,25 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+ pageEncoding="ISO-8859-1"%>
+<%@ page isELIgnored="false"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/templates/defaultFooter.jsp b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/templates/defaultFooter.jsp
new file mode 100644
index 0000000000..3849cc5230
--- /dev/null
+++ b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/templates/defaultFooter.jsp
@@ -0,0 +1,2 @@
+
+
diff --git a/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/templates/defaultHeader.jsp b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/templates/defaultHeader.jsp
new file mode 100644
index 0000000000..8a878c857d
--- /dev/null
+++ b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/templates/defaultHeader.jsp
@@ -0,0 +1,3 @@
+
+ Welcome to Spring MVC integration with Apache Tiles
+
\ No newline at end of file
diff --git a/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/templates/defaultMenu.jsp b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/templates/defaultMenu.jsp
new file mode 100644
index 0000000000..fdfbdc8a14
--- /dev/null
+++ b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/templates/defaultMenu.jsp
@@ -0,0 +1,8 @@
+
\ No newline at end of file
diff --git a/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/tiles.xml b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/tiles.xml
new file mode 100644
index 0000000000..789fbd809a
--- /dev/null
+++ b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/tiles.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-mvc-tiles/src/main/webapp/static/css/app.css b/spring-mvc-tiles/src/main/webapp/static/css/app.css
new file mode 100644
index 0000000000..9976e5406e
--- /dev/null
+++ b/spring-mvc-tiles/src/main/webapp/static/css/app.css
@@ -0,0 +1,36 @@
+.flex-container {
+ display: -webkit-flex;
+ display: flex;
+ -webkit-flex-flow: row wrap;
+ flex-flow: row wrap;
+ text-align: center;
+}
+
+.flex-container > * {
+ padding: 15px;
+ -webkit-flex: 1 100%;
+ flex: 1 100%;
+}
+
+.article {
+ text-align: left;
+}
+
+header {background: black;color:white;}
+footer {background: #aaa;color:white;}
+.nav {background:#eee;}
+
+.nav ul {
+ list-style-type: none;
+ padding: 0;
+}
+
+.nav ul a {
+ text-decoration: none;
+}
+
+@media all and (min-width: 768px) {
+ .nav {text-align:left;-webkit-flex: 1 auto;flex:1 auto;-webkit-order:1;order:1;}
+ .article {-webkit-flex:5 0px;flex:5 0px;-webkit-order:2;order:2;}
+ footer {-webkit-order:3;order:3;}
+}
\ No newline at end of file