9.1 什么是Apache Tiles?
Apache Tiles是一个JavaEE应用的页面布局框架。Tiles框架提供了一种模板机制,可以为某一类页面定义一个通用的模板,该模板定义了页面的整体布局。布局由可以复用的多个块组成,每个页面可以有选择性的重新定义块而达到组件的复用。
Tiles最先作为Apache Struts框架的一个组件,后来被独立为Apache的一个独立项目。
特点
1,模板机制的页面布局功能
2,灵活的布局重构机制。使用模板的页面,可以直接在JSP里使用Tiles提供的标签重新定义块元素,也可以使用类似tiles.xml等配置文件定义。
3,易于与Struts,Shale,JSF等框架集成 。
9.2 实例目标
在本文中,我将向您展示如何创建Spring Boot应用程序,如何 使用JSP设计界面组件 以及如何使用 Apache Tiles 将界面组件放在一起以形成一个完整的站点。
9.3 创建Spring Boot项目
输入:
- Name: SpringBootJspTiles
- Group:me.laocat
- Artifact: SpringBootJspTiles
- Description: Spring Boot + Apache Tiles + JSP
- Package: me.laocat.tiles
SpringBootJspTilesApplication.java
package me.laocat.tiles;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class SpringBootTilesApplication {public static void main(String[] args) {SpringApplication.run(SpringBootTilesApplication.class, args);}}
9.4 配置pom.xml
在pom.xml文件中声明jsp/servlet和apache Tiles所需的库。
JSP/Servlet + Tiles
org.apache.tomcat.embed tomcat-embed-jasperjavax.servlet jstlorg.apache.tiles tiles-api 3.0.8org.apache.tiles tiles-core 3.0.8org.apache.tiles tiles-servlet 3.0.8org.apache.tiles tiles-jsp 3.0.8org.apache.tiles tiles-request-api 1.0.6
pom.xml文件 的完整内容 :
<?xml version="1.0" encoding="UTF-8"?>4.0.0org.springframework.bootspring-boot-starter-parent2.1.3.RELEASEme.laocatSpringBootTiles0.0.1-SNAPSHOTSpringBootTilesSpring Boot and Apache Tiles1.8org.springframework.bootspring-boot-starter-thymeleaforg.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-testtestorg.apache.tomcat.embedtomcat-embed-jasperjavax.servletjstlorg.apache.tilestiles-api3.0.8org.apache.tilestiles-core3.0.8org.apache.tilestiles-servlet3.0.8org.apache.tilestiles-jsp3.0.8org.apache.tilestiles-request-api1.0.6org.springframework.bootspring-boot-maven-plugin
9.5 配置Tiles View解析器
TilesConfig.java
package me.laocat.tiles.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.ViewResolver;import org.springframework.web.servlet.view.UrlBasedViewResolver;import org.springframework.web.servlet.view.tiles3.TilesConfigurer;import org.springframework.web.servlet.view.tiles3.TilesView;@Configurationpublic class TilesConfig {@Bean(name = "viewResolver") public ViewResolver getViewResolver() { UrlBasedViewResolver viewResolver = new UrlBasedViewResolver(); // TilesView 3 viewResolver.setViewClass(TilesView.class); return viewResolver; } @Bean(name = "tilesConfigurer") public TilesConfigurer getTilesConfigurer() { TilesConfigurer tilesConfigurer = new TilesConfigurer(); // TilesView 3 tilesConfigurer.setDefinitions("/WEB-INF/tiles.xml"); return tilesConfigurer; }}
9.6 Tiles定义和布局
tiles.xml文件是您在应用程序中定义页面并声明每个页面的组件的地方。
tiles.xml
<?xml version="1.0" encoding="UTF-8"?>
classic.jsp文件用于放置要在界面上显示的组件,例如,以下插图:
classic.jsp
9.7 JSP片段
/WEB-INF/basefragments/menu.jsp
菜单
首页 联系我们
/WEB-INF/basefragments/header.jsp
页头
我的网站
搜索
/WEB-INF/basefragments/footer.jsp
网页底部
@Copyright laocat.me
/WEB-INF/bodyfragments/home.jsp
首页
欢迎访问
这是网页首页
/WEB-INF/bodyfragments/contactus.jsp
联系我们联系我们: laocat.me
地址: ${address}
电话: ${phone}
邮件: ${email}
9.8 控制器
WebController.java
package me.laocat.tiles.controller;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;@Controllerpublic class WebController { @RequestMapping(value = { "/", "/home" }, method = RequestMethod.GET) public String homePage(Model model) { return "homePage"; } @RequestMapping(value = { "/contactus" }, method = RequestMethod.GET) public String contactusPage(Model model) { model.addAttribute("address", "Vietnam"); model.addAttribute("phone", "..."); model.addAttribute("email", "..."); return "contactusPage"; }}