目录

3.1 Tag文件

3.1.1Tag文件的结构

3.1.2Tag文件的保存

3.2 Tag标记

3.2.1 Tag文件和Tag标记

3.2.2 Tag标记的使用

3.2.3 Tag标记的运行原理

3.3 Tag文件中的常用指令

3.3.1 Tag指令

3.3.2 include指令

3.3.3 attribute指令

3.3.4 variable指令

3.3.5 taglib指令


3.1 Tag文件

3.1.1Tag文件的结构

Tag文件是扩展名为.Tag的文本文件,其结构与JSP相似,包括普通的HTML标记符、某些特殊的指令标记、成员变量声明和方法的定义、Java程序片和Java表达式。

3.1.2Tag文件的保存

1、Tag文件所在目录

Tag文件可实现代码的复用。如果某Web服务目录下的JSP页面准备调用一个Tag文件,那么必须在Web服务目录下建立以下目录结构;

Web服务目录\WEB-INF\tags

注:WEB-INF(大写)和tags是固定的目录,tags下的子目录可自由给定。

2、Tag文件的编码

保存Tag文件时按照Tag文件指定的编码保存,如:

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

该Tag指令指定编码方式为utf-8,则Tag文件保存时应选择“utf-8”。

3.2 Tag标记

3.2.1 Tag文件和Tag标记

①JSP页面必须通过Tag标记来调用一个Tag文件。

②Tag标记的名字和Tag文件的名字一致。

③一个Tag文件对应一个Tag标记。

Tag标记格式为:

<Tag 文件名字/>

<Tag 文件名字>标体内容</Tag 文件名字>

3.2.2 Tag标记的使用

某Web服务目录下的一个JSP页面在使用Tag标记调用一个Tag文件之前必须首先使用taglib指令标记引入该Web服务目录下的标记库。

taglib指令的格式为:

<%@taglib tagdir="标记库的位置"prefix=“前缀”>   //引入标记库

引入标记库后,JSP页面可使用带前缀的Tag标记调用相应的Tag文件,格式:

<"前缀":Tag去掉扩展名后的文件名/>

如:<computer:oddNumberSum/>调用文件名为oddNuberSum.tag的Tag文件。

注:“:”旁边不能有空格

3.2.3 Tag标记的运行原理

如果该Tag标记对应的Tag文件是首次被JSP页面调用,那么Tomcat服务器会将Tag文件转译成一个Java文件,并编译这个Java文件生成字节码文件,然后执行这个字节码文件(这和执行JSP页面的原理类似)。
        如果该Tag文件已经被转编译为字节码文件,Tomcat服务器将直接执行这个字节码文件。
        如果对Tag文件进行了修改,那么Tomcat服务器会重新将Tag文件转译成一个Java文件,并编译这个Java文件生成字节码文件,然后执行这个字节码文件。

3.3 Tag文件中的常用指令

3.3.1 Tag指令

tag指令语法:

<%@tag 属性1=“属性值” 属性2=“属性值”...%>

<%@tag 属性1=“属性值” %>

<%@tag属性2=“属性值”%>

...

<%@tag属性n=“属性值”%>

①language属性

作用:指定脚本语言

目前只能取值java,默认值为java,故无需指定。

②import属性

作用:为Tag文件引入包中的类

可取多值,默认值有:"java.lang.*"  "java.servlet.*"   "java.servlet.jsp.*"   "javax.servlet.http.*"

③pageEncoding属性

作用:指定Tag文件的字符编码

默认值为ISO-8859-1,为了避免信息出现乱码,需要将属性设置为utf-8

3.3.2 include指令

其作用方法与JSP文件中的include指令标记类似(详情见JSP实用教程第二章2.6.2)

3.3.3 attribute指令

格式为:

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

注:name属性是必需的,type在指定对象是必须使用包名,其默认值为java.lang.String。

作用:让使用该指令的JSP页面向该Tag文件传递需要的数据

name属性:可传递一个引用,方式如下:

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

required属性:默认值为false,当为true时,调用该Tag文件的JSP页面必须向该Tag文件中attribute指令中的name属性给出的对象传递一个引用,当为false时,调用该Tag文件的JSP页面必须向该Tag文件中attribute指令中的name属性给出的对象传递或不传递对象的引用,

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

3.3.4 variable指令

1、指令格式:

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

作用:将Tag文件中的对象返回给调用该Tag文件的JSP页面。

属性name-given:是返回给JSP页面的对象,必须标识符规定(即可由字母数字下划线美元符号数字组成,且第一个字符不能为数字)。

属性variable-class:必须带有包名

属性scope:指定对象的有效范围,值可取AT_BEGIN,NESTED,AT_END.

2、对象的返回

Tag文件只有将对象的名字及其引用存储到jspContext中,才能使用该对象。

jspContext.setAttribute("对象名",对象的引用)

注:在JSP页面中不可以再定义与Tag文件返回的对象具有相同名字的变量,否则Tag文件无法将variable 指令给出的对象返回给JSP页面(并将出现编译错误)。如果 Tag 文件同时使用variable 指令和attribute指令,那么variable指令中name-given和attribute 指令中name给出的对象不能相同(否则将出现编译错误)。

