tag文件简单创建和使用

  1. 创建标记文件(.tag)
  2. 在标记文件中写入信息
  3. 在jsp文件中,引入标记文件
  4. 通过关键字调用标记文件

举例说明:

标记文件(show.tag)

<%@ tag language="java" pageEncoding="UTF-8"%>
<body bgcolor=yellow><P>
<% int size=1;
for(int i=1;i<=3;i++) {
size=size+1;
%> <font size=<%=size%>>
<jsp:doBody />
</font>
<% }
%> </P></body>

jsp文件

//先使用taglib指令引入标记库

<%@taglib prefix="look" tagdir="/WEB-INF/tags" %>
//使用<标记前缀:定义好的标记名>调用标记(注意:标记名和文件名大小写一致)

 <look:Show>
开开心心,快快乐乐.
</look:Show>

工作原理:

JSP 引擎把Tag文件转换成Java文件,并编译成class文件供JSP程序动态调用。标记体传给Tag文件, Tag文件使用接受标记体信息。

Tag文件中的常用指令

tag指令设置方法

Tag文件中的tag指令类似于JSP文件中的page指令。Tag文件通过使用tag指令可以指定某些属性的值,以便从总体上影响Tag文件的处理和表示。tag指令的语法如下:

 <%@ tag 属性1="属性值" 属性2="属性值" …属性n="属性值"%>

在一个Tag文件中可以使用多个tag指令:

<%@ tag 属性1="属性值"%>
<%@ tag 属性2="属性值"%>
……
<%@ tag 属性n="属性值"%>

tag指令属性介绍

tag指令属性有下面4个body-contentlanguageimportpageEncoding. 来对他们做一下介绍.

body-content属性

属性值有:emptytagdependentscriptless,默认值是scriptless

+ Empty:JSP页面必须使用没有标记体的Tag标记

language属性

指定Tag文件使用的脚本语言,目前只能取值java,其默认值就是java。

import属性

为Tag文件引入Java核心包中的类。import属性可以取多个值。import属性已经有如下值:

"java.lang.*"、 "javax.servlet.*"、
"javax.servlet.jsp.*"、"javax.servlet.http.*"

pageEncoding属性

指定Tag文件的字符编码,其默认值是ISO-8859-1。

include指令

使用方法和作用与JSP文件中的include指令标记类似。

include指令标记的作用是在Tag文件中出现该指令的位置处,静态插入一个文件。

其语法格式如下:

<%@ include file= "文件的URL " %> 

attribute指令

在Tag文件中通过使用attribute指令,可以让使用它的JSP页面向该Tag文件传递需要的数据,增强Tag文件功能。指令的格式如下:

<%@ attribute name="对象名字" required="true"|"false" type="对象的类型"%>
  • name属性是必需的,JSP页面向它传递一个引用。

比如,一个Tag文件MyTag.tag中有如下attribute指令:

<%@ attribute name="length" required="true" %>

那么JSP页面就可以如下使用Tag标记(假设标记的前缀为computer)调用MyTag.tag:

<computer:MyTag length="1000" />

<computer:MyTag length="1000" >
我向Tag文件中传递的值是1000
<computer:MyTag />
  • required属性可选。缺省值是false。若设为true,则JSP页面必须向Tag文件的attribute属性传递一个引用,否则出错。
  • type属性指定对象的类型。如type=“Java.util.Date”,如果缺省,则类型是java.lang.String。

举例说明

标记文件(.tag)

<%@ tag language="java" pageEncoding="UTF-8"%>
<h4> 这是一个Tag文件, 负责计算三角形的面积</h4> <%@ attribute name="sideA" required="ture" %>
<%@ attribute name="sideB" required="ture" %>
<%@ attribute name="sideC" required="ture" %> <%! public String getArea(double a, double b, double c){
if(a+b > c && a+c > b && c+b>a){
double p = (a + b+ c)/2.0;
double area = Math.sqrt(p* (p-a) *(p-b) *(p-c));
return "<BR> 三角形的面积: "+ area;
}else{
return("<BR>"+ a + "," + b + "," + c + "不能构成三角形, 无法计算");
}
}
%> <%
out.println("<br> JSP页面传过来的三条边:" + sideA + "," + sideB + "," + sideC);
double a = Double.parseDouble(sideA);
double b = Double.parseDouble(sideB);
double c = Double.parseDouble(sideC);
out.println(getArea(a, b, c));
%>

jsp文件

//通过下面代码调用, 参数sideA, sideB, sideC其中一个忘记传了,则代码会出错
<h1>tag文件书上例子</h1>
<look:Triangle sideA="5" sideB="6" sideC="7" />

variable指令

Tag文件通过使用variable指令可以将Tag文件中的对象返回给调用该Tag文件的JSP页面。

variable指令的格式

<%@ variable name-given=“对象名字” variable-class=“对象的类型” scope=“有效范围”%>

