JSP:Tag文件的使用

需求:多个JSP页面可能需要使用一些相同的信息     例如:导航栏、标题等。

目标:提高这些相同信息的代码的复用性。

方法:将这些相同的元素形成一种特殊的文件,以便所有页面都可以使用,即:Tag文件

1、Tag对比include    

include指令标记<%@ include file=“...” %>

include动作标记<jsp:include page=“...” />

include缺点:有些情况下处理的是JSP文件,而用户可能通过该文件所在的Web服务目录直接访问到这个JSP文件。

当我们不希望这些文件被用户访问到时,需要采用新的办法:Tag文件——可被JSP动态加载,但不能被用户访问。

2、Tag文件的结构

*.tag文件    结构: 近似JSP的结构+Tag特殊指令标记

AddSum.tag

<p>这是一个Tag文件,负责计算1100内的奇数之和:</p

<% 

     int sum=0, i=l ;

     for(i=l;i<=l00;i++)

    { 

 if(i%2==1)

sum=sum+i ;

 }

out.println(sum);
%>   

3、Tag文件的保存                       

Tag文件的位置必须是:Web服务目录\WEB-INF\tags

比如:webapps\webtest\WEB-INF\tags

其中的WEB-INF和tags部是固定的子目录名称,而tags下的子目录名称可由用户给定。

4、Tag标记与Tag文件的使用

步骤1:引入标记库(对tag的声明)在JSP页面中使用<taglib>指令标记引入tag标记库。

             格式

            <%@ taglib tagdir=“tag标记的位置”  prefix=“前缀” %>

例如: <%@ taglib tagdir=“/WEB-INF/tags”  prefix=“beijing” %>

           <%@ taglib tagdir=“/WEB-INF/tags/tags2”  prefix=“dalian” %>

步骤2:在JSP页面中使用Tag标记来使用Tag。

格式:<前缀: Tag文件名/> 或<前缀: Tag文件名>

标记体</前缀: Tag文件名>

例如:<beijing: AddSum/>  

标记体

JSP页面在调用Tag过程中可通过标记体动态地向Tag传送信息。

在Tag中,通过<jsp:doBody/>来处理JSP传递过来的标记体。

 默认情况下,标记体是一些文本数据

<%@page contentType="text/html" pageEncoding="UTF-8"%>

<%@taglib prefix="look" tagdir="/WEB-INF/tags" %>

<html>      

<look:Show>北京奥运会圆满成功 </look:Show>

 <look:Show> I Love this Game!</look:Show>

<look:Show>欢迎您!</look:Show>  

</html>

Show.tag

<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>

5、Tag文件中的常用指令

作用:与JSP文件类似,Tag文件中也有一些常用指令,这些指令将影响Tag文件的一些属性和行为。

Tag文件中经常使用的指令有:

1. tag

2.include

3.attribute

4.variable

5.taglib

tag指令

作用:类似于page指令,指定Tag某些属性的值。   

格式:     <%@ tag 属性1=“1” 属性2=“2”...... %>  

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

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

可设置的属性有body-content       language      import       pageEncoding

body-content属性

作用:定义JSP调用Tag时,标记体的格式。

格式<%@ tag body-content=“” %>

可取empty/tagdependent/scriptless三个值,

empty——JSP不能使用标记体;

tagdependent——标记体内容按纯文本处理;

scriptless——标记体中不能有Java程序片。

language属性:定义Tag使用的脚本语言,同JSP一样,目前只能设置为“Java”,无需设置。

import属性:引入Java核心包的类。

pageEncoding属性:指定Tag文件的字符编码,默认是ISO-8859-1

include指令

JSPinclude指令类似,回顾JSPinclude指令。

<%@ include file=“filename” %>

attribute指令

作用:实现JSPTag传送数据。

格式Tag

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

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

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

</前缀: Tag文件名字 >

例如: tag中定义:<%@ attribute name=“length”  required=“true"%>

 JSP中代码: <beijing: AddSum  length=“1000” />

注意:1. 传送的是一个对象的引用

2. name属性是必须的,对应传送对象的名字。

3. type属性是对象的类型,必须带有包名,如“java.util.Date”不能简写成“Date”。默认值为java.lang.String类型。

4. required属性是可选的,默认值为false,为true时,JSP页面必须在标签中带有指定name属性的对象。

5. tag中不可再定义与name具有相同名字的变量,否则会使attribute对象失效。           

variable指令

作用:实现TagJSP返回数据。

