在实际的开发中,如为了简化JSP中出现大量的JSP脚本,那么我们需要使用标准标签库和EL表达式,但是和新标签库中提供的标签是有限的,不可能完全满足开发的需要。如:分页。因此需要学习如何自定义自己的标签库。
如果要实现自定义标签,那么需要如下几步:
编写标签处理类
需要继承或者实现相关的类或者接口
编写标签描述文件
该文件是一个XML文件,而且必须放在网站的WEB-INF目录中
在JSP中引入标签且使用
使用taglib指令引入标签库,随后使用。
自定标签的类体系
详细了解下一下几个类和接口:
---| JspTag接口
该接口是一个典型的标记接口。主要标记实现该接口的类可以处理标签。Seralizable
----| Tag接口
该接口主要描述的是标签处理类的共性,但是实现该接口的类不能处理标签体,该接口中定义了标签处理类和JSP页面之间的通信协议。而且提供生命周期方法如:在标签开始和接结束的时候自动执行的方法。
------| TagSupport类
主要负责处理标签的属性。
-------| BodyTagSupport类
该类主要的是处理标签的标签体。
体验
1. 处理类
public class HelloHanler implements Tag { private PageContext pageContext = null; // 标签结束的时候执行 public int doEndTag() throws JspException { return 0; } // 标签开始的时候执行 public int doStartTag() throws JspException { // 给页面输出一个hello信息 JspWriter out = pageContext.getOut(); // 输出信息 String info = "hello custom tag"; try { out.write(info); } catch (IOException e) { e.printStackTrace(); } return 0; } // 获取其父标签 public Tag getParent() { return null; } // 释放 public void release() { } // 设置jsp上下文对象 public void setPageContext(PageContext pc) { this.pageContext = pc; } // 设置父标签 public void setParent(Tag t) { } }
2. 描述文件
<"1.0" encoding="UTF-8""http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1"> <!-- 2. 编写标签库描述文件 --> <tlib-version>1.0</tlib-version> <short-name>jnb</short-name> <tag> <name>hello</name> <tag-class>cn.itcast.test.HelloHanler</tag-class> <body-content>empty</body-content> </tag> </taglib>
3. 引入
<%@taglib uri="/WEB-INF/test.tld" prefix="jnb"%> <br/> <jnb:hello/>
JSP1.2进行自定义标签开发
自定义一个现实日期的标签。
1. 实现可以处理标签属性的标签处理类
public class ShowDate extends TagSupport { // 为了便于获取属性,那么直接在处理类中定义和属性同名的属性变量即可且提供get和set方法 private String pattern; public String getPattern() { return pattern; } public void setPattern(String pattern) { this.pattern = pattern; } // 标签开始的时候自动执行 public int doStartTag() throws JspException { // 创建日期对象 Date date = new Date(); // 创建格式化对象 SimpleDateFormat format = new SimpleDateFormat(getPattern()); // 格式化 String str = format.format(date); // 获取JSP上下文对象 PageContext pageContext = this.pageContext; // 获取JSP的OUT输出流 JspWriter out = pageContext.getOut(); // 输出 try { out.write(str); } catch (IOException e) { e.printStackTrace(); } return super.doStartTag(); } }
2. 描述文件
<taglib "http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1"> <!-- 2. 编写标签库描述文件 --> <tlib-version>1.0</tlib-version> "htmlcode"><%@taglib uri="/WEB-INF/date.tld" prefix="date"%> <date:showdate pattern="yyyy年MM月dd日 a E"/>实现带标签体的自定义标签
1. 标签处理类
public class ShowDateByBody extends BodyTagSupport { // 为了便于获取属性,那么直接在处理类中定义和属性同名的属性变量即可且提供get和set方法 private String pattern; public String getPattern() { return pattern; } public void setPattern(String pattern) { this.pattern = pattern; } // 标签开始的时候自动执行 public int doStartTag() throws JspException { // 创建日期对象 Date date = new Date(); // 创建格式化对象 SimpleDateFormat format = new SimpleDateFormat(getPattern()); // 格式化 String str = format.format(date); // 获取JSP上下文对象 PageContext pageContext = this.pageContext; // 获取JSP的OUT输出流 JspWriter out = pageContext.getOut(); // 获取标签提的内容 BodyContent body = this.getBodyContent(); String tag_body = body.getString(); str = "<font color='red'>"+tag_body+"</font>"+str; // 输出 try { out.write(str); } catch (IOException e) { e.printStackTrace(); } return super.doStartTag(); } }2. 描述文件
<tag> <name>showdate2</name> <tag-class>cn.itcast.custom.ShowDateByBody</tag-class> <body-content>JSP</body-content> <attribute> <name>pattern</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag>3. 引入和使用
<date:showdate2 pattern="yyyy-MM-dd">系统时间:</date:showdate2>
以上就是本文的全部内容,希望对大家的学习有所帮助。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 中国武警男声合唱团《辉煌之声1天路》[DTS-WAV分轨]
- 紫薇《旧曲新韵》[320K/MP3][175.29MB]
- 紫薇《旧曲新韵》[FLAC/分轨][550.18MB]
- 周深《反深代词》[先听版][320K/MP3][72.71MB]
- 李佳薇.2024-会发光的【黑籁音乐】【FLAC分轨】
- 后弦.2012-很有爱【天浩盛世】【WAV+CUE】
- 林俊吉.2012-将你惜命命【美华】【WAV+CUE】
- 晓雅《分享》DTS-WAV
- 黑鸭子2008-飞歌[首版][WAV+CUE]
- 黄乙玲1989-水泼落地难收回[日本天龙版][WAV+CUE]
- 周深《反深代词》[先听版][FLAC/分轨][310.97MB]
- 姜育恒1984《什么时候·串起又散落》台湾复刻版[WAV+CUE][1G]
- 那英《如今》引进版[WAV+CUE][1G]
- 蔡幸娟.1991-真的让我爱你吗【飞碟】【WAV+CUE】
- 群星.2024-好团圆电视剧原声带【TME】【FLAC分轨】