Tag File文件的理解

来源:互联网 发布:javascript官网 编辑:程序博客网 时间:2024/06/07 06:43

从Jsp 2.0开始,通过tag file的方式,无需编写标签处理类和标签描述文件(tld),也能够自定义标签。一个tag file和jsp页面一样,他拥有指令、脚本、EL表达式、动作元素、以及自定义标签。一个tag file文件以tag or tagx 为后缀,一个被其他文件包含的tag file 应该以tagf为后缀。

Tag File基础知识:

当使用tag file时需要注意以下两点:
(1)tag文件必须放在应用路径/WEB-INF/tags目录下才能生效;
(2)在页面引用的时候,Tag名和Tag file文件的名字是默认一样的(例如firstTag.tag在页面中的对应的标签名为firstTag)
Tag file中也有内置隐藏对象,类似jsp一样

对象 类型 request javax.servlet.http.HttpServletRequest response javax.servlet.http.HttpServletResponse out javax.servlet.jsp.JspWriter session javax.servlet.http.HttpSession application javax.servlet.ServletContext config javax.servlet.ServletConfig jspContext javax.servlet.jsp.JspContext

先举一个简单的例子:显示当前时间的tag file

//首先是firstTag.tag文件<%@ tag import="java.util.Date" import="java.text.DateFormat" pageEncoding="utf-8"%><%    DateFormat dateFormat =             DateFormat.getDateInstance(DateFormat.LONG);    Date now = new Date(System.currentTimeMillis());    out.println(dateFormat.format(now));%>//测试页面代码<%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%><%@ taglib prefix="easy"  tagdir="/WEB-INF/tags" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Insert title here</title></head><body>    <easy:firstTag/></body></html>

但是在理解dobody指令和invoke指令的时候看书时没看明白两者区别:
(1)doBody动作元素用来调用标签的本体内容,该标签也可以有属性,你可以通过这些属性来指定某个变量来接收主题内容,如果不使用这些指令,那么doBody动作元素会把主体内容写到Jsp页面的JspWriter上,该标签有如下非必须属性:

var - 给出变量名, 把片段经过 jsp 容器计算过之后的结果作为字符串保存.
varReader - 同上, 不过将结果作为一个 java.io.Reader 保存. 和var不能共存
scope - 作用域

doBodyDemo.tag 将便签主题存到session范围内的referer变量内<jsp:doBody var="referer" scope="session"/>main.jsp使用了doBodyDemo标签,将${header.referer}存到session范围内的referer变量中%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%><%@ taglib prefix="easy" tagdir="/WEB-INF/tags" %>  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Insert title here</title></head><body>    your referer header:${header.referer}    <br/>    <easy:doBodyDemo>        ${header.referer}    </easy:doBodyDemo>    <a href="viewReferer.jsp">view</a></body></html>

(2)invoke动作元素和doBody类似,invoke标签比dobody标签多一个fragment属性。在tag file中可以使用它调用一个fragment(关于fragment的定义网上百度如下:javax.servlet.jsp.tagext.JspFragment类是在JSP2.0中定义的,它的实例对象代表JSP页面中的一段符合JSP语法规范的JSP片段,这段JSP片段中不能包含JSP脚本元素。)在定义属性attribute指令中有一个fragment属性,如果属性为true就意味着这个属性就是一个fragment。

参照这篇博客jsp2.0+中的标签文件,JSP Fragment技术我才明白fragment主要适用于用于网页布局和修饰,可以将网页的内容和页面的结构分离,从而达到页面结构共享的目的。


这里把引用博文例子再写一遍:
1 首先在项目的WEB-INF/tags文件中,新建如下内容的tpl.tag文件

<%@ tag language="java" pageEncoding="UTF-8"%> <%@ attribute name="title"%> <%@ attribute name="tpl1" fragment="true" required="true"%> <%@ attribute name="tpl2" fragment="true" required="true"%> <%@ attribute name="tpl3" fragment="true" required="true"%> <!DOCTYPE html>      <html>          <head>             <meta charset="utf-8">             <title>${title}</title>             <style type="text/css">                #div1,#div2,#div3{                   width:90%;                  margin:10px auto;                  border:10px solid red;                }             </style>         </head>        <body>            <h1>jsp2.0标签文件</h1>             <div id="div1">                 <jsp:invoke fragment="tpl1"/>             </div>            <div id="div2">                 <jsp:invoke fragment="tpl2"/>             </div>            <div id="div3">                 <jsp:invoke fragment="tpl3"/>             </div>             <h2>jsp2.0 fragment技术</h2>         </body>    </html>

2.创建test.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib prefix="xjo" tagdir="/WEB-INF/tags"%><xjo:tpl title="jsp标签文件的使用">    <jsp:attribute name="tpl1">        <h1>tpl1中的内容</h1>    </jsp:attribute>    <jsp:attribute name="tpl2">        <h1>tpl2中的内容</h1>    </jsp:attribute>    <jsp:attribute name="tpl3">        <h1>tpl3中的内容</h1>    </jsp:attribute></xjo:tpl>

运行结果如下
这里写图片描述

原创粉丝点击