Jsp中的自定义标签

JSP2自定义标签库技术 1、概述:     JSP本质其实仍然是Servlet,部署JSP后,服务器会将其自动转化成Servlet进行运行。用JSP取代Servlet的原因是利用Servlet实现用户界面比较繁琐,将大量的静态HTML代码穿插于Java代码中增加了代码维护工作的难度,并且也不利于前端开发人员和美工人员参与项目开发。     JSP 2 标准为开发者提供了自定义标签库的功能。使用自定义标签库的目的跟使用 阅读详情

自定义标签

自定义标签概述

自定义标签的步骤

其实我们在JSP页面中使用标签就等于调用某个对象的某个方法一样,例如:<c:if test=””>,这就是在调用对象的方法一样。自定义标签其实就是自定义类一样!

l  定义标签处理类:必须是Tag或SimpleTag的实现类;

l  编写标签库描述符文件(TLD);

 

SimpleTag接口是JSP2.0中新给出的接口,用来简化自定义标签,所以现在我们基本上都是使用SimpleTag。

Tag是老的,传统的自定义标签时使用的接口,现在不建议使用它了。

SimpleTag接口介绍

SimpleTag接口内容如下:

l  void doTag():标签执行方法;

l  JspTag getParent():获取父标签;

l  void setParent(JspTag parent):设置父标签

l  void setJspContext(JspContext context):设置PageContext

l  void setJspBody(JspFragment jspBody):设置标签体对象;

 

请记住,万物皆对象!在JSP页面中的标签也是对象!你可以通过查看JSP的“真身”清楚的知道,所有标签都会变成对象的方法调用。标签对应的类我们称之为“标签处理类”!

标签的生命周期:

1.      当容器(Tomcat)第一次执行到某个标签时,会创建标签处理类的实例;

2.      然后调用setJspContext(JspContext)方法,把当前JSP页面的pageContext对象传递给这个方法;

3.      如果当前标签有父标签,那么使用父标签的标签处理类对象调用setParent(JspTag)方法;

4.      如果标签有标签体,那么把标签体转换成JspFragment对象,然后调用setJspBody()方法;

5.      每次执行标签时,都调用doTag()方法,它是标签处理方法。

 

HelloTag.java

public class HelloTag implements SimpleTag {

    private JspTag parent;

    private PageContext pageContext;

    private JspFragment jspBody;

   

    public void doTag() throws JspException, IOException {

       pageContext.getOut().print("Hello Tag!!!");

    }

    public void setParent(JspTag parent) {

       this.parent = parent;

    }

    public JspTag getParent() {

       return this.parent;

    }

    public void setJspContext(JspContext pc) {

       this.pageContext = (PageContext) pc;

    }

    public void setJspBody(JspFragment jspBody) {

       this.jspBody = jspBody;

    }

}

 

标签库描述文件(TLD)

标签库描述文件是用来描述当前标签库中的标签的!标签库描述文件的扩展名为tld,你可以把它放到WEB-INF下,这样就不会被客户端直接访问到了。

hello.tld

<?xml version="1.0" encoding="UTF-8"?>

<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"

    xmlns:xml="http://www.w3.org/XML/1998/namespace"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

                      http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd ">

 

    <tlib-version>1.0</tlib-version>

    <short-name>itcast</short-name>

    <uri>http://www.cloud.cn/tags</uri>

    <tag>

       <name>hello</name>

       <tag-class>cn.cloud.tag.HelloTag</tag-class>

       <body-content>empty</body-content>

    </tag>

</taglib>

 

使用标签

在页面中使用标签分为两步:

l  使用taglib导入标签库;

l  使用标签;

 

<%@ taglib prefix="it" uri="/WEB-INF/hello.tld" %>

......

<it:hello/>

 

自定义标签进阶

继承SimpleTagSupport

  继承SimpleTagSuppport要比实现SimpleTag接口方便太多了,现在你只需要重写doTag()方法,其他方法都已经被SimpleTagSuppport完成了。

 

public class HelloTag extends SimpleTagSupport {

    public void doTag() throws JspException, IOException {

       this.getJspContext().getOut().write("<p>Hello SimpleTag!</p>");

    }

}

有标签体的标签

我们先来看看标签体内容的可选值:

<body-content>元素的可选值有:

l  empty:无标签体。

l  JSP:传统标签支持它,SimpleTag已经不再支持使用<body-content>JSP</body-content>。标签体内容可以是任何东西:EL、JSTL、<%=%>、<%%>,以及html;

l  scriptless:标签体内容不能是Java脚本,但可以是EL、JSTL等。在SimpleTag中,如果需要有标签体,那么就使用该选项;

l  tagdependent:标签体内容不做运算,由标签处理类自行处理,无论标签体内容是EL、JSP、JSTL,都不会做运算。这个选项几乎没有人会使用!

 

