自定义标签库

JSP标签、自定义标签,含有属性 学习JSP标签的基础实例代码,包含了JSP标签技术需要的最基本的文件,便于理解JSP标签的底层实现。 立即下载
  自定义标签处理类一般都继承TagSupport或BodyTagSupport
1.先看一个普通的最简单的自定义标签程序。
A:创建标签的处理类
Java代码 复制代码
  1. package com.test.tag;   
  2.   
  3. import java.io.IOException;   
  4.   
  5. import javax.servlet.jsp.JspException;   
  6. import javax.servlet.jsp.tagext.Tag;   
  7. import javax.servlet.jsp.tagext.TagSupport;   
  8.   
  9. @SuppressWarnings("serial")   
  10. public class HelloTag extends TagSupport {   
  11.   
  12.     //doStartTag返回的都是BODY相关,doEndTag返回的都是PAGE相关   
  13.     @Override  
  14.     public int doStartTag() throws JspException {   
  15.         try {   
  16.             //通过PageContext对象的getOut()方法获得JspWriter对象输出内容   
  17.             this.pageContext.getOut().write("hello");   
  18.         } catch (IOException e) {   
  19.             e.printStackTrace();   
  20.         }   
  21.         return Tag.EVAL_BODY_INCLUDE;   
  22.     }   
  23.   
  24. }  
package com.test.tag;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.Tag;
import javax.servlet.jsp.tagext.TagSupport;

@SuppressWarnings("serial")
public class HelloTag extends TagSupport {

	//doStartTag返回的都是BODY相关,doEndTag返回的都是PAGE相关
	@Override
	public int doStartTag() throws JspException {
		try {
			//通过PageContext对象的getOut()方法获得JspWriter对象输出内容
			this.pageContext.getOut().write("hello");
		} catch (IOException e) {
			e.printStackTrace();
		}
		return Tag.EVAL_BODY_INCLUDE;
	}

}



B:创建标签库描述文件
Xml代码 复制代码
  1. <?xml version="1.0" encoding="ISO-8859-1" ?>  
  2. <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">  
  3. <taglib>  
  4.     <tlib-version>1.0</tlib-version>  
  5.     <jsp-version>1.2</jsp-version>  
  6.     <short-name>hello taglib test</short-name>  
  7.     <uri>/hellotag</uri>  
  8.        
  9.     <tag>  
  10.          <!--Tag名字 -->  
  11.         <name>hello</name>  
  12.         <!-- 该Tag对应的处理类 -->  
  13.         <tag-class>com.test.tag.HelloTag</tag-class>  
  14.         <!-- 该 Tag的body内容为空  -->  
  15.         <body-content>empty</body-content>  
  16.     </tag>  
  17. </taglib>  


C.在JSP文件中引入标签库,然后插入标签
jsp里有两种引用方式:
<%@ taglib uri="/WEB-INF/hello.tld" prefix="aa" %>或者
<%@ taglib uri="/hellotag" prefix="aa" %>
Java代码 复制代码
  1. <%@ page language="java"  pageEncoding="UTF-8"%>   
  2. <%@ taglib uri="/hellotag" prefix="aa" %>   
  3.   
  4.   
  5. <html>   
  6.   <body>   
  7.     <aa:hello/>   
  8.   </body>   
  9. </html>  
<%@ page language="java"  pageEncoding="UTF-8"%>
<%@ taglib uri="/hellotag" prefix="aa" %>


<html>
  <body>
    <aa:hello/>
  </body>
</html>


输出结果为:hello

2.自定义标签库引用资源文件
A:首先在应用程序根目录下建立一个资源文件比如叫:helloworld.properties,内容为:
Java代码 复制代码
  1. hello.title=tagTitle   
  2. hello.content=tagContent  
hello.title=tagTitle
hello.content=tagContent