格式1.Tag中首先声明:

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

2.然后调用jspContext内置对象的setAttribute()将对象存储到jspContext中,以便JSP调用。如:

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

3.那么在JSP中,可以直接通过对象名来使用这个对象。如:

int year=time.getYear()+1900

该代码使用Date的getYear()方法,将Tag传送的time对象中记录的时间年赋给year变量。          

注意:1. 返回的是一个对象。

2. JSP中不可再定义与name具有相同名字的变量,否则会出现编译错误。

3. scope定义了variableJSP中的使用范围,可取值为AT_BEGINNESTEDAT_ENDAT_BEGIN: JSP页面一旦使用Tag,就可以使用variable给出的对象。

NESTED: JSP页面只可以在Tag标记的标记体中使用variable给出的对象。

AT_END: JSP页面在Tag标记结束后才可以使用variable给出的对象。

6、Tag标记的嵌套

当我们使用Tag标记时,可以带有标记体,标记体还可以是一个Tag标记,这就实现了Tag标记的嵌套。Tag标记中的标记体由Tag文件的<jsp:doBody/>标记负责处理,而在Tag文件中,<jsp:doBody />标记被替换成对“标记体”进行处理后所得到的结果。

7、JSP引擎与Tomcat服务器

将安装JSP引擎的计算机称作一个支持JSP的Web服务器。这个服务器负责运行JSP,并将运行结果返回给用户。

JSP的核心内容之一就是编写JSP页面,JSP页面是Web应用程序的重要组成部分。一个简单Web应用程序可能只有一个JSP页面,而一个复杂的Web应用程序可能由许多JSP页面、Javabean和servlet组成。当用户请求Web服务器上的JSP页面时,JSP引擎负责运行JSP,并将运行结果返回给用户。

  attribute指令

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/173111.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

抽象工厂设计模式是什么?什么是 Abstract Factory 抽象工厂设计模式?Python 抽象工厂设计模式示例代码

什么是 Abstract Factory 抽象工厂设计模式&#xff1f; 抽象工厂设计模式是一种创建型设计模式&#xff0c;旨在提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无需指定其具体类。它允许客户端使用抽象的接口创建一组相关对象&#xff0c;而无需关注实际的对象实…

广州华锐互动:3D模拟体验火箭发射过程有什么教育意义?

3D虚拟还原火箭发射过程在教育领域有着深远的意义。它能够为学生提供直观、生动的体验&#xff0c;帮助他们更好地理解和掌握相关知识&#xff0c;激发他们对科技的兴趣和探索欲望。 首先&#xff0c;3D虚拟还原火箭发射过程可以帮助学生更好地理解和掌握航天科技知识。在火箭发…

【数据结构】栈和队列的模拟实现

前言&#xff1a;前面我们学习了单链表并且模拟了它的实现&#xff0c;今天我们来进一步学习&#xff0c;来学习栈和队列吧&#xff01;一起加油各位&#xff0c;后面的路只会越来越难走需要我们一步一个脚印&#xff01; &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x…

Leetcode 第 372 场周赛题解

Leetcode 第 372 场周赛题解 Leetcode 第 372 场周赛题解题目1&#xff1a;2937. 使三个字符串相等思路代码复杂度分析 题目2&#xff1a;2938. 区分黑球与白球思路代码复杂度分析 题目3&#xff1a;2939. 最大异或乘积思路代码复杂度分析 题目4&#xff1a;2940. 找到 Alice 和…

演示命令执行漏洞无回现如何渗透

演示命令执行漏洞无回现如何渗透 在DNSlog 获取一个域名 使用dvwa中的命令执行来ping此域名 执行后在DNSlog收到解析&#xff0c;证明命令执行成功

VSCode任务tasks.json中的问题匹配器problemMatcher的问题匹配模式ProblemPattern详解

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 一、简介 在 VS Code 中&#xff0c;tasks.json 文件中的 problemMatcher 字段用于定义如何解析任务输出中的问题&#xff08;错误、警告等&#xff09;。 problemMatcher有三种配置方式&#xff0c;具体可…

欧科云链研究院:从香港SFC最新文件看链上交易合规必备之选

出品&#xff5c;欧科云链研究院 作者&#xff5c;Hedy Bi 近日&#xff0c;香港证监会在其官网发布“致持牌法团、获证监会发牌的虚拟资产服务提供者及有联系实体的通函 - 打击洗钱&#xff0f;恐怖分子资金筹集经更新的《打击洗钱&#xff0f;恐怖分子资金筹集的自我评估查…