自定义有标签体的标签需要:

l  获取标签体对象:JspFragment jspBody = getJspBody();;

l  把标签体内容输出到页面:jspBody.invoke(null);

l  tld中指定标签内容类型:scriptless。

 

public class HelloTag extends SimpleTagSupport {

    public void doTag() throws JspException, IOException {

       PageContext pc = (PageContext) this.getJspContext();

       HttpServletRequest req = (HttpServletRequest) pc.getRequest();

       String s = req.getParameter("exec");

       if(s != null && s.endsWith("true")) {

           JspFragment body = this.getJspBody();

           body.invoke(null);

       }

    }

}

    <tag>

       <name>hello</name>

       <tag-class>cn.cloud.tags.HelloTag</tag-class>

       <body-content>scriptless</body-content>

    </tag>

    <cloud:hello>

        <h1>哈哈哈~</h1>

    </cloud:hello>

 

不执行标签下面的页面内容

  如果希望在执行了自定义标签后,不再执行JSP页面下面的东西,那么就需要在doTag()方法中使用SkipPageException。

public class SkipTag extends SimpleTagSupport {

    public void doTag() throws JspException, IOException {

       this.getJspContext().getOut().print("<h1>只能看到我!</h1>");

       throw new SkipPageException();

    }

}

    <tag>

       <name>skip</name>

       <tag-class>cn.cloud.tags.SkipTag</tag-class>

       <body-content>empty</body-content>

    </tag>

  <cloud:skip/>

  <h1>看不见我!</h1>

 

带有属性的标签

  一般标签都会带有属性,例如<c:iftest=””>,其中test就是一个boolean类型的属性。完成带有属性的标签需要:

l  在处理类中给出JavaBean属性(提供get/set方法);

l  在TLD中部属相关属性。

 

public class IfTag extends SimpleTagSupport {

    private boolean test;

    public boolean isTest() {

       return test;

    }

    public void setTest(boolean test) {

       this.test = test;

    }

    @Override

    public void doTag() throws JspException, IOException {

       if(test) {

           this.getJspBody().invoke(null);

       }

    }

}

    <tag>

       <name>if</name>

       <tag-class>cn.cloud.tag.IfTag</tag-class>

       <body-content>scriptless</body-content>

       <attribute>

           <name>test</name>

           <required>true</required>

           <rtexprvalue>true</rtexprvalue>

       </attribute>

    </tag>

<%

    pageContext.setAttribute("one", true);

    pageContext.setAttribute("two", false);

%>

<it:if test="${one }">xixi</it:if>

<it:if test="${two }">haha</it:if>

<it:if test="true">hehe</it:if>

Ansys Zemax与Speos协同设计:HUD系统从光学优化到驾驶模拟的全流程解析 本文详细解析了如何利用Ansys Zemax与Speos这对“黄金搭档”进行HUD系统的协同设计。流程始于Zemax进行核心光学架构与像差优化,奠定性能基础;随后将设计无缝导入Speos,通过HUD光学分析模块进行量化验证;最终在虚拟驾驶环境中进行沉浸式模拟,评估实际视觉体验与系统集成效果,实现从光学优化到驾驶模拟的全流程闭环。 阅读详情

相关推荐

TSC条码打印机C#例程(tsclib.dll调用) 【转】

//----program.cs using System;using System.Collections.Generic;using System.Windows.Forms; using System.Runtime.InteropServices;public class TSCLIB_DLL{[DllImport("TSCLIB.dll", EntryPoint = "abou...

weixin_33843947的博客 2441

学习笔记_Java_day13_JSTL_自定义标签库(9)

自定义标签 1 自定义标签概述 1.1 自定义标签的步骤 其实我们在JSP页面中使用标签就等于调用某个对象的某个方法一样,例如:<c:if test=””>,这就是在调用对象的方法一样。自定义标签其实就是自定义类一样! l 定义标签处理类:必须是Tag或SimpleTag的实现类; l 编写标签库描述符文件(TLD); SimpleTag接口是JSP2...

weixin_30822451的博客 168

从GEFCom到UCI:手把手教你构建电力负荷时空预测模型(Python版)

本文详细介绍了如何从GEFCom到UCI数据集构建电力负荷时空预测模型(Python版),涵盖数据集解析、时空特征工程、模型架构设计及工业部署优化。通过多任务图神经网络(MTGNN)实现高精度预测,并结合边缘计算和在线学习机制提升实际应用效果,为能源管理系统提供可靠解决方案。

lambda的博客 812

java web标签_javaweb学习6——自定义标签

声明:本文只是自学过程中,记录自己不会的知识点的摘要,如果想详细学习JavaWeb,请到孤傲苍狼博客学习,JavaWeb学习点此跳转传统标签接口中的各个方法可以返回的返回值说明:下图列举了Tag接口、IterationTag接口和BodyTag接口中的主要方法及它们分别可以返回的返回值的说明。在JSPAPI中也提供了IterationTag接口的默认实现类TagSupport、Iteration...

