1)最简单的标签库

  1,继承Tag接口,重写doEndTag()方法,返回类型不同后面流程不一样

    想要jsp的内容必须重写了setPageContent()方法

    再JspWriter out = pageContext.getOut();

package myTag;

import java.io.IOException;
import java.util.ResourceBundle; import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.Tag; public class Copyright implements Tag {
private PageContext pageContext;
private Tag parent; @Override
public int doEndTag() throws JspException {
// TODO Auto-generated method stub
JspWriter out = pageContext.getOut();
try {
out.println("<div align=center style='line-height:22px;"
+ "font-size:12px;'>");
out.println(ResourceBundle.getBundle("copyright").getString(
"copyright"));
out.println("</div>");
} catch (IOException e) {
throw new JspException(e);
} return EVAL_PAGE;
} @Override
public int doStartTag() throws JspException {
// TODO Auto-generated method stub
return SKIP_BODY;
} @Override
public Tag getParent() {
// TODO Auto-generated method stub
return this.parent;
} @Override
public void release() {
// TODO Auto-generated method stub } @Override
public void setPageContext(PageContext pc) {
// TODO Auto-generated method stub
this.pageContext = pc;
} @Override
public void setParent(Tag t) {
// TODO Auto-generated method stub
this.parent = t;
}
}

  2,在WEB-INF/目录下创建tld文件(new/other创建

  bodycontent有三个值,empty表示不可以有标签体,jsp表示可以有标签体,tagdependent可以有但不会执行

<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>taglib</short-name>
<tag>
<name>copyright</name>
<tagclass>myTag.Copyright</tagclass>
<bodycontent>JSP</bodycontent>
</tag>
</taglib>

  3,由于我用了资源文件

  ResourceBundle.getBundle("copyright").getString("copyright")

    所以src文件下一定要有这个文件的copyright属性

  4,在jsp中首先声明,<%@ taglib uri="WEB-INF/xxx.tld" prefix="taglib">

    下面就可以<taglib:copyright/>


2)带属性的第标签

TagSupport类实现了Tag接口,根据需要重写你的doStartTag或者doEndTag方法就好了

在类里面定义了这个private属性和setter方法

在tld文件也要去添加修改<attribute>

     <attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>

<required>表示是否必需的

<rtexprvalue>表明是否允许EL表达式或者<%= %>

当有多个参数的时候照样子添加private属性和setter方法


3)带标签体的标签

这时候我们可以使用BodyTagSupport来获得更加丰富的控制,如doInitBody()和doAfterBody()方法

不过他们在进行doStartTag或者doEndTag的方法的时候都会返回常量

SKIP_BODY=0//不跑标签体

EVAL_BODY_INCLUDE=1//跑标签体

SKIP_PAGE=5//强行结束

EVAL_PAGE=6//正常结束

使用this.getBodyContent().getString()获得标签体的内容

最新文章

  1. JAVA 1.9 面向对象之封装
  2. 如何布局包含Image和Title的UIButton
  3. 前端 初识angularJS的基本概念
  4. 【C语言学习笔记】存储类、链接和内存管理
  5. linux 的终端字体色和背景色的修改方法(三)
  6. MVC路由调试工具RouteDebug
  7. TransactionScope
  8. NFinal 揭秘之控制器
  9. Oracle EBS-SQL (BOM-3):检查期间新增Bom数量.sql
  10. 基于ASIO的协程与网络编程
  11. JQuery模拟实现天猫购物车动画效果
  12. Android隐藏软键盘
  13. 关于Devexpress15.2中GridControl控件选择字段ColumnEdit下拉时间设置
  14. linux系统 initrd.img中init启动脚本分析
  15. listview下拉刷新上拉加载扩展(一)
  16. 使用xshell链接虚拟机的方法
  17. 【BZOJ4000】[TJOI2015]棋盘(矩阵快速幂,动态规划)
  18. oracle 中update多个字段
  19. pwnable.kr-bof-witeup
  20. JPA实体关系映射:@ManyToMany多对多关系、@OneToMany@ManyToOne一对多多对一关系和@OneToOne的深度实例解析

热门文章

  1. [HAOI2007]反素数ant
  2. CA认证_demo
  3. [POI2013]BAJ-Bytecomputer
  4. 【bzoj3170】[Tjoi2013]松鼠聚会(数学题)
  5. spring集成spring mvc 和hibernate详解
  6. 初入Spring-boot(二)
  7. C++ dll的隐式与显式调用
  8. HTTP Status 500 - java.lang.NoClassDefFoundError: JspTagException
  9. 用Java编程计算兔子生兔子的问题
  10. oracle数据库插入优化