IT修真院·小课堂丨互联网职业小课堂在线学习平台

课堂课题:

Tiles有什么用处,为什么要用Tiles,如果不使用Tiles,可以实现公共部分的复用吗?

关联任务:

任务五

直播时间:

2019-06-14 15:30:00


课堂内容:

视频链接:

PPT链接:

提交按钮:

小课堂内容格式


标题:

【修真院xx(职业)小课堂】课题名称

开场语:

大家好,我是IT修真院XX分院第X期的学员XX,一枚正直纯洁善良的XX程序员,今天给大家分享一下,修真院官网XX(职业)任务X,深度思考中的知识点——XXX

(1)背景介绍:

背景介绍的时候,尽可能的要宽广,讲清楚来龙去脉,讲清楚为什么会需要这个技术。

(2)知识剖析:

讲知识点的时候,尽可能的成体系,学会成体系的去给别人介绍知识。现在很多做的都是零散的,没有分类。

(3)常见问题:

最少列出1个常见问题。

(4)解决方案:

写清楚常见问题的解决方案。

(5)编码实战:

尽可能的去寻找在真实项目中在用的。如果你能找到某个网站在用你说的知识点,这是最好的。学以致用,否则当成练习题就没有意义了。多准备一些demo,讲解过程中将知识点和demo结合,便于大家理解所讲解的知识点。

(6)拓展思考:

知识点之外的拓展思考,由分享人进行讲解,这些东西就是所谓的深度,也是一个人技术水准高低比较的表现。

(7)参考文献:

引入参加文献的时候,在引用的句子后面加上序号【1】。参考文献中列出详细来源。不要去抄别人的东西,这是一个基本的态度。

(8)更多讨论:

Q1:提问人:问题?
A1:回答人(可以是分享人,也可以是其他学员):回答
Q2:提问人:问题?
A2:回答人(可以是分享人,也可以是其他学员):回答
Q3:提问人:问题?
A3:回答人(可以是分享人,也可以是其他学员):回答

(9)鸣谢:

感谢XX、XX师兄,此教程是在他们之前技术分享的基础上完善而成。

(10)结束语:

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

Tiles有什么用处,为什么要用Tiles,如果不使用Tiles,可以实现公共部分的复用吗?    

辅导师兄


【修真院Java小课堂】

 

    大家好,我是IT修真院武汉分院第18期的学员徐海鹏,一枚正直纯洁善良的Java程序员,今天给大家分享一下,修真院官网java任务四,深度思考中的知识点——Tiles有什么用处,为什么要用Tiles,如果不使用Tiles,可以实现公共部分的复用吗?


(1)背景介绍:

假如有一个超级大的电子商务网站,网站拥有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)知识剖析:

    tiles的作用

    ● 所有的网站都有一些共同点:它们由共享类似结构的页面组成。页面共享相同的布局,而每个页面由不同的独立部分组成,但始终放置在整个站点的相同位置。

    ● 为了方便大家理解,我们来看一个例子。点开下面俩个的图片链接

    https://img-blog.csdn.net/20150922113517630

    https://img-blog.csdn.net/20150922113536661


    tiles的配置

    ● 定义:definition

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


    模板:Template

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

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


    属性:Attribute

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


(3)常见问题:

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


(4)解决方案:

    刚接触web开发的人或许知道jsp可以通过include标签动态插入一个jsp页面,这样可以实现多个jsp页面共用一个jsp的内容.但是如果有一个超级大网站,jsp页面以万计呢?所以tiles框架的模板复用对于大型项目由非常好的适用性。


(5)编码实战:

tles.xml配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
     "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
     "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">
