标签语言特点

<开始标签 属性=“属性值”>标签体</结束标签>
空标签
<开始标签></结束标签>
<开始标签/>
ui标签
控制标签
数据标签

自定义标签的开发及使用步骤

  1. 创建一个标签助手类(继承BodyTagSupport)
    标签属性必须助手类的属性对应、且要提供对应get/set方法 rtexprvalue

    2.创建标签库描述文件(tld),添加自定义标签的配置
    注:tld文件必须保存到WEB-INF目录或其子目录

    3.在JSP通过taglib指令导入标签库,并通过指定后缀
    访问自定义标签

  • 编写一个普通的java类,此时需要继承TagSupport类
package com.vmaxtam.dotest;
import javax.servlet.jsp.tagext.TagSupport;

public class MyTagTest extends TagSupport {
    
}
  • 重写父类的setPageContext方法,作用于得到当前jsp页面的pageContext对象
public class MyTagTest extends TagSupport {    
    private PageContext pageContext;
    @Override
    public void setPageContext(PageContext pageContext) {
        this.pageContext=pageContext;
    }
  • 重写父类的doStartTag方法,里面写上你定义的标签的java操作,这里我定义的标签用作向浏览器输出一大段文字信息
@Override
    public int doStartTag() throws JspException {
        
    try {
      pageContext.getResponse().getWriter().write("小王说:晓哥,我大哥");
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
        return super.doStartTag();
}
  • 在你的web应用目录下,找到WEB-INF文件夹,在里面新建一个tld类型的文件(注:一定要是tld文件)然后再里面注册你的标签吧:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib
  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
  "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
  <tlib-version>1.0</tlib-version><!-- 代表标签库的版本号 -->
  <jsp-version>1.2</jsp-version><!-- 代表jsp的版本 -->
  <short-name>mtt</short-name><!-- 你的标签库的简称 -->
  <uri>http://vmaxtam.com/mytag</uri><!-- 你标签库的引用uri -->
  
  <tag>
      <name>wangyiying</name><!-- 你定义的标签的名称 -->
       <tag-class>com.vmaxtam.dotest.MyTagTest</tag-class><!-- 对应的标签处理程序:包名+类名 -->
      <body-content>JSP</body-content><!-- 标签体内容的格式 -->
  </tag>
 </taglib>
  • 你要在使用你定义的标签的jsp页面导入你的标签库!就像导入类包一样(也称为:调用自己所写的标签)
    只需在jsp页面写上下面内容:
<%@taglib uri="http://vmaxtam.com/mytag" prefix="mmt" %>
  • 接下面我们就可以开始使用标签了
<html>
  <head>   
    <title>My JSP 'testit.jsp' starting page</title>
  </head>
  
  <body>
      <mmt:mytag></mmt:mytag>
  </body>
</html>

标签生命周期

1.doStartTag() 开始标签
2.doAfterBody() 主体部分
3.doEndTag() 结束标签

   
  <description>zking 1.1 core library</description>
  <display-name>zking core</display-name>
  <tlib-version>1.1</tlib-version>
  <short-name>c</short-name>
  <uri>/zking</uri>


  <tag>
  <!-- 标签库里面的标签名 -->
    <name>demo</name>
   <!-- 标签对应的助手类的全路径名 -->
    <tag-class>com.zking.jsp.day01.DemoTag</tag-class>
  <!-- jsp -->
    <body-content>JSP</body-content>
    <attribute>
    <!-- 属名    可以有多个 -->
        <name>test</name>//属性名是需要私有化的在下面会用到
        <!-- 属性值是否必填 -->
        <required>false</required>
        <!-- 是否使用表达式 -->
        <rtexprvalue>false</rtexprvalue>
    </attribute>
  </tag>

 </taglib> 
  • 它的运转方式,流程图如下:

应用自定义jsp标签

  • 它的返回值:
 SKIP_BODY:            跳过主体
  EVAL_BODY_INCLUDE:    计算标签主体内容并[输出]
  EVAL_BODY_BUFFERED:   计算标签主体内容并[缓存]
  EVAL_PAGE:             计算页面的后续部分
  SKIP_PAGE:             跳过页面的后续部分
  EVAL_BODY_AGAIN:       再计算主体一次

相关文章:

  • 2021-11-08
猜你喜欢
  • 2022-02-09
  • 2021-08-10
  • 2022-01-04
  • 2021-07-16
  • 2021-06-14
相关资源
相似解决方案