Spring Tiles
Working sample: https://github.com/teachkoka/spring-tiles
mvc-dispatcher-servlet.xml
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> <property name="order" value="0"/> <property name="viewClass"> <value> org.springframework.web.servlet.view.tiles3.TilesView </value> </property> </bean> <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer"> <property name="definitions"> <list> <value>/WEB-INF/tiles.xml</value> </list> </property> </bean>
tiles.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN" "http://tiles.apache.org/dtds/tiles-config_3_0.dtd"> <tiles-definitions> <definition name="base.defination" template="/WEB-INF/pages/layout.jsp"> <put-attribute name="title" value=""/> <put-attribute name="header" value="/WEB-INF/pages/header.jsp"/> <put-attribute name="menu" value="/WEB-INF/pages/menu.jsp"/> <put-attribute name="body" value=""/> <put-attribute name="footer" value="/WEB-INF/pages/footer.jsp" /> </definition> <definition name="student-login" extends="base.defination"> <put-attribute name="title" value="student login"/> <put-attribute name="body" value="/WEB-INF/pages/student-login.jsp"/> </definition> <definition name="result/success" extends="base.defination"> <put-attribute name="title" value="success page"/> <put-attribute name="body" value="/WEB-INF/pages/result/success.jsp"/> </definition> </tiles-definitions>
AppConfig
package com.b8.spring.javaconfig.config; import javax.sql.DataSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.support.ResourceBundleMessageSource; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.springframework.web.servlet.view.UrlBasedViewResolver; import org.springframework.web.servlet.view.tiles3.TilesConfigurer; @Configuration @ComponentScan(basePackages={"com.b8.spring.javaconfig"}) @EnableWebMvc public class AppConfig { @Bean public DataSource dataSource(){ DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("org.postgresql.Driver"); dataSource.setUrl("jdbc:postgresql://127.0.0.1:5432/postgres"); dataSource.setUsername("postgres"); dataSource.setPassword("abcd12345"); return dataSource; } @Bean public JdbcTemplate jdbcTemplate(){ JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource()); return jdbcTemplate; } @Bean public TilesConfigurer getTilesConfigurer() { TilesConfigurer tilesConfigurer = new TilesConfigurer(); tilesConfigurer.setDefinitions(new String[] { "/WEB-INF/tiles.xml" }); tilesConfigurer.setCheckRefresh(true); return tilesConfigurer; } @Bean public UrlBasedViewResolver viewResolver(){ UrlBasedViewResolver ubvr = new UrlBasedViewResolver(); ubvr.setOrder(0); ubvr.setViewClass(org.springframework.web.servlet.view.tiles3.TilesView.class); return ubvr; } /* @Bean public InternalResourceViewResolver viewResolver(){ InternalResourceViewResolver irvr = new InternalResourceViewResolver(); irvr.setPrefix("/WEB-INF/pages/"); irvr.setSuffix(".jsp"); return irvr; }*/ @Bean public ResourceBundleMessageSource messageSource(){ ResourceBundleMessageSource rbms = new ResourceBundleMessageSource(); rbms.setBasename("messages"); return rbms; } }
AppInitializer.java
package com.b8.spring.javaconfig.config; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRegistration.Dynamic; import org.springframework.web.WebApplicationInitializer; import org.springframework.web.context.ContextLoaderListener; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import org.springframework.web.servlet.DispatcherServlet; public class AppInitializeer implements WebApplicationInitializer{ public void onStartup(ServletContext servletContext) throws ServletException { AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); context.register(AppConfig.class); servletContext.addListener(new ContextLoaderListener(context)); Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(context)); servlet.addMapping("/"); servlet.setLoadOnStartup(1); } }
Layout.jsp
<table border="1" cellpadding="2" cellspacing="2" align="center"> <tr> <td height="30" colspan="2"> <tiles:insertAttribute name="header"/> </td> </tr> <tr> <td height="250"><tiles:insertAttribute name="menu"/></td> <td width="350"><tiles:insertAttribute name="body"/> </td> </tr> <tr> </tr><td height="30" colspan="2"> <tiles:insertAttribute name="footer"/> </td> </table>
BootStrap
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> </head> <body> <div class="container"> <div class="table-responsive"> <table class="table" > <tr> <td height="100" colspan="2" style="background-color: Azure; border: thick;font: bold;"> <tiles:insertAttribute name="header"/> </td> </tr> <tr> <td height="250" width="200" style="background-color:BurlyWood; border: thick;font: bold;"> <tiles:insertAttribute name="menu"/> </td> <td height="350" width="400" style="background-color: lightblue; border: thick;font: bold;"> <%-- <tiles:insertAttribute name="title" /><br>--%> <tiles:insertAttribute name="body"/> </td> </tr> <tr> <td height="100" colspan="2" style="background-color: Azure; border: thick;font: bold;"> <tiles:insertAttribute name="footer"/> </td> </tr> </table> </div> </div> </body> </html>