tiles框架简单学习

大家好,我是IT修真院武汉分院第15期学员,一枚正直善良的JAVA程序员。

今天给大家分享一下,修真院官网JAVA任务4中需要使用的tiles框架



1.背景介绍

最早的Tiles是组装在Struts1.1里面的,主要目的是为了将jsp页面模块化,然后用来组合成一个最终展示页面用的,这样的话,便于对页面的各个模块的变更及维护。

现在Tiles已经作为一个Apache独立的开源项目维护着。

Tiles框架就是一种页面复用体系,我们在设计前端jsp页面时,可能会有很多页面重复的地方,在每个页面上都写上相同的代码块,极大的降低了效率,为了解决代码不可复用的问题,Tiles框架应运而生。




2.知识剖析

tiles是什么

复合视图模式


所有的网站都有一些共同点:它们由共享类似结构的页面组成。页面共享相同的布局,而每个页面由不同的独立部分组成,但是相同的部分终放置在整个站点的相同位置。Tiles 是复合视图模式的一个实现。Tiles将该模式添加到自己的概念中是该模式具体化。Tiles的实现是以复合式模式为理论,   概念包括:Template,Attribute和Definition。

模板:Template
在Tiles中,模板(Template)是一个页面的布局部分。你能将一个页面结构看成是由不同的需要填补空白组成。


注意:一个模板(Template)可以没有属性(attributes),这种情况下该模板可以直接使用。有属性的话就要先定义属性才能使用,不然的话就会在解析jsp页面的时候报错


属性:Attribute

属性是模板中的空白,它在你的应用程序中被填充到模板中。

属性又分为三种

string:属性是string的话,会将string直接呈现在页面。
template:属性是一个模板(Template),有无属性都行。如果有属性的话,你也要将他们填充后再呈现页面。
definition:它是一个可重复使用组成的页面,包含所有的属性来填充以呈现页面。


定义:definition

定义是呈现给最终用户的组合物;本质上,一个定义是由一个模板和完全或部分填充的属性组成的。说白了就是:一个定义是由一个模板和属性组成的。



3.常见问题

提问: 如何使用Tiles框架



4.解决方案

回答:将Tiles整合进Spring mvc,在controller里不能返回jsp页面,要返回逻辑视图名



5.编码实战

<tiles-definitions>
    <definition name="homepage" template="/WEB-INF/jsp/homepage.jsp">
        <put-attribute name="title" value="首页" />
        <put-attribute name="head" value="/WEB-INF/jsp/tiles/head.jsp" />
        <put-attribute name="nav" value="/WEB-INF/jsp/tiles/nav.jsp" />
        <put-attribute name="top" value="/WEB-INF/jsp/tiles/top.jsp" />
        <put-attribute name="body" value="/WEB-INF/jsp/tiles/body1.jsp" />
        <put-attribute name="footer" value="/WEB-INF/jsp/tiles/foot.jsp" />
    </definition>
</tiles-definitions>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>

<head>
    <%-- 页面 title --%>
    <title><tiles:insertAttribute name="title"/></title>
        <tiles:insertAttribute name="head"/>
</head>
<body>
    <tiles:insertAttribute name="top"/>
    <tiles:insertAttribute name="nav"/>
    <tiles:insertAttribute name="body"/>
    <tiles:insertAttribute name="footer"/>
</body>





6.扩展思考

思考一:include也可以实现多个jsp共用一个jsp的内容,为什么要使用tiles呢?

思考二:关于视图解析器的优先级


回答一:刚接触web开发的人或许知道jsp可以通过include标签动态插入一个jsp页面,这样可以实现多个jsp页面共用一个jsp的容.但是如果有一个超级大网站,jsp页面数以万计呢?

Tiles就是为你解决这种需求的

如果我们一个网站的布局基本一致,这个时候,我们最好定义一个模板,如test.jsp 

如果我们不使用tiles,则在每个页面按位置include相关的页面,当页面布局发生改变的时候,我们去掉左边的一部分,这个时候需要每个页面上去删除相应的include语句;

但如果我们采用tiles的话,就只需要更改test.jsp就行了. tiles为了更改的规范网站布局,采用模板机制使布局维护更简单.


回答二:在Spring MVC应用程序中,我们经常需要应用一些视图解析器策略来解析视图名称。如果返回了一个视图的名称,那么,使用哪一个视图解析器策略?

如果应用了多个视图解析器策略,那么就必须通过“order”属性来声明优先级,order值越低,则优先级越高


7.参考文献

Apache Tiles的基本使用:https://my.oschina.net/jast90/blog/284254
分分钟知道tiles框架是干嘛的:http://blog.csdn.net/qq_27093465/article/details/48650719
SpringMVC视图解析器:配置多个视图解析器的优先级:http://blog.csdn.net/wang1988081309/article/details/51895482


8.更多讨论

今天的分享就到这里啦,欢迎大家提问和探讨!

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页