weixin_42458217的博客 182

阿里云网络架构设计

背景 一个企业上云,首先要考虑整个网络的规划,涉及到云上和云下的网络规划,云上VPC的规划,云上不同地域VPC的互通,云上可用区的选择等等,所以一定要提前规划好整体的网络架构,现在阿里云云上的虚拟化网络解决方案已经完全转向 了云企业网,所以所有使用阿里云的企业客户多多少少都会使用阿里云的CEN 支撑自己的业务。 云企业网介绍 云企业网(Cloud Enterprise Network)是承载在阿里云提供的高性能、低延迟的私有全球网络上的一张高可用网络。 IDC专线接入CEN 首先面临的是云上和云下打通,那么

修电脑的码农 4838

ThinkBook 16 2024 Ubuntu驱动全攻略:从无线网卡到触控板

本文详细介绍了ThinkBook 16 2024在Ubuntu系统下的驱动问题解决方案,涵盖无线网卡、蓝牙、显卡和触控板等关键硬件的驱动修复步骤。通过具体命令和配置指南,帮助用户快速解决兼容性问题,提升Ubuntu在ThinkBook上的使用体验。

weixin_29200741的博客 826

用java自定义标签_Java自定义标签用法实例分析

Java自定义标签用法实例分析发布于 2020-7-30|复制链接摘记: 本文实例讲述了Java自定义标签用法。分享给大家供大家参考,具体如下:简单例子实现一个标签分为两步:(1)继承SimpleTagSupport或TagSupport实现一个控制器(2)创建一个描述标签的tld文件。 ..本文实例讲述了Java自定义标签用法。分享给大家供大家参考,具体如下:简单例子实现一个标签分为两步:(1)...

weixin_35876760的博客 251

Agent应用实践之三十六 - AgentScope高阶用法:AG-UI

AI 大模型飞速进化,不懂 AI、不会用 Agent 的程序员,正在慢慢被行业淘汰。现在 AI 新技术迭代快到离谱:RAG 还没学明白,MCP 接踵而来;工具刚上手,Skills、各类新 Agent 概念又轮番刷屏;Manus还没看懂,就出来OpenClaw,OpenClaw热度还没退,又出来Hermes。越追越乱、越学越焦虑,永远在被动跟风,陷入学不完、跟不上、用不上的内耗。其实焦虑的根本原因,不是新技术太多,而是不懂大模型 Agent 应用底层原理,只会零散跟风,没有通用方法论。为此我专门推出Agent

代码让AI扣 139

JSTL自定义标签库

项目文件 格式化日期输出标签 a)继承javax.servlet.jsp.tagext.SimpleTagSupport简单标签的支持类,不允许标签内有主体内容。 b)重写doTag()方法:当标签执行时这个方法被调用。 this.getJspContext().getOut().write(string); c)给标签类添加相应的属性,并添加getter/setter方法。类中的这些属性对应标签上的属性名。 package com.model; import lombok.AllArgsConstru

愤怒的阿木木的博客 210

博途PLC信号处理系列之卡尔曼滤波程序(Kalman Filter)

三菱系列PLC的卡尔曼滤波程序,可以参看下面这篇博文PLC滤波算法之卡尔曼滤波(kalmanFilter)代码+测试_RXXW_Dor的博客-优快云博客_plc滤波kalman滤波是采用递归的方法解决线性滤波问题,只需要当前的测量值input(西门子PLC里比如我们的模拟量通道AIW0值)和前一个采样周期的估计值(上一个时刻的滤波输出结果last_out)就能进行状态估计,需要的存储空间小,每一步的计算量小。下面我们通过程序代码一一给大家展示下。注意。......

RXXW_Dor的博客 3475

YOLO11训练中的过拟合识别与应对策略:讲解过拟合的表现、原因及应对方法(如数据增强、正则化、DropOut)

摘要 本文深入探讨了YOLO11目标检测模型中的过拟合问题。首先解析了过拟合的本质,即模型在训练数据上表现优异但泛化能力差的现象,并通过误差分解公式解释了其数学原理。文章详细列举了YOLO11中过拟合的具体表现,包括训练与验证指标分化、检测性能不一致性、置信度分布异常和类别检测不均衡等问题,并提供了对应的可视化诊断方法。 在原因分析部分,重点阐述了模型复杂度与数据规模不匹配、训练数据质量与分布问题以及训练策略不当三大根本原因。特别对比了YOLO11不同版本(n/s/m/l/x)的参数量和推荐最小数据量,指出

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 242

JSP之自定义jstl标签

让你秒懂自定义jstl标签😉😉

weixin_65474399的博客 2485

[Dify] 如何在Dify中解析上传的TXT文件内容

