分分钟知道tiles框架是干嘛的

分分钟知道tiles框架是干嘛的

http://blog.sina.com.cn/s/blog_a123d4d50101792d.html
参考上面的文章,简单明了。让你一下子就知道这个是用来做什么的。
不像某些文章,啰嗦半天,完全不知道在干吗。
只要了解作用,

若要了解具体知识点,请百度其他知识点吧。

看到这里,你大概知道了这个tile是干嘛用的了吧

就是可以把页面 分成一块块的,然后摆在一起。方便维护。

下面还有个更好的文章,在上面的的基础上,可以更好的理解下。

摘自:http://www.tuicool.com/articles/ZbMn2a

1.为何选用Tiles

刚接触Java Web开发的人都知道,JSP中可以通过include标签动态插入一个JSP页面。在了解这个功能后可能会兴奋不已,因为这样可以实现多个JSP页面共用一个JSP的内容。

现在,假如有一个超级大的电子商务网站,网站拥有10万个JSP页面(悄悄告诉你,这仅仅是一个假设),并且每个JSP都引用了同一个JSP(我们称这个JSP页面为A吧)。现在你就是这个网站的开发人员,有一天老板跑到你面前说:“大量用户反馈页面A设计得太丑,严重影响用户体验,如果不在今天之内改进,他们就集体去竞争对手那里购物,所以你今天必须要让页面A从网站上消失,否则炒鱿鱼走人”,这个凶神恶霸的老板说完就甩手走出去了,你没有任何辩解的机会。这时,恐怕你不会觉得自己一人能够搞定,那怎么办?程序员都有很多好基友,找一百个基友来一起改,每人只需要改1000个页面。不然,只有垂头丧气地收拾好东西离职了。

那么,要是有一天老板又跑过来找你,让你为每个JSP页面的底部加一个跳舞的小黄人,又该怎么办呢?先找前端工程师设计好跳舞的小黄人,然后用include标签插入到10万个JSP页面。10万个啊,又得请一百个好基友帮忙了!要是老板后面又要在网站顶端加一只唱歌的小鸟、在网站右边加一个工具栏…估计你的好基友要用砖头来砸你了。

那有没有一种方法,可以不用请一百个好基友帮忙,就可以在十分钟之内完成老板交给你的任务?也许你会觉得这简直是胡说八道,在十分钟内改完10万个JSP页面就是一种疯狂的想法。也许这是对的,就是一个疯狂的想法,不清楚Tiles的设计者当初也是否受到过这种老板的虐待,所以才设计出了这样一个疯狂的产品—— Tiles 。

没错,Tiles就是为你遇到的这种需求服务的。一旦你在网站系统中使用了Tiles技术,若老板让你删除10万个页面所引用的一个JSP,如果你的速度快的话,你可以在10秒钟之内解决。那要想再让这10万个页面去引用一个JSP呢?也是一样的操作,非常简单。

2. 初相识

本文所讲的示例使用spring MVC框架(也可以使用Struts,使用方法和本文类似),为工程添加Tiles特性很容易,若是Maven项目,直接在pom.xml中添加以下依赖即可:

<dependency>
  <groupId>org.apache.tiles</groupId>
  <artifactId>tiles-extras</artifactId>
  <version>3.0.5</version>
</dependency>

这个就是在springMVC里面的东西,这个就是定义一个依赖关系。

新建一个布局文件,命名为layout.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="layout" template="/mainLayout.jsp">
  </definition>
  <!-- 主布局 -->
  <!-- 项目 -->
    <definition name="myView" extends="layout">
    <put-attribute name="a" value="/a.jsp" />
    <put-attribute name="b" value="/b.jsp" />
  </definition>
  <!--项目-->
</tiles-definitions>

其中,mainLayout.jsp就是我们的主布局模板,它决定整个网页需要显示的内容以及显示到什么地方。而a.jsp和b.jsp就是模板里需要显示的两个引用页面。简而言之,mainLayout.jsp这个页面引用了a.jsp和b.jsp两个页面。mainLayout.jsp页面的内容如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<%@ taglib uri="http://tiles.apache.org/tags-tiles-extras" prefix="tilesx" %>
<div>
  <tiles:insertAttribute name="a" />
  <tiles:insertAttribute name="b" />
</div>

a表示在这里插入的a.jsp,b表示将要在这里插入的b.jsp。a.jsp和b.jsp中的内容就随意了,这里我们在a.jsp的内容是”我是a.jsp“,b.jsp 的内容是 ”我是b.jsp“,具体的代码就不贴了。 
然后,我们需要为Tiles配置视图解析器,在springMVC-servlet.xml(MVC的配置文件,不懂的先百度查询一下)中添加以下内容:

