1.背景介绍
什么是Tiles框架
Tiles框架就是一种页面复用体系,我们在设计前端jsp页面时,可能会有很多页面重复的地方,在每个页面上都写上相同的代码块,极大的降低了效率,为了解决代码不可复用的问题,Tiles框架应运而生。
2.知识剖析
在Tiles中,模板是页面的布局部分,每个页面都是由模板文件和碎片文件来组合生成的。
经典布局的页面结构包括:Header,Menu,Body,Footer
head页面头部:存放一个运用的公共信息:logo等,如果是网站可能是最上面的一块。
menu页面菜单:放置一个运用中需要使用的菜单,或者在每一个页面都使用的连接。
body页面主题内容:每个页面相对独立的内容。
footer页面尾部:如版权信息等。
3.常见问题
1).如何使用Tiles框架
万个啊,又得请一百个好基友帮忙了!要是老板后面又要在网站顶端加一只唱歌的小鸟、在网站右边加一个工具栏…估计你的好基友要用砖头来砸你了。
那有没有一种方法,可以不用请一百个好基友帮忙,就可以在十分钟之内完成老板交给你的任务?也许你会觉得这简直是胡说八道,在十分钟内改完10万个JSP页面就是一种疯狂的想法。也许这是对的,就是一个疯狂的想法,不清楚Tiles的设计者当初也是否受到过这种老板的虐待,所以才设计出了这样一个疯狂的产品—— Tiles 。
没错,Tiles就是为你遇到的这种需求服务的。一旦你在网站系统中使用了Tiles技术,若老板让你删除10万个页面所引用的一个JSP,如果你的速度快的话,你可以在10秒钟之内解决。那要想再让这10万个页面去引用一个JSP呢?也是一样的操作,非常简单。
2).Tiles框架是否支持el表达式,要怎么用?
就是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" %>
%@ 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" %>
4.解决方案
将Tiles整合进Spring mvc,
在controller里不能返回jsp页面,要返回逻辑视图名
可以用el表达式
5.编码实战
6.扩展思考
1.jsp页面支持嵌套吗?
支持,但是复用性很差,特别是一些相对复杂的页面中,嵌套的体验非常差,这才是tiles推出的重要原因
2.tiles和jsp include的区别是什么
(1)include指令
include指令告诉容器:复制被包含文件汇总的所有内容,再把它粘贴到这个文件中。
<%@ include file="Header.jsp"%>
(2)include标准动作
<jsp:include page="Header.jsp"/>
(3)采用JSTL
<c:import url="http://www.sina.com/index.html">
注意:(1)include指令在转换时插入“Header.jsp”的源代码,而<jsp:include>标准动作在运行时插入“Header.jsp”的响应
(2)采用前两种方式,只能包含当前web应用的界面,不过,<c:import>可以包含容器之外的内容。
(3)注意路径问题,否则无法显示
jsp直接进入根目录 <link href="${pageContext.request.contextPath}/css/mystyle.css" rel="stylesheet" />
其中最大的区别就是都可以支持嵌套,但是如果需要修改页面的话tiles只需要将需要修改的一部分单独修改就好了,不影响其他整体的运行,但是include需要修改的话就需要将整个jsp页面进行修改调整,加大了工作量
3).EL表达式传值的实现过程
EL表达式
EL表达式提供了JSP中简化表达式的方法,语法结构:${ expression} ,其采用“.”或者“[]”两种方式来存储数据,当表达式中存在除了字母或者数字之外的特殊符号时,必须用“[]”。
其他EL内容包括操作符、隐式对象见度娘,现重点讲解此次我用到的两种隐式对象,
一种: <%=request.getParameter("userName")%> 其等价于 ${param.userName};
另一种:<%=request.getAttrbute(userList)%> 其等价于 ${requestScope.userList} 。
当${"userList"}时,搜寻顺序为:pageScope,requestScope,sessionScope,applicationScope。
二、传值
1. 页面之间传值(jsp跳转至另一个jsp)
<a href="/test/toTest2.jsp?id='2'&name='test2'"></a>
析:此处是通过URL进行参数传值的,toTest2.jsp为要提交的处理页面,“?”之后为要传递的参数和值,参数之间用“&”分割。在toTest2.jsp页面中,我们可以通过EL表达式的隐式对象取值,即:${param.id};${param.name}。
7.参考文献
1、tiles官方文档
https://tiles.apache.org/framework/tutorial/basic/concepts.html
2、tiles官方文档 El表达式:
https://tiles.apache.org/framework/tutorial/basic/concepts.html
sic/concepts.html