JSP:Tag文件的使用

news2024/9/26 5:20:53

需求:多个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指令

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于lenra你需要了解的

monorepo&#xff1a;项目代码管理方式&#xff0c;单个仓库中管理多个项目是一种设计思想 lenra&#xff1a;是一种工具&#xff0c;对于使用npm和git管理多软件包代码仓库的工作流程进行优化 使用这些工具的优点&#xff1a; 公共依赖只要安装一次&#xff0c;Monorepo 中…

阿里云ECS服务器如何搭建并连接FTP,完整步骤

怎么用终端连接服务器就不多说了&#xff0c;直接开始搭建FTP。 我是用root账号执行的命令&#xff0c;如果不使用root账号&#xff0c;注意在命令前面加sudo。 一、安装FTP 我这里安装的是vsftpd。 1、检查是否已安装vsftpd&#xff1a; vsftpd -v如果出现了版本信息&…

JAVAEE---多线程

内核 内核时操作系统的核心 操作系统有内核态和用户态&#xff0c;像我们平时所用到的qq音乐&#xff0c;微信等都属于用户态执行的程序。那么qq音乐播放音乐需要用到扬声器&#xff0c;扬声器的操作就是在内核空间进行操作&#xff0c;用户态不能对其进行操作。 操作系统 …

QT专栏2 -Qt for Android

#2023年11月18日 # Qt version 6.6 JDK17 JDK 安装 Java Downloads | Oracle 设置环境变量 鼠标右键我的电脑&#xff0c;出现如下界面 Qt配置 改用JDK18&#xff0c;没有乱码&#xff0c;由于不影响APK产生。 做了好多尝试&#xff0c;更换JDK版本(11,18,19,21)&…

Python+OpenCV裂缝面积识别系统(部署教程&源码)

1.研究背景与意义 随着科技的不断发展&#xff0c;计算机视觉技术在各个领域中得到了广泛的应用。其中&#xff0c;图像处理是计算机视觉中的一个重要分支&#xff0c;它通过对图像进行数字化处理&#xff0c;提取出其中的有用信息&#xff0c;为后续的分析和应用提供支持。而…

Git——感谢尚硅谷官方文档

Git——尚硅谷学习笔记 第1章 Git 概述1.1 何为版本控制1.2 为什么需要版本控制1.3 版本控制工具1.4 Git 简史1.5 Git 工作机制1.6 Git 和代码托管中心 第2章 Git 安装第 3 章 Git 常用命令3.1 设置用户签名3.2 初始化本地库3.3 查看本地库状态3.4 添加暂存区3.4.1 将工作区的文…

大数据平台红蓝对抗 - 磨利刃,淬精兵! | 京东云技术团队

一、背景 目前大促备战常见备战工作&#xff1a;专项压测&#xff08;全链路压测、内部压测&#xff09;、灾备演练、降级演练、限流、巡检&#xff08;监控、应用健康度&#xff09;、混沌演练&#xff08;红蓝对抗&#xff09;&#xff0c;如下图所示。随着平台业务越来越复…

限时开发、码力全开、2w奖金!AGI Hackathon等你挑战!

AGI时代&#xff0c;我们已不再满足于简单的产品开发&#xff0c;与大模型结合的无限想象力&#xff0c;成为开发者们新的追求。 你有能力将想法转化为现实吗&#xff1f;你有勇气接受挑战&#xff0c;创造全新的AI应用吗&#xff1f; 如果你有热情&#xff0c;有信心&#xff…

深度学习之生成唐诗案例(Pytorch版)

主要思路&#xff1a; 对于唐诗生成来说&#xff0c;我们定义一个"S" 和 "E"作为开始和结束。 示例的唐诗大概有40000多首&#xff0c; 首先数据预处理&#xff0c;将唐诗加载到内存&#xff0c;生成对应的word2idx、idx2word、以及唐诗按顺序的字序列。…

注册中心CAP架构剖析