图形学 -- Ray Tracing 光线追踪

参考视频&#xff1a;Lecture 13 Ray Tracing 1_哔哩哔哩_bilibili Ray tracing 原因 Rasterization 格栅话不能处理好global effects&#xff0c;如↓ 简介反射&#xff1a;光线在到达人眼前不止弹射一次 基本假设 1&#xff09;光是沿着直线传播 2&#xff09;光线交叉…

2023年山东省安全员B证证模拟考试题库及山东省安全员B证理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年山东省安全员B证证模拟考试题库及山东省安全员B证理论考试试题是由安全生产模拟考试一点通提供&#xff0c;山东省安全员B证证模拟考试题库是根据山东省安全员B证最新版教材&#xff0c;山东省安全员B证大纲整理…

CMap数据库筛选化学药物

数据库clue.io 文献链接&#xff1a;连接图谱&#xff1a;使用基因表达特征连接小分子、基因和疾病 |科学 (science.org) 基本模式&#xff1a;利用CMap将差异基因列表与数据库参考数据集比对&#xff1b;根据差异表达基因在参考基因表达谱富集情况得到一个相关性分数&#…

YOLOv7训练:_pickle.UnpicklingError: STACK_GLOBAL requires str

在YOLOv7训练过程中&#xff0c;出现以下错误&#xff1a; 原因就是&#xff1a; 这个数据集在其他地方运行过产生了**.cache**文件 解决方案&#xff08;亲测有效&#xff09;&#xff1a; 删除数据集中的所有 label.cache文件&#xff0c;比如训练集、验证集、测试集都删…

SpingBoot原理

目录 配置优先级Bean管理 (掌握)Bean的获取 ApplicationContext.getBeanBean的作用域 Scope("prototype") Lazy第三方Bean Bean Configuration SpringBoot底层原理 起步依赖与自动配置(无需手撸但面试高频知识点)自动配置引入第三方依赖常见方案方案1&#xff1a;Com…

hook io异常注入

文中code https://gitee.com/bbjg001/darcy_common/tree/master/io_hook 需求引入 最近工作需要&#xff0c;需要验证一下我们的服务在硬盘故障下的鲁棒性。 从同事大佬哪里了解到hook技术&#xff0c;可以通过LD_PRELOAD这个环境变量拦截依赖库的调用链&#xff0c;将对标准…

PowerShell无人参与安装最新版本SQL Server Management Studio (SSMS)

文章目录 下载SQL Server Management Studio (SSMS)Power Shell实现无人安装推荐阅读 下载SQL Server Management Studio (SSMS) SSMS 19.2 是最新的正式发布 (GA) 版本。 如果已经安装了 SSMS 19 预览版&#xff0c;需要在安装 SSMS 19.2 之前将其卸载。 如果安装了 SSMS 19.…

【Java】多线程-单例模式/volatile-指令重排序

单例模式即代码中只有一个实例的模式 适用场景&#xff1a;有些场景下&#xff0c;有的类只能有一个对象&#xff0c;不能有多个 要注意&#xff1a;在单例模式下&#xff0c;要保证不能产生多个实例 1、饿汉模式 class Singleton{private static Singleton instance new …

人员定位系统人员聚集风险监测预警功能为企业安全生产保驾护航!

危化企业生产区域由于装置设施开停工、设备检维修或其它原因&#xff0c;会导致在局部作业区域出现作业操作人员、指挥管理人员不定时、不定点的聚集情况&#xff0c;一旦发生泄漏中毒、火灾爆炸、高温高热物质喷溅等事故&#xff0c;人员聚集将会在一定程度上加重事故后果的严…

【Echart】Echart设置label太长隐藏:

文章目录 第一种&#xff1a;竖排显示第二种&#xff1a;显示部分第三种&#xff1a;强制显示所有标签并旋转 第一种&#xff1a;竖排显示 xAxis: {type: category,data: res.data.data.sz.xAxis,axisLabel:{fontSize:12,formatter: function(value) {return value.split().joi…

nginx基础组件的使用

文章目录 一、Nginx 的相关组件介绍1.1、ngx_palloc相关源码1.2、ngx_array组件的相关源码1.3、ngx_array的数据结构1.4、ngx_cycle简介和相关源码1.5、ngx_list相关源码1.6、ngx_list 的数据结构 二、Nginx 组件的使用2.1、makefile的编写2.2、ngx_pallocngx_array的使用2.3、…