自定义标签

自定义标签的开发与应用步骤

  • 编写完成标签功能的 Java 类(标签处理器)
  • 编写标签库描述(tld)文件,在tld文件中对自定义中进行描述
  • 在 JSP 页面中导入和使用自定义标签

①. 创建一个标签处理器类: 实现javax.servlet.jsp.tagext.SimpleTag接口.

  1. package yang.mybatis.tag;
  2. import javax.servlet.jsp.JspContext;
  3. import javax.servlet.jsp.JspException;
  4. import javax.servlet.jsp.tagext.JspFragment;
  5. import javax.servlet.jsp.tagext.JspTag;
  6. import java.io.IOException;
  7.  
  8. /**
  9. * Created by yangshijing on 2017/11/24 0024.
  10. */
  11. public class HelloSimpleTag implements javax.servlet.jsp.tagext.SimpleTag{
  12. @Override
  13. public void doTag() throws JspException, IOException {
  14. System.out.println("doTag");
  15. }
  16.  
  17. @Override
  18. public void setParent(JspTag jspTag) {
  19. System.out.println("setParent");
  20.  
  21. }
  22.  
  23. @Override
  24. public JspTag getParent() {
  25. System.out.println("getParent");
  26. return null;
  27. }
  28.  
  29. @Override
  30. public void setJspContext(JspContext jspContext) {
  31. System.out.println("setJspContext");
  32.  
  33. }
  34.  
  35. @Override
  36. public void setJspBody(JspFragment jspFragment) {
  37. System.out.println("setJspBody");
  38.  
  39. }
  40. } 

②. 在 WEB-INF 文件夹下新建一个 .tld(标签库描述文件) 为扩展名的 xml 文件.

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <taglib xmlns="http://java.sun.com/xml/ns/javaee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
  6. version="2.1">
  7. <!--描述TLD 文件-->
  8. <description>MyTag 1.0 core library</description>
  9. <display-name>MyTag core</display-name>
  10. <tlib-version>1.0</tlib-version>
  11. <!--建议在Jsp页面上使用的标签的前缀-->
  12. <short-name>myshortname</short-name>
  13. <!-- 作为 tld 文件的 id, 用来唯一标识当前的 TLD 文件, 多个 tld 文件的 URI 不能重复. 通过 JSP 页面的 taglib 标签的 uri 属性来引用. -->
  14. <uri>http://mycompany.com</uri>
  15.  
  16. <!-- Invoke 'Generate' action to add tags or functions -->
  17. <!--描述自定义的HelloSimpleTag 标签-->
  18. <tag>
  19. <!--标签名,在 JSP 页面上使用标签时的名字-->
  20. <name>hello</name>
  21. <!--标签所在的全类名-->
  22. <tag-class>yang.mybatis.tag.HelloSimpleTag</tag-class>
  23. <!--标签体的类型-->
  24. <body-content>empty</body-content>
  25. </tag>
  26. </taglib>

③. 在 tld 文件中描述自定义的标签:

  1. <!-- Invoke 'Generate' action to add tags or functions -->
  2. <!--描述自定义的HelloSimpleTag 标签-->
  3. <tag>
  4. <!--标签名,在 JSP 页面上使用标签时的名字-->
  5. <name>hello</name>
  6. <!--标签所在的全类名-->
  7. <tag-class>yang.mybatis.tag.HelloSimpleTag</tag-class>
  8. <!--标签体的类型-->
  9. <body-content>empty</body-content>
  10. </tag>

④. 在 JSP 页面上使用自定义标签:

  • 使用 taglib 指令导入标签库描述文件:
  1. <%@taglib uri="http://mycompany.com" prefix="nchu" %>
  • 使用自定义的标签:
  1. <nchu:hello/>
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <%--导入标签库描述文件--%>
  3. <%@taglib uri="http://mycompany.com" prefix="nchu" %>
  4. <%@ taglib prefix="nchu" uri="http://mycompany.com" %>
  5. <html>
  6. <head>
  7. <title>Title</title>
  8. </head>
  9. <body>
  10. <nchu:hello/>
  11. </body>
  12. </html>

⑤.从结果可以看出,使用自定义标签时,首先调用自定义SimpleTag实现类的SetJspContext()方法,然后调用doTag()方法

  1. @Override
  2. public void setJspContext(JspContext jspContext) {
        System.out.println("setJspContext");
      }

JspContext 是PageContext的父类,通过该方法传入的参数既是PageContext对象;可以通过PageContext对象获取jsp的隐含对象,进而在doTag()方法中对自定义标签实现功能。

在浏览器上输出Hello World

  1. package yang.mybatis.tag;
  2. import javax.servlet.jsp.JspContext;
  3. import javax.servlet.jsp.JspException;
  4. import javax.servlet.jsp.PageContext;
  5. import javax.servlet.jsp.tagext.JspFragment;
  6. import javax.servlet.jsp.tagext.JspTag;
  7. import java.io.IOException;
  8.  
  9. /**
  10. * Created by yangshijing on 2017/11/24 0024.
  11. */
  12. public class HelloSimpleTag implements javax.servlet.jsp.tagext.SimpleTag{
  13. private PageContext pageContext;
  14. @Override
  15. public void doTag() throws JspException, IOException {
  16. pageContext.getOut().print("Hello world!");
  17. System.out.println("doTag");
  18. }
  19.  
  20. @Override
  21. public void setParent(JspTag jspTag) {
  22. System.out.println("setParent");
  23.  
  24. }
  25.  
  26. @Override
  27. public JspTag getParent() {
  28. System.out.println("getParent");
  29. return null;
  30. }
  31.  
  32. @Override
  33. public void setJspContext(JspContext jspContext) {
  34. pageContext = (PageContext) jspContext;
  35. boolean b = jspContext instanceof PageContext;
  36. System.out.println("setJspContext "+b);
  37.  
  38. }
  39.  
  40. @Override
  41. public void setJspBody(JspFragment jspFragment) {
  42. System.out.println("setJspBody");
  43.  
  44. }
  45. }