3.3.5 taglib指令

JSP页面或Tag文件都可以使用taglib指令引入标记库,可使用多个taglib指令标记引入若干标记库。指令格式为:

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

JSP实用教程-第三章Tag文件与Tag标记相关推荐

  1. 基于c语言的ug二次开发,(完整)3_UG二次开发实用教程第三章(16页)-原创力文档...

    第 3 章 编程基础 3.1 UG/Open API 函数 3.1.1 函数名称的约定 UG/OpenAPI 共有两类名称约定.一个是标准的 UG/OpenAPI 的函数 名称约定:另一个是以前版本原 ...

  2. JAVA程序设计实用教程 第三章 习题3(2)

    3-15  什么是继承?继承机制的作用是什么?子类继承了父类的什么?子类不需要父类的成员时怎么办?能够删除他们吗?java语言允许一个类有多个父类吗?p83 继承是面向对象的核心特性,是实现抽象与共享 ...

  3. 大一计算机基础实用教程答案第二章,计算机基础实用教程(课件)第2章.ppt

    <计算机基础实用教程(课件)第2章.ppt>由会员分享,可在线阅读,更多相关<计算机基础实用教程(课件)第2章.ppt(23页珍藏版)>请在人人文库网上搜索. 1.计算机基础与 ...

  4. Android Camera2 教程 · 第三章 · 预览

    Android Camera2 教程 · 第三章 · 预览 DarylGo关注 Android Camera 上一章<Camera2 开启相机>我们学习了如何开启和关闭相机,接下来我们来学 ...

  5. c语言多个附加说明符,C语言教程第三章.ppt

    <C语言教程第三章.ppt>由会员分享,可在线阅读,更多相关<C语言教程第三章.ppt(36页珍藏版)>请在人人文库网上搜索. 1.第三章,顺序结构程序设计 数据输入输出 及程 ...

  6. oracle体系三大文件,oracle 体系_第三章控制文件

    第三章 控制文件 1.功能特点 记录数据库当前的物理状态 维护数据库的一致性,是一个二进制的小文件 在mount阶段被读取,记录rman备份的元数据 查看database控制文件的位置 Show pa ...

  7. 软考 程序员教程-第三章 数据库基础知识

    软考 程序员教程-第三章 数据库基础知识 第三章 数据库基础知识 3.1 基本概念 数据库系统(DataBase System,DBS)由数据库(DataBase,DB).硬件.软件和人员4大部分组成 ...

  8. C#图解教程(第三章)

    C#图解教程第三章 3.1 C#程序是一组类型声明 3.2 类型是一种模板 3.3 实例化类型 3.4 数据成员和函数成员 3.5预定义类型 3.6用户定义类型 3.7 栈和堆 3.7.1 栈 3.7 ...

  9. matlab中任意两边之和大于第三边,MATLAB教程第三章.ppt

    <MATLAB教程第三章.ppt>由会员分享,可在线阅读,更多相关<MATLAB教程第三章.ppt(34页珍藏版)>请在人人文库网上搜索. 1.MATLAB程序语言设计, ,第 ...

最新文章

  1. 七基于Fourinone实现MQ demo
  2. Science:产前母体感染促进后代的组织特异性免疫和炎症
  3. 如何查看linux版本?
  4. ios: coreData的NSManagedObject setvalue为null
  5. Algorithm:【Algorithm算法进阶之路】之数据结构基础知识
  6. 基于Vue.js的后台管理系统组件开发
  7. 程序员如何自我超越,教你一招
  8. Mysql笔记-对left join使用的进一步认识(多表查询的正确使用及认识)
  9. 19秋学期南开c语言在线作业,南开19秋学期(1709、1803、1809、1903、1909)《C语言程序设计》在线作业满分答案1...
  10. c语言递增20,2020-07-20(C语言)数据结构-在一个递增有序的线性表中,有数值相同的元素存在。若存储方式为单链表,设计算法去掉数值相同的元素,使表中不再有重复的元素...
  11. java jms消息队列_JMS消息队列ActiveMQ(发布/订阅模式)
  12. 单结晶体管的导电特性_室温制备自愈合、可注射PEDOT:PSS导电水凝胶
  13. SqList *L 和 SqList * L的区别
  14. 蓝桥杯历年(省赛)试题汇总及试题详解
  15. 5G啊5G,你是不是只比4G多一G?
  16. 速卖通韩国下载量再次登顶,7500万投资换来回报
  17. 名编辑电子杂志大师教程 | 如何删除电子画册中不要的页面?
  18. Cesium-定位至entity的位置
  19. laravel维护模式 MaintenanceMode
  20. 微信小程序商城项目实战(第七篇:生成订单支付页)

热门文章

  1. Java一维数组和二维数组的长度
  2. C++中rand()函数的用法
  3. python 组合数字和字符_python无限生成不重复(字母,数字,字符)组合的方法
  4. python输入一个小数,提取整数部分
  5. java jtextarea边框_JTextArea在java swing中的边框
  6. MyHDL中文手册(十)——转换成Verilog和VHDL
  7. Git的稀疏检出功能
  8. 关于extern用法说明
  9. 单目摄像头检测输出 3D 边界框
  10. LruCache源码的理解