JSP-tag文件使用介绍
tag文件简单创建和使用
- 创建标记文件(.tag)
- 在标记文件中写入信息
- 在jsp文件中,引入标记文件
- 通过关键字调用标记文件
举例说明: 
标记文件(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-content、language、import、pageEncoding. 来对他们做一下介绍.
body-content属性
属性值有:empty、tagdependent、scriptless,默认值是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页面中何时何地可以使用返回的对象。 
 - AT_BEGIN: 一旦开始使用Tag标记,就可以在任何地方用对象;
- NESTED:只可以在标记体中使用对象;
- 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文件使用介绍的更多相关文章
- JSP 中的 tag 文件
		在jsp文件中,可以引用 tag 和tld 文件,本文主要针对 tag 对于tag 文件 1)将此类文件放在 WEB-INF 下,比如 /WEB-INF/tags,tags 是目录,其下可以有多个.t ... 
- JSP中的TAG文件和TLD文件小结
		在jsp文件中,可以引用tag和tld文件. 1.对于tag文件 <%@ taglib prefix="ui" tagdir="/WEB-INF/tags" ... 
- jsp tag 直接文件实现
		引入 <%@ taglib prefix="sys" tagdir="/WEB-INF/tags/sys" %> 这里注意/WEB-INF/tags ... 
- Liferay JSP Tag Libraries介绍
		Liferay自带了很多标签库,这极大地提高了开发Liferay项目的效率. 下面让我们一起来探索吧. 什么是标签库? 什么是JSP标签? 什么是JSTL? 标签库由下面这几部分组成: Tag Lib ... 
- Java使用JSP Tag Files & JSP EL Functions打造你自己的页面模板
		1. 简单说明:在JSP 2.0后, 你不再需要大刀阔斧地定义一堆TagSupport或BodyTagSupport, 使用JSP Tag Files技术可以实现功能强大的页面模板技术. 在这里抛砖引 ... 
- JSP TAG
		Jsp tag 能够灵活的将公共JSP代码模块化,类似<jsp:include page="./include.jsp"></jsp:include>等等. ... 
- Linux文件类型介绍
		文件类型介绍: Linux系统不同于Windows系统,两者文件类型和文件扩展名也有很大的差异.Linux中的文件类型和Linux文件的文件扩展名所代表的意义和Windows系统完全不同.用户一般通过 ... 
- jsp 标签文件
		一. tag file 简介 tag file从两个方面简化了自定义标签的开发.首 先,tag file无须提前编译,直到第一次被调用才会编 译.除此之外,仅仅使用JSP语法就可以完成标签的扩 展定义 ... 
- Tag文件的创建与应用
		Tag文件,几乎和JSP文件一模一样,可以被JSP页面动态加载调用.Tag文件有什么优势呢(既然和JSP几乎一模一样,那就得想想这个必然有不一样的地方,不然要它存在干嘛) 在设计Web应用时,可以通过 ... 
随机推荐
- bzoj 4066: 简单题 kd-tree
			4066: 简单题 Time Limit: 50 Sec Memory Limit: 20 MBSubmit: 234 Solved: 82[Submit][Status][Discuss] De ... 
- DJANGO,获取当前用户名,用户组名,用户组权限
			样例,为下一步自定义用户权限作一下代码准备: def get_context_data(self, **kwargs): if self.request.user.is_authenticated() ... 
- Android 使用SharedPreference来进行软件配置的存取
			我们在安卓开发的时候不免需要记录用户键入的一些信息,比如账号和密码,用户使用软件的次数,上次打开软件的时间等等,为了保存这些配置,我们可以使用SharedPreference类保存他们. //使用Sh ... 
- 【UVA 1395】 Slim Span (苗条树)
			[题意] 求一颗生成树,满足最大边和最小边之差最小 InputThe input consists of multiple datasets, followed by a line containin ... 
- Java使用JAX-WS来写webservice时 Unable to create JAXBContext
			webservice,作为web开发人员来说必须掌握的一门技术,它的好处这里就不多说了,eclipse中自带了一种生成webservice的 方法,使用JAX-WS,如果我没有弄错的话,它需要java ... 
- ANDROID_MARS学习笔记_S05_006_距离传感器
			import android.app.Activity; import android.content.Context; import android.hardware.Sensor; import ... 
- init进程 && 解析Android启动脚本init.rc && 修改它使不启动android && init.rc中启动一个sh文件
			Android启动后,系统执行的第一个进程是一个名称为init 的可执行程序.提供了以下的功能:设备管理.解析启动脚本.执行基本的功能.启动各种服务.代码的路径:system/core/init,编译 ... 
- 无法自动调试  未能调试远程过程。这通常说明未在服务器上启用调试   WCF 托管在IIS上
			解决方案,把新建的网站的app.config修改下配置 <system.web> <!-- 设置 compilation debug="true" 可将调试符号插 ... 
- HDOJ --- 2577
			How to Type Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ... 
- PCB的技巧
			(1)首先元件的移动,如下图中,向让D1的2引脚和R49的2引脚齐平,但是移动的距离每次都超过,不能平齐 修改元件最小移动距离即可,如下图,其中有很多可以改动的地方,但是需要改的是Component ... 