SimpleTag——认识自定义标签的更多相关文章

  1. Servlet------>jsp自定义标签SimpleTag(jsp2.0以后的方法,1-5已经淘汰了)

    自定义标签能做什么: 1.移除java代码 2.控制jsp页面某一部分是否执行 3.控制整个jsp是否执行 3.jsp内容重复输出 4.修改jsp内容输出 位置: TagDemo1.java pack ...

  2. [JSP]自定义标签库taglib

    自定义标签的步骤 自定义标签的步骤大概有三步: 1.继承javax.servlet.jsp.tagext.*下提供的几个标签类,如Tag.TagSupport.BodyTagSupport.Simpl ...

  3. [Java] JSP笔记 - 自定义标签

    自定义标签的创建步骤: 自定义标签的四大功能: 自定义标签的类结构: 在 1.0 中呢, 可以将 <body-content> 的值设置为 JSP, 2.0中则不允许在自定义标签体中出现j ...

  4. 12 自定义标签/JSTL标签库/web国际化/java web之设计模式和案例

    EL应用      自定义一个标签,实现两个字符串的相加 1回顾      1.1servlet生命周期           init(ServletConfig)           service ...

  5. EL函数以及自定义标签的应用

    一.EL函数(调用普通类的静态方法) 编写步骤(自定义EL函数的编写步骤即自定义标签的编写步骤): ①编写一个普通的java类,提供一个静态方法,功能自定,例如下: package cn.wzbril ...

  6. JSTL 自定义标签

    编写描述标签的tld文件,把这个文件放到web-inf/目录下,才能在jsp页面上调用自定义的标签 package test.yz; import java.io.IOException; impor ...

  7. JSP自定义标签/自定义标签打包

    有这样一个业务需求: 当我们在编辑某个用户时,需要设置该用户的角色,在转到编辑页面时,就需要自动勾选上该用户已经选择的角色,如下图: 当我们点击编辑时,会查询用户详细信息,以及角色集合传到编辑页面. ...

  8. javaweb回顾第八篇如何创建自定义标签

    前言:在javaweb开发中自定义标签的用处还是挺多的.今天和大家一起看自定义标签是如何实现的. 1:什么是标签 标签是一种XML元素,通过标签可以使JSP页面变得简介易用,而且标签具有很好的复用性. ...

  9. 自定义标签 与 JSTL(JSP Standard Tag Library)

    1.自定义标签 [理解]     [1]简介            > 在JSP2.0以后,在jsp页面中不建议使用脚本片段<% %>和JSP表达式<%= %>     ...

随机推荐

  1. eclipse share project到svn时显示不被信任的证书,暂时接受也不行

    svn: 方法 OPTIONS 失败于 “https://eping.net/svn/testproject”: SSL handshake failed: SSL 错误:在证书中检测到违规的密钥用法 ...

  2. 理解javascript中的with关键字

    说起js中的with关键字,很多小伙伴们的第一印象可能就是with关键字的作用在于改变作用域,然后最关键的一点是不推荐使用with关键字.听到不推荐with关键字后,我们很多人都会忽略掉with关键字 ...

  3. php与JAVA的RSA加密互通

    Java 版本RSA 进行加密解密 在网上查询了好几天,最终找到解决方案,网络上都是通过Cipher.getInstance("RSA"); 而改成Cipher.getInstan ...

  4. aspupload ,在winows server 2008 下无法使用

    aspupload ,在winows server 2008 下无法使用.求助解决办法 2014-01-12 13:31 goolean | 浏览 775 次 操作系统 aspupload64位,安装 ...

  5. List<Map> 排序

    import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.u ...

  6. file_put_contents(): supplied resource is not a valid stream resource

    在项目开发的过程中 自己想把输出和一些想要内容输出到日志文件中,便于查看 但是在输入的过程中报了这样一个错误: file_put_contents(): supplied resource is no ...

  7. tp5下通过composer实现日志记录功能

    tp5实现日志记录 1.安装 psr/log composer require psr/log 它的作用就是提供一套接口,实现正常的日志功能! 我们可以来细细的分析一下,LoggerInterface ...

  8. 虚拟机如何设置外网ip

    实例: 在数据中心机房的一台服务器上安装虚拟机,并在该虚拟机上安装一个操作系统.给该虚拟机配置公网IP,让外网能直接访问到该虚拟上的应用. 这个问题最初觉得简单,不就是桥接嘛,要只让其上网NAT就可以 ...

  9. C# winform开发

    一处消息死锁分析 最近维护一个工控机上运行的winform程序,我的前任在一个弹出窗口(窗口B)里面调用了ShowDialog方法弹出对话框(窗口C),导致了一个问题是有时关闭窗口C时windows假 ...

  10. minerd.exe 处理

    :top TASKKILL /F /IM "minerd.exe" Goto top and then searching the file system for minerd.e ...