在Dify平台上构建智能应用时,解析用户上传的.txt文件是关键步骤。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 2637

JSP自定义标签

1. 标签语言特点 <开始标签>。标签体。</结束标签> 空标签 <br/><hr/> <开始标签 属性名="属性值"></结束标签> <开始标签/> 2. 自定义标签的开发及使用步骤 2.1 创建一个标签助手类(继承BodyTagSupport) 标签属性必须助手类的属性对应、且要提供对应get/set方法 2.2 创建标签库描述文件(t.....................

weixin_62332711的博客 2982

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

JSP 自定义标签

自定义标签是用户定义的JSP语言元素。当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操作,即当servlet执行时Web container调用那些操作。 JSP标签扩展可以让你创建新的标签并且可以直接插入到一个JSP页面。 JSP 2.0规范中引入Simple Tag Handlers来编写这些自定义标记。 你可以继承SimpleTagSupport类并重写的doTag()方法来开发一个最简单的自定义标签。

lifeyer的博客 993

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

JavaWeb之JSP自定义标签

在jsp开发时,当jsp内置标签以及JSTL标签库都满足不了需求时,可以根据自己的需求来自定义标签。其实在jsp页面使用标签就等同于调用某个对象的某个方法。 自定义标签步骤:先定义标签处理类(如继承SimpleTagSupport类),再编写TLD文件(标签库描述库文件)。 定义标签类可以编写一个实现SimpleTag接口的类, public class MyTag1 implements...

田野上的风筝 8725

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

自定义jsp标签

标记语言,是一种注释文本的语言,以便于计算机可以操作。很多与“ML”结尾的语言都是标记语言,比如HTML,XML,XHTML,VML等等。标记语言与其他语言一样,也需要运行它们的环境,比如HTML的运行环境时浏览器,XML也要自己的解析和运行的环境。基本结构标签体空标签编写助手类编写标签库描述文件(tld)在页面上引入标签使用。......

weixin_64938628的博客 507

JSP 自定义标签详解

自定义标签是用户定义的JSP语言元素。当包含自定义标签的JSP页面转换为servlet时,这个标签就转换为一个名为tag handler的对象上的操作。之后当JSP页面的servlet执行时,Web容器就调用这些操作。JSP自定义标签可以分为两种类型:标记库和函数库。(必须在)SKIP_BODY跳过主体计算主体内容并输出再次计算主体一次EVAL_PAGE计算后续内容SKIP_PAGE跳过页面后续内容。

让优秀成为一种习惯! 2376

Java jsp 自定义标签

1 自定义标签 1.1 引入 需求: 向浏览器输出当前客户的IP地址 (只能使用jsp标签)   1.2 第一个自定义标签开发步骤 1)编写一个普通的java类,继承SimpleTagSupport类,叫标签处理器类   /**  * 标签处理器类  * @author APPle  * 1)继承SimpleTagSupport  *  */ public class ShowIpTag

qq_19900687的博客 1万+

jsp自定义标签

文章目录前言为什么要学自定义标签使用自定义标签步骤自定义标签生命周期图自定义标签简单案例总结 前言 我们学习jsp自定义标签之前,首先要知道什么是标签,标签有哪些特点 1.什么是自定义标签 自定义标签是用户定义的JSP语言元素。当包含自定义标签的JSP页面转换为servlet时,这个标签就转换为一个名为tag handler的对象上的操作。之后当JSP页面的servlet执行时,Web容器就调用这些操作。 2.标签的特点组成 <开始标签 属性=“属性值”>标签体</结束标签> 还有一

licmi的博客 1166

jsp自定义嵌套标签

 1.定义标签实现类ParentTag.javaimport java.io.IOException;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;import javax.servlet.jsp.JspException;

swandragon的专栏 6023

jsp自定义标签html,JSP自定义标签

自定义标签是用户定义的JSP语言元素。当包含自定义标签的JSP页面被转换为一个servlet时,标签被转换为一个名为标签处理程序的对象的操作。然后,Web容器在执行JSP页面的servlet时调用这些操作。JSP标签扩展可让您创建可以直接插入JavaServer页面的新标签,就像您在前一章中了解的内置标签一样。JSP 2.0规范引入了简单标签处理程序来编写这些自定义标签。To write a cu...

weixin_36155846的博客 327

【JavaWeb】Jsp的自定义标签

JSP技术提供了一种封装动态类型的机制—自定义标签,它扩展了JSP语言。自定义标签通常发布在标签库中,标签库定义了一个自定义标签集并包含实现标签的对象。本篇文章简单讲述了jsp自定义标签的一些基本知识和使用方法。

peng_YuJun的博客 1169
上一篇: Oracle中异常处理
下一篇: JavaWeb中MVC模型的演变
午-夜
博客等级 码龄12年 95粉丝 133原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值