JSP实用教程第三章------Tag文件与Tag标记

目录

3.1Tag文件

a.Tag文件的结构

b.Tag文件的保存

1.Tag文件所在的目录

2.Tag文件的编码

3.2Tag标记

a.Tag标记与Tag文件

b.Tag标记的使用

c.Tag标记的运行原理

3.3 Tag文件的常用指令

3.3.1.tag指令

a.language属性

b.import属性

c.pageEncording

3.3.2 include指令

3.3.3 attribute指令

3.3.4 variable指令


3.1Tag文件

a.Tag文件的结构

Tag文件是扩展名为.tag的文本文件,其结构与jsp文件非常相似

tag文件由这几部分组成
1.HTML标记符+特殊的jsp标记
2.java程序片
3.变量,方法,类声明
4.java表达式
5.Tag标记

以下是一个简单的tag文件,负责计算100以内奇数的和

<%@ tag pageEncoding="utf-8" %> //tag标记
<p style="font-family:宋体;font-size:36">
1~100内的奇数之和:
  <%  int sum=0,i=1; //java程序片
         for(i=1;i<=100;i++){
            if(i%2==1)
               sum=sum+i;
        }
        out.println(sum);
  %> 
</p>

b.Tag文件的保存

1.Tag文件所在的目录

其中WEB-INF(字母大写)和tags都是固定的目录名称,而tags目录下的子目录的名称可以由用户给定。

原因:Tag文件可以实现代码的复用,即Tag文件可以被许多jsp页面使用。为了能让一个web应用中jsp页面使用某一个tag文件,所以必须把tag文件存放到tomcat服务器指定的目录中。

所在目录:Web服务目录\WEB-INF\tags

2.Tag文件的编码

Tag文件指定的编码是utf-8,所以在保存tag文件时,将保存类型(T)选择为所有文件(*.*),将编码(E)选择“UTF-8”。

<%@ tag pageEncoding="utf-8"%>

3.2Tag标记

a.Tag标记与Tag文件

jsp页面必须通过Tag标记来调用一个Tag文件,tag标记的名字和Tag文件的名字一致,也就是说当我们写了一个tag文件放到特定的目录中,也就给出了一个tag标记

tag格式为
<Tag文件的名字/>
或者
<Tag文件的名字>其他内容(称为标体内容)</Tag文件的名字>

一个Tag文件对应一个Tag标记,把全体Tag标记称为一个自定义标记库或简称为标记库

b.Tag标记的使用

一个jsp页面通过使用tag标记来调用一个Tag文件。Web服务目录下的一个jsp页面使用tag标记调用文件之前,必须首先使用taglib指令标记引入该web服务目录下的标记库,只有这样jsp才能调用相应的tag文件

taglib指令的格式如下:

<%@taglib tagdir='标记库的位置' prefix='前缀'>

例如
<%@taglib tagdir='/WEB-INF/tags' prefix='computer'%>

taglib指令中的prefix给出的前缀由用户自定义,其好处是,通过前缀可以有效区分不同标记库中具有相同名字的标记文件

注意JSP页面使用Tag标记时,冒号:的左右不要有空格。

<%@ page contentType = "text/html" %>  
<%@ page pageEncoding = "utf-8" %> 
<%@ taglib tagdir = "/WEB-INF/tags" prefix = "computer"%>
<HTML><body bgcolor = cyan>
<h1>调用Tag文件计算100内奇数和:</h1>
<computer:oddNumberSum /> <%-- 使用Tag标记 --%>
</body></HTML>  

c.Tag标记的运行原理

1.如果该Tag标记对应的tag文件是首件被jsp调用,那么tomcat服务器会将tag文件转译成一个java文件,并编译这个java文件生成字节码文件,然后执行这个字节码文件

2.如果该tag文件已经被编译成字节码文件,tomcat服务器将直接执行这个字节码文件

3.如果对tag文件进行了修改,那么tomcat服务器将会重新将tag文件转译成一个java文件,并编译这个java文件生成字节码文件,然后执行这个字节码文件

3.3 Tag文件的常用指令

3.3.1.tag指令

tag指令的语法如下:

<%@ tag 属性1='属性值' 属性2='属性值'---属性n='属性值'% >

或者

<%@ tag 属性1='属性值' % >
<%@ tag 属性2='属性值' % >
<%@ tag 属性3='属性值' % >
------
<%@ tag 属性n='属性值' % >

a.language属性

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

在写tag文件时,没必要使用tag指令指定language属性的值

b.import属性

import属性的作用是为tag文件引入包中的类,它可以取多个值

import java.lang.*;
import javax.servelt.*;
import javax.serverlt.jsp.*;
------

c.pageEncording

该属性指定tag文件的字符编码,其默认值为ISO-8859-1。目前,为了避免显示信息出现乱码的现象,tag文件需要将该属性值设为utf-8

<%@ tag pageEncoding="utf-8"%>

3.3.2 include指令

在tag文件中也有和jsp文件类似的include指令标记,和jsp文件中的include指令标记类似。

大家可以去看一下我的jsp第二章有说到

3.3.3 attribute指令

在tag文件中通过attribute指令让使用它的jsp页面向该页面tag文件传递需要的数据

<%@ attribute name="对象名字" required="ture"|"false" type ="对象的类型"%>


例如:<%@ attribute name="reuslt" required="ture" type="java.lang.Double"%>
相当于tag文件中有了一个名字是result的对象,但Tag文件不需要创建该对象result,
而是等待JSP页面将一个Double型的对象的引用传递给result。

JSP页面使用Tag文件所调用的Tag文件中name指定的对象传递一个引用,方式如下

<前缀:Tag文件名字 对象名字="对象的引用"/>

比如,JSP页面使用tag标记(前缀为computer)调用myTag.tag
<computer:myTag result="newdouble(3.1415926)"/>

attribute 指令中的required属性也是可选的,如果省略required属性,那么它的默认值为false

当指定required的值是ture,调用该tag文件的jsp页面必须向该tag文件中的attribute指令中的name属性给出的对象传递一个引用

注意: 在tag文件中不可以再定义和attribute指令中的name属性给出的对象具有相同名字的变量,否则将隐藏attribute指令中给出的对象,使其失效

3.3.4 variable指令

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

<%@ variable name-given="对象名" variable-class="对象类型" scope="有效范围">
属性name-given的值就是Tag文件返回JSP页面的对象

1.name-given返回给jsp页面的对象,它的名字必须由字母,数字,下画线和美元符号组成

2.variable-class的值是返回的对象的类型,对象的类型必须带有包名,如果没有使用variable-class给出的对象类型,那么对象类型默认值为 java.lang.String类型

下面的 variable 指令给出的对象名子是time,类型为java.time.LocalDate,
有效范围是AT_END

<%@ variable name-given="time" 
  variable-class="java.time.LocalDate"scope="AT_END" %>

3.3.5 taglib指令

JSP页面或Tag文件都可以使用taglib指令引入标记库,格式如下

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

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值