<tiles-definitions>
  <!--tiles基础模板-->
  <!--主布局-->
  <definition name="baseTemplate" template="/WEB-INF/view/Template.jsp">
     <!--页面模块定义-->
     <put-attribute name="tittle" value="IT修真院"/>
     <put-attribute name="top" value="/WEB-INF/view/layout/Top.jsp"/>
     <put-attribute name="head" value="/WEB-INF/view/layout/Head.jsp"/>
     <put-attribute name="menu" value="/WEB-INF/view/layout/Menu.jsp"/>
     <put-attribute name="body" value=""/>
     <put-attribute name="footer" value="/WEB-INF/view/layout/Footer.jsp"/>
  </definition>
 
  <!--继承模块-->
  <definition name="homes" extends="baseTemplate">
     <put-attribute name="tittle" value="首页"/>
     <put-attribute name="body" value="/WEB-INF/view/body/Home.jsp"/>
  </definition>

  <!--继承模块-->
  <definition name="professions" extends="baseTemplate">
     <put-attribute name="tittle" value="职业"/>
     <put-attribute name="body" value="/WEB-INF/view/body/Profession.jsp"/>
  </definition>

  <!--继承模块-->
  <definition name="login" extends="baseTemplate">
     <put-attribute name="tittle" value="登录"/>
     <put-attribute name="body" value="/WEB-INF/view/body/Login.jsp"/>
  </definition>

  <!--继承模块-->
  <definition name="register" extends="baseTemplate">
     <put-attribute name="tittle" value="注册"/>
     <put-attribute name="body" value="/WEB-INF/view/body/Register.jsp"/>
  </definition>

  <!--继承模块-->
  <definition name="Students" extends="baseTemplate">
     <put-attribute name="tittle" value="学生列表"/>
     <put-attribute name="body" value="/WEB-INF/view/body/Students.jsp"/>
  </definition>

  <!--继承模块-->
  <definition name="Student" extends="baseTemplate">
     <put-attribute name="tittle" value="学生列表"/>
     <put-attribute name="body" value="/WEB-INF/view/body/Student.jsp"/>
  </definition>

  <!--继承模块-->
  <definition name="success" extends="baseTemplate">
     <put-attribute name="tittle" value="注册成功"/>
     <put-attribute name="body" value="/WEB-INF/view/body/Success.jsp"/>
  </definition>
 
  <!--继承模块-->
  <definition name="failed" extends="baseTemplate">
     <put-attribute name="tittle" value="登录失败"/>
     <put-attribute name="body" value="/WEB-INF/view/body/Failed.jsp"/>
  </definition>

  <definition name="registerFailed" extends="baseTemplate">
     <put-attribute name="tittle" value="注册失败"/>
     <put-attribute name="body" value="/WEB-INF/view/body/RegisterFailed.jsp"/>
  </definition>

Template.jsp模板文件

<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles" %>
<%--
         Created by IntelliJ IDEA.
         User: xu_ha
         Date: 2019/5/11
         Time: 21:44
         To change this template use File | Settings | File Templates.
       --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="utf-8" %>
<%@ taglib prefix="tittle" uri="http://tiles.apache.org/tags-tiles" %>
<html>
   <head>
       <tiles:insertAttribute name="tittle"/>
<tiles:insertAttribute name="top"/>
</head>
   <body>
       <%--头部--%>
       <tiles:insertAttribute name="head"/>
<%--菜单--%>
       <tiles:insertAttribute name="menu"/>
<%--内容--%>
       <tiles:insertAttribute name="body"/>
<%--底部--%>
       <tiles:insertAttribute name="footer"/>
</body>
</html>

(6)拓展思考:

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

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

    2、除了tiles还有别的模板复用框架么?

    ● 市面上还有许多的,比如beetl、sitemesh、thymeleaf、 freemarker等等

    3、为什么java的任务中会有一个看似前端的任务?

    ● 以前的开发并没有前后端的分别,前后端分离是近年来互联网行业发展导致,尽管现在许多地方已经前后端分离开发,但任然还有许多公司没有前后端分离的变化,所以我们需要了解一些前端的内容,对我们的工作和学习都是有所帮助的。

(7)参考文献:

    tiles 框架干货讲解

    ● https://blog.csdn.net/aosica321/article/details/68948915 

    SpringMVC视图解析器:配置多个视图解析器的优先级

    ● http://blog.csdn.net/wang1988081309/article/details/51895482 

(8)结束语:

        今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

评论

请您登录 后进行评论