B:建立一个Servlet,在启动时加载该Servlet,在init方法里读取helloworld.properties文件内容。
Java代码 复制代码
  1. package com.test.tag;   
  2.   
  3. import java.io.InputStream;   
  4. import java.util.Properties;   
  5.   
  6. import javax.servlet.ServletConfig;   
  7. import javax.servlet.ServletContext;   
  8. import javax.servlet.ServletException;   
  9. import javax.servlet.http.HttpServlet;   
  10.   
  11. @SuppressWarnings("serial")   
  12. public class TagServlet extends HttpServlet {   
  13.     public void init() throws ServletException {   
  14.         System.out.println("init not param");   
  15.     }   
  16.     //init(ServletConfig config)存在,则init()方法则不会执行。如果init(ServletConfig config)不存在,则init()方法会执行   
  17.     @Override  
  18.     public void init(ServletConfig config) throws ServletException {   
  19.         try{   
  20.             System.out.println("init have param");   
  21.             Properties p = new Properties();   
  22.             //通过ServletContext读取资源文件   
  23.             ServletContext context = config.getServletContext();   
  24.             InputStream in = context.getResourceAsStream("/helloworld.properties");   
  25.                
  26.             p.load(in);   
  27.             in.close();   
  28.             //设置属性key-value到context中   
  29.             context.setAttribute("prop", p);   
  30.         }catch(Exception e){   
  31.             e.printStackTrace();   
  32.         }   
  33.            
  34.     }   
  35.        
  36.   
  37. }  
package com.test.tag;

import java.io.InputStream;
import java.util.Properties;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

@SuppressWarnings("serial")
public class TagServlet extends HttpServlet {
	public void init() throws ServletException {
		System.out.println("init not param");
	}
    //init(ServletConfig config)存在,则init()方法则不会执行。如果init(ServletConfig config)不存在,则init()方法会执行
	@Override
	public void init(ServletConfig config) throws ServletException {
		try{
			System.out.println("init have param");
			Properties p = new Properties();
			//通过ServletContext读取资源文件
			ServletContext context = config.getServletContext();
			InputStream in = context.getResourceAsStream("/helloworld.properties");
			
			p.load(in);
			in.close();
			//设置属性key-value到context中
			context.setAttribute("prop", p);
		}catch(Exception e){
			e.printStackTrace();
		}
		
	}
	

}


C:创建标签库的处理类:
Java代码 复制代码
  1. package com.test.tag;   
  2.   
  3. import java.util.Properties;   
  4.   
  5. import javax.servlet.jsp.JspException;   
  6. import javax.servlet.jsp.PageContext;   
  7. import javax.servlet.jsp.tagext.Tag;   
  8. import javax.servlet.jsp.tagext.TagSupport;   
  9.   
  10. @SuppressWarnings("serial")   
  11. public class HelloTagByResource extends TagSupport {   
  12.     private String title;   
  13.     public String getTitle() {   
  14.         return title;   
  15.     }   
  16.     public void setTitle(String title) {   
  17.         this.title = title;   
  18.     }   
  19.     //在doStartTag和doEndTag里写都可以。不要误认为:"遇到标签的起始标记时,还没有解析到其属性title,所以放在doStartTag里写会报错"   
  20.     @SuppressWarnings("static-access")   
  21.     @Override  
  22.     public int doStartTag() throws JspException {   
  23.         try{   
  24. //          Properties p = (Properties)this.pageContext.getAttribute("ps",this.pageContext.APPLICATION_SCOPE);   
  25.             Properties p = (Properties)this.pageContext.getAttribute("ps",PageContext.APPLICATION_SCOPE);   
  26.             String str = p.getProperty(title);   
  27.             this.pageContext.getOut().print(str);   
  28.         }catch(Exception e){   
  29.             e.printStackTrace();   
  30.         }   
  31.         return Tag.EVAL_BODY_INCLUDE;   
  32.     }   
  33. //  @Override   
  34. //  public int doEndTag() throws JspException {   
  35. //      try{   
  36. ////            Properties p = (Properties)this.pageContext.getAttribute("ps",this.pageContext.APPLICATION_SCOPE);   
  37. //          Properties p = (Properties)this.pageContext.getAttribute("ps",PageContext.APPLICATION_SCOPE);   
  38. //          String str = p.getProperty(title);   
  39. //          this.pageContext.getOut().print(str);   
  40. //      }catch(Exception e){   
  41. //          e.printStackTrace();   
  42. //      }   
  43. //      return Tag.EVAL_PAGE;   
  44. //  }   
  45.   
  46.        
  47.        
  48. }  
package com.test.tag;

import java.util.Properties;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.Tag;
import javax.servlet.jsp.tagext.TagSupport;