<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.tiles3.TilesViewResolver" p:order="1"/>
    <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
        <property name="definitions">
            <list>
                <value>classpath:layout.xml</value>
            </list>
        </property>
</bean>

其中的layout.xml即为前文所建立的布局配置文件,p:order="1"表示优先级,数字越小,解析器的优先级越高。 
现在,我们就要为视图编写控制器了,我们写一个控制器命名为TestController.Java,主要代码如下:

@RequestMapping("/test")
public String testView() {
  return “myView”; //这里的myView为layout.xml中配置的视图名称,根据返回值,去匹配对应的jsp页面
}

运行Web程序,输入xxx/test(xxx为url前缀)可以看到“我是a.jsp “和”我是b.jsp “显示出来。 
也许你开始纳闷了,忙活了这么久,没有发现可以利用Tiles在十秒内解决老板交代的任务啊!别急,好戏还在后面!

3. 进入主题 
刚才我们通过访问 xxx/test ,就访问到了引入了a.jsp和b.jsp主布局页面,那么Tiles是怎么做到的呢?当Spring MVC的DispatchServlet收到来自浏览器的请求后,分析出需要请求的控制器,然后访问解析出来的控制器TestController的testView方法,接着就开始解析视图了。因为我们用的是Tiles的视图解析器,激情饱满的二级制代码就访问到了layout.xml,最后根据layout.xml的配置组装成我们看到的页面。那如何解决大量页面引用同一个页面的问题呢? 
如果只能为每一个项目页面在layout.xml中建立一个definition块,那么Tiles都没有完美地解决问题,如果你想避免被老板炒鱿鱼,在创建页面的时候,需要为10万个页面各自建立一个definition块,并引入公共的页面A,当老板不喜欢这个页面A的时候,你需要在这10万个definition块中删除A,这样的工作量还是很大的。所以, Tiles展现威力的时候到了。 
我们改写layout.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="layout" template="/mainLayout.jsp">
  </definition>
  <!-- 主布局 -->
  <!-- 项目 -->
   <definition name="myView" extends="layout">
    <put-attribute name="A" value="/A.jsp" />
    <put-attribute name="item" expression="/${item}.jsp" />
   </definition>
   <!--项目-->
</tiles-definitions>

这里的A.jsp就是你老板深恶痛绝的页面,而${item}.jsp就代表着你们网站的10万个项目页面(这里用到了EL表达式,如果有不懂的,可以先百度了解一下)。

${item}.jsp这个呢就是你返回什么,我接受什么,然后再去查找到对应的jsp页面,所以这个definition相当于是个泛型,可以泛指很多的页面,运行时绑定到页面,这么一说就好理解了吧。

再修改mainLayout.jsp页面:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<%@ taglib uri="http://tiles.apache.org/tags-tiles-extras" prefix="tilesx" %>
<div>
  <tiles:insertAttribute name="A" />
  <tiles:insertAttribute name="item" />
</div>

A表示A.jsp中的内容,而item就代表那10万个项目页面。 
继续修改TestController.java,将testView改为introductionView:

public String introductionView(Model model) {
    model.addAttribute("item","introduction");//这个就是给返回值添加个属性,在页面可以直接得到item,
//${item}   在jsp页面就可以得到后台返回的值。
return “myView”; //这里的myView为layout.xml中配置的视图名称}

这里假设introduction.jsp为公司介绍页面,当访问introductionView时,layout.xml中${item}.jsp就能匹配到introduction.jsp。那么,如果还有一个兔子页面rabbit.jsp,那么通过访问rabbitView就能访问到兔子页面…现在,如果你把10万个页面都这样设计,老板让你删除A页面,知道如何删除吗?告诉你,直接把layout.xml的myView中的A属性删除就可以了,10秒钟是不是太多了?是的,Titles就这么神奇。

这我当时疑惑的是,你删除layout.xml的属性A,那么在mainLayout.jsp里面不是还引用了属性A么,难道没问题么,

经询问之后,是酱紫的,要是在组装的时候没有这个子元素,那么他在那个容器页面就组装不到。就木有。那么 所有页面就都没有A这个属性了。

时间: 2024-10-31 02:11:03

分分钟知道tiles框架是干嘛的的相关文章

Struts Tiles框架使用(转)

原文:Struts Tiles框架使用 Tiles框架 ++YONG原创,转载请声明 Tiles框架为创建Web页面提供了一种模板机制,它能将网页的布局和内容分离.它用模板定义网页布局,每个页面模板都是一个简单的 JSP 页,它定义了一些由占位符组成的外形,以放置内容.执行时,Tiles 将会用相应的内容来替换占位符,因此,创建整个页面即形成布局.Tiles框架是建立在JSP的include指令基础上的,但它提供了比JSP的include指令更强大的功能.Tiles框架具有如下特性: 1.   

Springmvc整合tiles框架简单入门示例(maven)

Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积分下载): http://download.csdn.net/detail/zhangbing2434/9435460(这里用的是Idea,eclipse,导入的时候可能会有些差异) 1.tiles依赖的jar包:     maven代码: <dependency> <groupId>

