菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
55
0

JSP如何自定义标签

原创
05/13 14:22
阅读数 605

JSP如何自定义标签

自定义标签步骤:先定义标签处理类(如继承SimpleTagSupport类),再编写TLD文件(标签库描述库文件)。

定义标签类可以编写一个实现SimpleTag接口的类,

public class MyTag1 implements SimpleTag {
   private PageContext context;
   private JspFragment body;
   @Override
   public void doTag() throws JspException, IOException {
      context.getOut().print("这是一个自定义标签");
   }
   @Override
   public JspTag getParent() {
      return null;
   }
   //下面三个方法都在doTag方法之前被tomcat之前调用,所以在doTag方法中就可以使用传递过来的对象
   //设置标签体
   @Override
   public void setJspBody(JspFragment body) {
    this.body =body;
   }
    //设置jsp上下文对象,它子类是PageContext
   @Override
   public void setJspContext(JspContext context) {
      this.context = (PageContext) context;
   }
   //设置父标签
   @Override
   public void setParent(JspTag arg0) {
   }
}

上面代码中的doTag()的方法是每次执行标签都会调用的方法,在这个方法之前有setJspBody()setJspContext()以及setParent()方法都会比doTag先给Tomcat(服务器)调用,所以把传递过来的对象赋值给成员变量后,就可以在doTag方法里面就可以使用传过来的对象了(这里没有用到父标签所以setParent方法体没写代码),其中在doTag方法里面使用PageContext对象获取输出流输出了一句字符串。

编写好标签处理类后,还需要在配置tld文件。

一般tld文件都放在WEB-INF下,这样可以保证客户端访问不到

tld文件代码(其实是一个xml)

<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="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">
 
  <tlib-version>1.0</tlib-version><!-- 自定义标签库的版本号 -->
  <short-name>tag</short-name><!-- 自定义标签库的简称 -->
  <uri>http://www.tianye.cn/tag1.0</uri><!-- 自定义标签库的uri -->>
  <tag>
  <name>MyTag1</name><!—指定当前标签名称 -->
  <tag-class>cn.tianye.tag.MyTag1</tag-class><!—指定当前对应标签出处理类 -->
  <body-content>empty</body-content><!-- 标签体内容格式 -->
  </tag>
  </taglib>

上面需要这注意的是<body-content>元素的可选值有

empty:也就是没有标签体(如果在这里设置的是empty,那么在jsp页面上就不能有标签体。)

JSP:传统标签支持它,SimpleTag已经不支持使用<body-content>JSP</body-content>

(标签内容是可以有任何东西,比如EL,JSTL,HTML以及<%%>等)

scriptless:标签体内容不能是java脚本,可以是EL,JSTL,字符串等,在SimpleTag中需要标签体可以使用这选项。

tagdependent:标签体内容不作运算,全由标签处理类自行处理,无论标签体内容是EL,JSTL等,都不会作运算。(这个基本没有人会使用,因为用起来太麻烦,什么都要自己处理)

配置好tld文件后就可以在jsp页面上使用了,在使用自定义标签之前,需要先使用指令导入标签库。

使用taglib导入标签库,uri是tld文件的存放位置

<%@taglib prefix="t" uri="/WEB-INF/tlds/tianye.tag.tld" %>

使用自定义标签

<hr>
   <h1><t:MyTag1/></h1>
<hr>

效果

20190515214342540.png

发表评论

0/200
55 点赞
0 评论
收藏
为你推荐 换一批