@SuppressWarnings("serial")
public class HelloTagByResource extends TagSupport {
	private String title;
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	//在doStartTag和doEndTag里写都可以。不要误认为:"遇到标签的起始标记时,还没有解析到其属性title,所以放在doStartTag里写会报错"
	@SuppressWarnings("static-access")
	@Override
	public int doStartTag() throws JspException {
		try{
//			Properties p = (Properties)this.pageContext.getAttribute("ps",this.pageContext.APPLICATION_SCOPE);
			Properties p = (Properties)this.pageContext.getAttribute("ps",PageContext.APPLICATION_SCOPE);
			String str = p.getProperty(title);
			this.pageContext.getOut().print(str);
		}catch(Exception e){
			e.printStackTrace();
		}
		return Tag.EVAL_BODY_INCLUDE;
	}
//	@Override
//	public int doEndTag() throws JspException {
//		try{
////			Properties p = (Properties)this.pageContext.getAttribute("ps",this.pageContext.APPLICATION_SCOPE);
//			Properties p = (Properties)this.pageContext.getAttribute("ps",PageContext.APPLICATION_SCOPE);
//			String str = p.getProperty(title);
//			this.pageContext.getOut().print(str);
//		}catch(Exception e){
//			e.printStackTrace();
//		}
//		return Tag.EVAL_PAGE;
//	}

	
	
}


D:创建自定义标签的描述文件
Xml代码 复制代码
  1. <?xml version="1.0" encoding="ISO-8859-1" ?>  
  2. <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">  
  3. <taglib>  
  4.     <tlib-version>1.0</tlib-version>  
  5.     <jsp-version>1.2</jsp-version>  
  6.     <short-name>hello taglib test</short-name>  
  7.     <uri>/hellotag</uri>  
  8.        
  9.     <tag>  
  10.          <!--Tag名字 -->  
  11.         <name>hello</name>  
  12.         <!-- 该Tag对应的处理类 -->  
  13.         <tag-class>com.test.tag.HelloTag</tag-class>  
  14.         <!-- 该 Tag的body内容为空  -->  
  15.         <body-content>empty</body-content>  
  16.     </tag>  
  17.        
  18.     <tag>  
  19.          <!--Tag名字 -->  
  20.         <name>message</name>  
  21.         <!-- 该Tag对应的处理类 -->  
  22.         <tag-class>com.test.tag.HelloTagByResource</tag-class>  
  23.         <!-- 该 Tag的body内容为空  -->  
  24.         <body-content>empty</body-content>  
  25.         <!-- 属性定义 -->  
  26.         <attribute>  
  27.             <name>title</name>  
  28.             <required>true</required>  
  29.         </attribute>  
  30.     </tag>  
  31. </taglib>  

E:jsp里引用
Java代码 复制代码
  1. <%@ page language="java"  pageEncoding="UTF-8"%>   
  2. <%@ taglib uri="/hellotag" prefix="aa" %>   
  3.   
  4.   
  5. <html>   
  6.   <body>   
  7.     <aa:message title="hello.title"/><br/>   
  8.     <aa:message title="hello.content"/>   
  9.   </body>   
  10. </html>  
自定义jsp标签jar spring-webmvc-3.0.5.RELEASE.jar jsp-api-2.1.jar 教程:http://blog.youkuaiyun.com/yjqyyjw/article/details/51840751 立即下载

相关推荐

掌握自定义JSP标签

想要在 JavaServer Pages (JSP) 应用程序中添加自定义标签吗?本教程将为您展示如何用这些标签编写类似于 JSP 技术自带操作 —— 如 jsp:useBean、jsp:getProperty 和 jsp:forward —— 的自定义操作。介绍如何用特定于自已的域的表示逻辑的自定义操作来扩展 JSP 语法。

JSP自定义标签

前言:已经有好久没有和大家分享知识,今天我要与大家分享的知识是继反射之后的JSP自定义标签知识。 上面三张图是自己绘制的三张的思维导图。可以通过思维导图来进入我要跟大家分享的知识。 一、JSP的特点: 1、jsp的构成:开始标签、标签主体、结束标签 例如: <z:demo1>demo1</z:demo1>2 2、标签的分类:标签的分类主要是有四种 ...

m0_53151031的博客 2502