Tiles 框架 (一)---Tiles入门和Tiles 框架和体系结构

入门 本教程所讲述的内容 本教程讲述如何使用 Tiles 框架来创建可重用的表示组件.(在最初创建它时,Tiles 框架被命名为 Components. 后来改变了名称是因为"components(组件)"代表了太多不同的东西,不过原先的名称的精髓仍然得到了保留.) 然而,除了站点布局之外,使用 tile 还能做其他许多事情.例如,您可以划分表示层以更好地重用布局.HTML以及其他可视组件. 本教程力图揭示使用 Tiles 框架的基础,然后让您的知识再上一个台阶.当完成本教程的学习时,

搭建一个全栈式的HTML5移动应用框架(纯干货,亲!)

打开HTML5的技术网站,满屏的“5个推荐的JavaScript框架”.“10个移动应用框架”,全都是你妹的框架, 但是,你知道这些框架是干毛用的吗?来吧,我们来梳理一下吧 目前HTML5涉及的框架大致可以分成以下几类: 1.跨平台开发框架:PhoneGap . Titanium. Trigger.IO(商业) 这类框架是向web提供底层硬件的接口,让开发人员可以用WEB的技术开发出Native APP. 2.UI框架:jQuery Mobile. Sencha Touch. jqMobi 这类

使用 Apache Tiles 3 构建页面布局(一)

参考博客:http://aiilive.blog.51cto.com/1925756/1596059Apache Tiles是一个JavaEE应用的页面布局框架.Tiles框架提供了一种模板机制,可以为某一类页面定义一个通用的模板,该模板定义了页面的整体布局.布局由可以复用的多个块组成,每个页面可以有选择性的重新定义块而达到组件的复用.Tiles最先作为Apache Struts框架的一个组件,后来被独立为Apache的一个独立项目.Tiles项目主页:http://tiles.apache.o

从零开始编写自己的C#框架(28)——建模、架构与框架

文章写到这里,我一直在犹豫是继续写针对中小型框架的设计还是写些框架设计上的进阶方面的内容?对于中小型系统来说,只要将前面的内容进行一下细化,写上二三十章具体开发上的细节,来说明这个通用框架怎么开发的就已完全足够了,因为对于中小型系统来说,并不是很复杂,简单的了解三层架构就已经够用了,而使用太多的设计反而有点罗嗦,因为基本上没有什么人会为中小型系统花费太多的设计工作.而对于设计大型平台的框架设计,又深深感到自己的积累还远远不够,写出来怕会误导大家.但不换个思维来讲述也很难说清框架的设计思想,别人拿

Tiles Framework

tiles framework 详解tiles framework 详解 就是一个页面模版引擎.可以渲染页面,属于视图层. 下面给你拷贝一份详细的tiles介绍,你可以初步了解一下. Tiles框架特性和内容 Tiles框架为创建Web页面提供了一种模板机制,它能将网页的布局和内容分离.它允许先创建模板,然后在运行时动态地将内容插入到模板中.Tiles 框架建立在JSP的include指令的基础上,但它提供了比JSP的 include指令更强大的功能.Tiles框架具有如下特性: ·创建可重用的

Tiles &amp; SiteMesh

Tiles & SiteMesh 这两天在给公司的新项目搭框架,在配tiles框架的时候发现一个小问题:    比如开发团队一共5人,每人10个页面,如果按照简单的tiles框架配置方法,每个<definition/>中都会产生很多重复 的<put name="top" value="xxx.jsp"/>代码,导致tiles-defs.xml文件不段的膨胀.    仔细想了想tiles框架的原理,如果tiles支持嵌套功能的话,虽然t

Struts MVC 框架 (让你一步步成为高手)

web应用的分层 交互层,表现数据,收集数据,也就是视图层,接受请求,通过处理层完成相应的响应.(V,C) 处理层,完成数据的处理,也就是业务层(M). MVC设计模式(应用观察者模式的框架模式) M model,模型,操作数据的业务处理层. V view,示图,采集和显示数据,为业务层提供数据,表现业务层输出的数据,只关心数据的类型,不管新数据的来源. C ctrl,控制器,也就是视图层和模型层桥梁,控制数据的流向,接受视图层发出的事件,并重绘视图. MVC框架的实现模型 模型一: JSP+J