Nacos 支持 AP 或 CP AP Nacos 通过临时节点实现 AP 架构&#xff0c;将服务列表放在内存中&#xff1b; CP Nacos 通过持久化节点实现 CP 架构&#xff0c;将服务列表放在文件中&#xff0c;并同步到内存&#xff0c;通过 Raft 协议算法实现&#xff1b; 通过配置 epheme…

中科创达:所有产品都可以用生成式AI重做一遍

对于制造企业的数字化转型来说&#xff0c;生成式AI究竟具备怎样的意义和价值&#xff1f; 在与亚马逊云科技的合作中&#xff0c;中科创达对此有着深刻的领会和感悟。 生成式AI助力制造业数字化转型 “科技是第一生产力”&#xff0c;对于这句脍炙人口的名言&#xff0c;制造企…

x shell 用作串口调试助手

x shell 用作串口调试助手 Xshell 介绍 是一个强大的安全终端模拟软件&#xff0c;它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。 Xshell可以在Wi…

PDF文件无密码,如何解密?

PDF文件有两种密码&#xff0c;一个打开密码、一个限制编辑密码&#xff0c;因为PDF文件设置了密码&#xff0c;那么打开、编辑PDF文件就会受到限制。想要解密&#xff0c;我们需要输入正确的密码&#xff0c;但是有时候我们可能会出现忘记密码的情况&#xff0c;或者网上下载P…

tomcat (SCI)ServletContainerInitializer 的加载原理

问题&#xff1a;使用WebScoket的时候发现通过ServerEndpoint方式注册上去的url无法访问&#xff0c;报错404 经过排查发现在WsServerContainer这个类中的addEndpoint方法一直没有触发ServerEndpoint注解的扫描 通过该方法来源于StandardContext.startInternal()方法的调用如下…

基于单片机仓库温湿度监测报警系统仿真设计

**单片机设计介绍&#xff0c;基于单片机仓库温湿度监测报警系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的仓库温湿度监测报警系统可以被设计成能够实时监测仓库内的温度和湿度&#xff0c;并根据预设…

steamui.dll找不到指定模块,要怎么修复steamui.dll文件

当我们使用Steam进行游戏时&#xff0c;有时可能会面对一些令人无奈的技术问题。一种常见的问题是“找不到指定模块steamui.dll”&#xff0c;这可能是由于缺少文件、文件损坏或软件冲突等原因导致。但别担心&#xff0c;这篇文章将提供几种解决此问题的方法&#xff0c;并针对…

设计模式总结-笔记

一个目标&#xff1a;管理变化&#xff0c;提供复用&#xff01; 两种手段&#xff1a;分解vs.抽象 八大原则&#xff1a; 依赖倒置原则&#xff08;DIP&#xff09; 开放封闭原则&#xff08;OCP&#xff09; 单一职责原则&#xff08;SRP&#xff09; Liskov替换原则&a…

【Qt一坑】qt编译出现“常量中有换行符”

在qt编译过程中出现“常量中有换行符”&#xff0c;原因有以下几点&#xff08;qt版本5.14.2&#xff09;&#xff1a; 1.中文编码格式问题&#xff0c;将UTF-8编码格式改成 UTF-8 BOM。 或者使用QtCreator 进行如下设置&#xff08;找到Qt的左边列表里的项目&#xff0c;下的…

git -1

1.创建第一个仓库并配置local用户信息 git config git config --global 对当前用户所有仓库有效 git config --system 对系统所有登录的用户有效 git config --local 只对某个仓库有效 git config --list 显示配置 git config --list --global 所有仓库 git config --list…

Vue3鼠标拖拽生成区域块并选中元素

Vue3鼠标拖拽生成区域块并选中元素&#xff0c;选中的元素则背景高亮(或者其它逻辑)。 <script setup> import { ref } from vue// 区域ref const regionRef ref(null)// 内容ref const itemRefs ref(null)// 是否开启绘画区域 const enable ref(false)// 鼠标开始位置…