为什么要使用Tiles框架?
1.背景介绍
Tiles框架就是一种JSP页面复用体系,我们在设计前端jsp页面时,可能会有很多页面重复的地方,在每个页面上都写上相同的代码块,极大的降低了效率,为了解决代码不可复用的问题,Tiles框架应运而生。
所有的网站都有一些共通的东西:所有的网站都是有网页构成,而且它们彼此分享着共通的结构。这些页面有着共通的布局,但是页面和页面之间又有不同的地方,而且不同的地方通常都在同样的位置。
Tiles起源
最早的Tiles是组装在Struts1.1里面的(Struts-Tiles),后面发展为独立的Tiles框架,现在Tiles已经作为一个Apache独立的开源项目维护着。
Tiles作用
Tiles允许作者定义页面片段,这些片段可以在运行时被组合成一个完整的页面,这些片段或片可以被简单的包括在内,以便减少常见的页面元素的重复或者嵌入在其他的片中以开发一系列可重复使用的模板。 这些模板简化了整个应用程序中一致的外观和感觉的开发。
2.知识剖析
TILES框架
Tiles框架可以令我们组合可以复用的Tiles来搭建网页。例如,图中的页面就是通过组合一个head, 一个foot, 一个right和一个body搭建起来的。每一个Tiles(head, foot, body, ...)都是一个JSP页面,它们也可以通过组合其他的Tiles来搭建。
在Tiles中,模板是页面的布局部分,每个页面都是由模板文件和碎片文件来组合生成的。
经典布局的页面结构包括:Header,Menu,Body,Footer
head页面头部:存放一个运用的公共信息:logo等,如果是网站可能是最上面的一块。
menu页面菜单:放置一个运用中需要使用的菜单,或者在每一个页面都使用的连接。
body页面主题内容:每个页面相对独立的内容。
footer页面尾部:如版权信息等。
嵌套TILES
一个 tile 布局可以插入到另一个 tile 布局中,依此类推。实际上,创建的 tile 布局如此之 小,以至于它们本身并不是真正的模板。相反,它们是更类似于自定义标签的小型可视组件,而不是页面模板。
TILES运行流程
当Spring MVC的DispatchServlet收到来自浏览器的请求后,分析出需要请求的控制器,然后访问解析出来的控制器StudentController的home方法,接着就开始解析视图了。因为我们用的是Tiles的视图解析器,激情饱满的二级制代码就访问到了layout.xml,最后根据layout.xml的配置组装成我们看到的页面。
3、常见问题
1)为什么要用Tiles框架?
2)怎么引入tiles框架?
3)要使用tiles框架,需要用到哪些jar包?
解决方案
1)为什么要用Tiles框架?
a)为了复用重复模块,固定不变的头、脚、导航页。shas少写很多重复代码。
b)方便修改、维护。
2)怎么引入tiles框架?
web.xml中的taglib属性,将tiles标签配进去
3)要使用tiles框架,需要用到哪些jar包
<!--tiles系列-->
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-core</artifactId>
<version>${tiles.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-jsp</artifactId>
<version>${tiles.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-servlet</artifactId>
<version>${tiles.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-api</artifactId>
<version>${tiles.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-template</artifactId>
<version>${tiles.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
5.编码实战
框架配置
<!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.definition" template="/WEB-INF/jsp/template.jsp">
<put-attribute name="title" value=""/>
<put-attribute name="head" value="/WEB-INF/jsp/head.jsp"/>
<put-attribute name="body" value=""/>
<put-attribute name="foot" value="/WEB-INF/jsp/foot.jsp"/>
</definition>
<!--首页-->
<definition name="home" extends="base.definition">
<put-attribute name="title" value="首页"/>
<put-attribute name="body" value="/WEB-INF/jsp/home.jsp"/>
</definition>
<!--职业展示页-->
<definition name="career" extends="base.definition">
<put-attribute name="title" value="职业"/>
<put-attribute name="body" value="/WEB-INF/jsp/career.jsp"/>
</definition>
<!--登录界面-->
<definition name="login" extends="base.definition">
<put-attribute name="title" value="登录界面"/>
<put-attribute name="body" value="WEB-INF/jsp/login.jsp"/>
</definition>
</tiles-definitions>
6.扩展思考
1)为什么要用Tiles框架?
a)为了复用重复模块,固定不变的头、脚、导航页。shas少写很多重复代码。
b)方便修改、维护。
2)怎么引入tiles框架?
web.xml中的taglib属性,将tiles标签配进去
3)要使用tiles框架,需要用到哪些jar包
<!--tiles系列-->
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-core</artifactId>
<version>${tiles.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-jsp</artifactId>
<version>${tiles.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-servlet</artifactId>
<version>${tiles.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-api</artifactId>
<version>${tiles.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-template</artifactId>
<version>${tiles.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
7. 参考文献
百度、CDNS、官方文档
8. 更多讨论
1)为什么要用Tiles框架?
a)为了复用重复模块,固定不变的头、脚、导航页。shas少写很多重复代码。
b)方便修改、维护。