例: <%@ variable name-given="time" variable-class="java.util.Date" scope="AT_END" %> 
  • name-given属性是必需的。
  • variable-class可以是java.lang.String(缺省值)等类型。
  • scope属性表示在JSP页面中何时何地可以使用返回的对象。
    1. AT_BEGIN: 一旦开始使用Tag标记,就可以在任何地方用对象;
    2. NESTED:只可以在标记体中使用对象;
    3. AT_END:只可以在标记结束后才可以使用对象;

完成了上面操作是不够的,还需要执行下面代码:

jspContext.setAttribute(“time”,new Date());

Tag文件只有将对象信息存储到jspContext中,JSP页面才可以使用该对象。

注:在tag文件中,不可以对variable中声明的将要返回给jsp页面的数据进行操作。

taglib指令

一个Tag文件可以使用Tag标记来调用其它的Tag文件。其实tag文件中使用其他tag,方法和jsp文件中使用tag文件方法一样。Tag文件也必须使用指令引入该Web服务目录下的标记库,才可以使用Tag标记来调用相应的Tag文件。

指令的格式如下:

<%@ taglib tagdir="自定义标记库的位置" prefix="前缀">

一个Tag文件也可以使用几个指令标记引入若干个标记库,例如:

<%@ taglib tagdir="/WEB-INF/tags" prefix="beijing"%>
<%@ taglib tagdir="/WEB-INF/tags/tagsTwo" prefix="dalian"%> 。

举例说明

index.jsp文件

<h1>tag文件中调用tag文件</h1>
<look:FirstTag number="6"/>
<look:FirstTag number="8" />

Frist.tag

<%@ tag language="java" pageEncoding="UTF-8"%>
<%@ tag import="java.util.*" %>
<%@ taglib tagdir="/WEB-INF/tags" prefix="getNumber"%>
<%@ attribute name="number" required="true" %>
<getNumber:SecondTag number="<%=number%>"/>
<% out.println("得到"+number+"个随机数:");
for(int i=0;i<listNumber.size();i++) //listNumber是SecondTag文件返回的对象
out.print((Integer)listNumber.get(i)+" ");
out.println("<br>按从小到大排列:");
for(int i=0;i<listNumber.size();i++){
for(int j=i+1;j<listNumber.size();j++){
int a=((Integer)listNumber.get(i)).intValue();
int b=((Integer)listNumber.get(j)).intValue();
if(b<a){
Integer temp=(Integer)listNumber.get(i);
listNumber.set(i,(Integer)listNumber.get(j));
listNumber.set(j,temp);
}
}
}
for(int i=0;i<listNumber.size();i++)
out.print((Integer)listNumber.get(i)+" ");
int sum=0;
for(int i=0;i<listNumber.size();i++)
sum=sum+((Integer)listNumber.get(i)).intValue();
out.println("<br>得到的"+number+"个随机数之和:"+sum+"<br>");
%>

Second.tag

<%@ tag language="java" pageEncoding="UTF-8"%>
<%@ tag import="java.util.*" %>
<%@ attribute name="number" required="true" %>
<%@ variable name-given="listNumber"
variable-class="java.util.LinkedList" scope="AT_END" %>
<% int count=Integer.parseInt(number);
LinkedList listBox=new LinkedList(),
listNeeded=new LinkedList();
for(int k=1;k<=4;k++)
for(int i=1;i<=13;i++)
listBox.add(new Integer(i));
while(count>0) {
int m=(int)(Math.random()*listBox.size());
Integer integer=(Integer)listBox.get(m);
listNeeded.add(integer);
listBox.remove(m);
count--;
}
jspContext.setAttribute("listNumber",listNeeded); //·µ»ØlistNumber
%>

Tag标记嵌套

使用Tag标记时,可以带有标记体,标记体还可以是一个Tag标记,实现Tag标记的嵌套。

Tag标记中的标记体由Tag文件的标记负责处理,而在Tag文件中,标记被替换成对“标记体”进行处理后所得到的结果。

举例说明

index.jsp


<%@ page contentType="text/html;charset=gb2312" %>
<%@ taglib tagdir="/WEB-INF/tags" prefix="ok"%>
<html><body>
<p>
<Font size=2>Tag标记嵌套显示学生名单:</Font>
<table border=1>
<ok:Biaoge color="#a9f002" name="姓名" sex="性别">
<ok:Biaoge color="cyan" name="张三" sex="男"/>
<ok:Biaoge color="#afc0ff" name="李小花" sex="女"/>
<ok:Biaoge color="pink" name="孙六" sex="男"/>
<ok:Biaoge color="#ffaaef" name="赵扬" sex="女"/>
</ok:Biaoge>
</table>
</body></html>
注意:红笔为嵌套部分,以/结束。

Biaoge.tag

 <%@ tag language="java" pageEncoding="UTF-8"%>
<%@ attribute name="color" %> <!-- 接收数据 -->
<%@ attribute name="name" %>
<%@ attribute name="sex" %>
<tr bgcolor=“<%=color%>”> <!-- //表格显示 -->
<td width=60><%=name%></td>
<td width=60><%=sex%></td>
</tr>
<jsp:doBody/>