自定义(jsp)标签

自定义(jsp)标签,自定义if ,for,if elseif,有属性,标签体的标签

JSP 自定义标签详解

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

让优秀成为一种习惯! 2376

自定义JSP标签

自定义JSP标签,继承了Tag接口和其他的接口

Jsp自定义标签和方法详解

Jsp自定义标签和方法详解 首先是要有一个标签处理类,标签处理类可以直接实现Tag接口,也可以继承Java中已经实现了的TagSupport这个类,TagSupport也是继承自Tag接口的,它内部已经对Tag接口进行了实现,一般是继承TagSupport类,之后是重写父类的doStartTag和doEndTag方法, 对于开始标签来说返回值主要有EVAL_BODY_INCLUDE和SKIP_BODY,前者表示执行标签体,后者表示略过标签体; 对于结束标签的返回值主要有两种EVAL_PAGE和SKIP_PAGE,前者表示继续执行结束标签以后的内容,后者表示忽略结束标签以后的内容;另外,在继承

JSP自定义标签库

TLD: 即标签库的描述符 自定义JSP标签库的步骤如下: 1.创建相对应的Java类 假设有如下类,该类里有一个方法用于得到商品的类别数目。 public class EShop { public EShop() { } public static ArrayList getCats() { ArrayList values = new ArrayList();

Well's Column 1533

ROS2+PYTHON VENV虚拟环境配置方法

ROS2+PYTHON VENV配置方法本篇针对的是python。

下雨夏云的博客 555

JSP 自定义标签库

JSP 自定义标签库1.1 概述在JSP 开发中会遇到一些重复的工作。而使用自定义标签库是一种方法,可以用来将这些功能封装起来并在多个项目中重新用到它。此外,应用逻辑还可以包含在基于服务器的资源中,比如JavaBeans。这种架构显示出使用自定义标签库可以更快更容易地开发基于Web 的应用程序。有关JavaBeans和自定义标签库的最初想法是:在程序员研究那些包含商务逻辑(business log

sumongh我们在一起 1295

看不懂分子动力学模拟的结果?一文读懂RMSD曲线

随后,将每一帧结构与初始模板进行叠合,计算对应原子的平均偏移量,即RMSD。总之,掌握 RMSD 的解读方法,就等于抓住了评估分子动力学模拟成败与质量的“总开关”。①在模拟初始阶段,RMSD会从0迅速上升,这是蛋白质从静态晶体或模型结构释放到溶液环境中并逐渐适应的正常过程。②经过一段时间后,曲线不再系统性上升或下降,而是围绕一个平均值,小幅度地上下波动,形成一个稳定的“平台”。这种情况下,RMSD 在初始快速上升后,并未进入平台,而是持续甚至加速上升,始终未见收敛。🔍 如何解读不同趋势的RMSD曲线。

weixin_46587777的博客 4887

CANoe开发入门到精通读书笔记(2)——CAPL编程

CAPL函数的语法跟C语言很类似,但也包含一些C语言所不具备的功能大部分CAPL支持的数据类型都可以直接声明为函数参数, 例如,整型、浮点型、枚举、结构、定时器以及它们的引用。但有一些类型不能被直接声明,而需要加上*号(注意该符号并不是C语言中 指针的意思)。例 如 : signal * s 、 envvarInt * ev 、 sysvarFloat * sv 、 diagRequest * dr、diagResponse * dr、int matrix[][],以及。

weixin_66275497的博客 6458

自定义标签库开发

自定义标签库开发 自定义标签简介 l  自定义标签主要用于移除Jsp页面中的java代码。 l  快速入门:使用自定义标签输出客户机IP l   移除jsp页面中的java代码,只需要完成两个步骤: •    编写一个实现Tag接口的Java类,并覆盖doStartTag方法,把jsp页面中的java代码写到doStartTag方法中。 •    编写标签库描述符(tld)文件,在tl

张晓丛的专栏 1538

《QGIS快速入门与应用基础》293:色带调整与透明设置

详细讲解了QGIS中遥感影像色带调整与透明设置的核心技术,帮助用户将遥感成果从基础合成提升到专业出图标准。主要内容包括: 色带精细化调整: 多波段真/假彩色合成的优化技巧(Gamma校正、色彩平衡、色阶端点校准) 单波段栅格数据的伪彩色规范设置(行业标准色带选择与分类方法) 透明设置: 研究区黑边/白边的消除方法 多图层叠加时的透明融合技巧 特定地物的差异化半透明显示 实用建议: 提供行业标准参数模板和效果对比图 标注新手操作红线和常见问题排查 强调符合遥感行业规范的可视化要求。

LuckyHanMo的博客 354

自定义标签库的使用

taglib被称为自定义标签库用自定义标签库,可以在简单的标签中封装复杂的功能,实现自定义标签按如下步骤进行: 1、开发自定义标签类为了能让美工人员更好地参与JSP 页面的开发,所以使用标签类,可以使用简单的标签来封装复杂的功能,从而使团队更好地协作开发。自定义标签类都必须继承一个父类: java.Servlet.jsp.tagext.TagSupport,并且还有以下要...

deck9988的博客 140

SM2 是一种国密算法,用于生成密钥对和加解密。下面是 SM2 生成密钥对和加解密的示例代码,使用 Python 语言编写。

在这个函数中,我们使用公钥对数据进行加密,并返回加密后的结果。其中,我们使用了 OAEP 填充方案和 SHA256 哈希算法。SM2 是一种国密算法,用于生成密钥对和加解密。下面是 SM2 生成密钥对和加解密的示例代码,使用 Python 语言编写。首先,我们需要安装 cryptography 库,它包含了 SM2 算法的实现。使用上述代码,我们可以轻松地实现 SM2 密钥对生成和加解密功能。在这个函数中,我们使用私钥对密文进行解密,并返回解密后的明文。接下来,我们定义一个函数。在这个函数中,我们使用。

2301_78484069的博客 1951

MIKE水动力笔记8_冷启动与热启动

在【MIKE水动力笔记5_建立水动力模型】中,讲到【Step 2 设置模型参数】中的【Initial Conditions】时,提到了冷启动与热启动。本博文就详细讲解何为冷启动、热启动,并通过一个案例具体分析两者不同。...

晏长街的博客 6568

php 标签库,自定义标签库(在公共的html)

[php]代码库一:在配置中载入标签库'APP_AUTOLOAD_PATH' => '@.TagLib','TAGLIB_BUILD_IN' => 'Cx,Hd', //Cx是tp里的核心标签 Hd是自己写的自定义标签名二:写一个自定义标签类import('TagLib');/**自定义标签库*/Class TagLibHd extends TagLib{Protected $tag...

weixin_28882149的博客 296

一次点击跑通:用 Postman 自动获取并携带 CSRF token,测试 SAP OData 写操作

SAP OData 写操作自动化测试方案 针对 SAP Gateway OData 服务写操作中常见的 CSRF token 验证问题,本文提出了一套基于 Postman 的自动化解决方案: 问题分析:解释了 CSRF token 的验证机制及其必要性,说明手工测试效率低下的原因 解决方案: 使用 Postman 环境变量存储 token 通过脚本自动获取并传递 token 利用 Collection Runner 实现一键执行 实施步骤: 创建环境变量存储 token 第一个请求获取 token 并存入变

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 303

JSP中如何使用自定义的标签库

主要分为三步:1.创建标签的处理类     2.创建标签ku

折戟沉沙 860

关闭搜狗输入法右下角广告的解决方案

本文主要介绍了关闭搜狗输入法右下角广告的解决方案,希望能对使用搜狗输入法的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

自定义标签库jsp

建立TLD文件 我们写Servlet的时候,会在web.xml中加入定义的Servlet类和URL之间的映射。同理,我们定义了标签类,也需要一个配置文件,将自定义标签和对应的标签类关联起来。在定义自定义标签时,这个配置文件叫做标签库定义文件,是以tld后缀结尾的,每个TLD文件对应一个标签库,一个标签库中可包含多个标签。 标签库定义文件的根元素是taglib,它可以包含多个tag子元素

u012138931的专栏 645

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

JSP自定义标签库和函数

一、基础知识 1. 常见的自定义标签库有哪些? jstl中的c、fn、fmt等 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %

qq_42370505的博客 487

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: org.apache.commons.lang.StringUtils 的应用
下一篇: StringUtils工具类的使用
hjpengjava
博客等级 码龄18年 5粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值