JSP-tag文件使用介绍的更多相关文章

  1. JSP 中的 tag 文件

    在jsp文件中,可以引用 tag 和tld 文件,本文主要针对 tag 对于tag 文件 1)将此类文件放在 WEB-INF 下,比如 /WEB-INF/tags,tags 是目录,其下可以有多个.t ...

  2. JSP中的TAG文件和TLD文件小结

    在jsp文件中,可以引用tag和tld文件. 1.对于tag文件 <%@ taglib prefix="ui" tagdir="/WEB-INF/tags" ...

  3. jsp tag 直接文件实现

    引入 <%@ taglib prefix="sys" tagdir="/WEB-INF/tags/sys" %> 这里注意/WEB-INF/tags ...

  4. Liferay JSP Tag Libraries介绍

    Liferay自带了很多标签库,这极大地提高了开发Liferay项目的效率. 下面让我们一起来探索吧. 什么是标签库? 什么是JSP标签? 什么是JSTL? 标签库由下面这几部分组成: Tag Lib ...

  5. Java使用JSP Tag Files & JSP EL Functions打造你自己的页面模板

    1. 简单说明:在JSP 2.0后, 你不再需要大刀阔斧地定义一堆TagSupport或BodyTagSupport, 使用JSP Tag Files技术可以实现功能强大的页面模板技术. 在这里抛砖引 ...

  6. JSP TAG

    Jsp tag 能够灵活的将公共JSP代码模块化,类似<jsp:include page="./include.jsp"></jsp:include>等等. ...

  7. Linux文件类型介绍

    文件类型介绍: Linux系统不同于Windows系统,两者文件类型和文件扩展名也有很大的差异.Linux中的文件类型和Linux文件的文件扩展名所代表的意义和Windows系统完全不同.用户一般通过 ...

  8. jsp 标签文件

    一. tag file 简介 tag file从两个方面简化了自定义标签的开发.首 先,tag file无须提前编译,直到第一次被调用才会编 译.除此之外,仅仅使用JSP语法就可以完成标签的扩 展定义 ...

  9. Tag文件的创建与应用

    Tag文件,几乎和JSP文件一模一样,可以被JSP页面动态加载调用.Tag文件有什么优势呢(既然和JSP几乎一模一样,那就得想想这个必然有不一样的地方,不然要它存在干嘛) 在设计Web应用时,可以通过 ...

随机推荐

  1. PS字体工具字体显示不出来

    显示一个小点:搜索了各种答案,扩大字号(最大72)更改前景色和背景色,最正确的解释就是分辨率太低,我发现分辨率是1,一般的设置成300,1分辨率情况下可以在图层那选择文字图层,然后按ctrl+t,拉大 ...

  2. 【技术帖】解决 Hudson jenkins 连接等待中 - Waiting for next av

    今天构建项目发现如下问题: jenkins 连接等待中 - Waiting for next available executor 左下角那块一直不运行构建,一直在连接等待. 于是,进入一级页面, 右 ...

  3. uva 12124 - Assemble

    最大值最小的题: 直接用二分,比较简单: 不过我的二分老是不用好.有时间总结一下! #include<cstdio> #include<map> #include<vec ...

  4. linux网络配置正确,能够ping通内网地址,无法打开外网网页

    在虚拟机里面装了linux后,发现内网能访问,外网访问不了. 首先确定网络配置没有问题,并且能够访问外网,通过以下方法进行确认: [root@localhost ~]# more /etc/sysco ...

  5. 【poj3070】矩阵乘法求斐波那契数列

    [题目描述] 我们知道斐波那契数列0 1 1 2 3 5 8 13…… 数列中的第i位为第i-1位和第i-2位的和(规定第0位为0,第一位为1). 求斐波那契数列中的第n位mod 10000的值. [ ...

  6. 2-3 tree使用

    The 2-3 tree is also a search tree like the binary search tree, but this tree tries to solve the pro ...

  7. 深入详解SQL中的Null

    深入详解SQL中的Null NULL 在计算机和编程世界中表示的是未知,不确定.虽然中文翻译为 “空”, 但此空(null)非彼空(empty). Null表示的是一种未知状态,未来状态,比如小明兜里 ...

  8. usaco3.33Camelot(BFS)

    恶心的题啊 .. 先枚举哪个点是所有人集合的点 再枚举所有骑士遇见国王的点 如果全部枚举出来会大大的TLE 经大牛验证 只需要枚举国王周围的点就可以了+-2 之内 然后各种繁琐 各种错误 骑士有可能不 ...

  9. 非常有用的Java程序片段

    1.向文件末尾添加内容 BufferedWriter out = null; try { out = new BufferedWriter(new FileWriter(”filename”, tru ...

  10. android Spinner的使用

    首先是MainActivity package com.example.spinnertest; import java.util.ArrayList; import java.util.List; ...