JAVA自定义标签教程及实例代码

摘要:
测验jsp<!DOCTYPEHTMLPUBLIC“//W3C//DTDHTML4.01过渡//EN”>&书信电报;html>&书信电报;头部>&书信电报;标题>MyJSP测试。jsp启动页</标题></头部>&书信电报;身体>这是JSP页面&书信电报;br>
Test.jsp 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'Test.jsp' starting page</title>
  </head>
 
  <body>
    This is my JSP page. <br>
    Date : <%= new java.util.Date().toString() %> <br>
    File : <input value="<%= request.getServletPath() %>" /> 
  </body>
</html>

为了将这个这个Test.jsp改成自定义标签方法,我们分别使用简单标签和内容标签两种不同的方式实现。

1. 简单标签

由于我们需要输出两个内容(日期和文件名),因此我们为标签创建一个参数。具体代码:

DemoTag.java 

package com.mycompany;

import java.util.Date;

import javax.servlet.http.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

public class DemoTag extends TagSupport {
  
  public int doStartTag() throws JspException {    
    try {
      HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
      JspWriter out = pageContext.getOut();      
      
      if (parameter.compareToIgnoreCase("filename") == 0)
        out.print(request.getServletPath());
      else 
        out.print(new Date());
      
    } catch (java.io.IOException e) {
      throw new JspTagException(e.getMessage());
    }
    
    return SKIP_BODY;
  }
  
  private String parameter = "date";
  
  public void setParameter(String parameter) {
    this.parameter = parameter;
  } 
  
  public String getParameter() {
    return parameter;
  }
}


接下来,我们创建标签文件 MyTagLib.tld。标签文件其实只是一个XML格式的说明文件,内容也很简单。

MyTagLib.tld

<?xml version="1.0" encoding="ISO-8859-1"?>
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>

<tag>
  <name>demo</name>
  <tag-class>com.mycompany.DemoTag</tag-class>
  <body-content>empty</body-content>
  <attribute>
    <name>parameter</name>
    <required>false</required>
    <rtexprvalue>true</rtexprvalue>
  </attribute>
</tag>

</taglib>

在这个标签文件中,我们将我们创建的标签取名 demo,并声明了类型和参数(parameter)。将该文件保存在 /WEB-INF 下面。
当然,我们还需要将我们自定义的标签添加到 web.xml 中,否则还是无法使用。

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemalocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

  <jsp-config>
    <taglib>
      <taglib-uri>/WEB-INF/MyTagLib</taglib-uri>
      <taglib-location>/WEB-INF/MyTagLib.tld</taglib-location>
    </taglib>
  </jsp-config>

</web-app>

你可能在别处看到过类似的声明,只是没有外面的 jsp-config,但是我们使用的是DTD 2.4,如果不加,Eclipse 会提示出错。

到此为止,我们的自定义标签算是创建完毕。接下来,我们可以开始改写那个JSP文件来分离代码了。
Test.jsp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@taglib uri="/WEB-INF/MyTagLib" prefix="mytag"%>
<html>
  <head>
    <title>My JSP 'Test.jsp' starting page</title>
  </head>
 
  <body>
    This is my JSP page. <br>
    Date : <mytag:demo parameter="date" /><br>
    File : <mytag:demo parameter="filename" />
  </body>
</html>

上面这些想必你已经很熟悉,我就不做多说了。

2. 内容标签

创建过程和上面大抵相同,只是程序文件和配置内容有些差异。

DemoTag2.java 

package com.mycompany;

import java.io.IOException;
import java.util.Date;

import javax.servlet.http.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

public class DemoTag2 extends BodyTagSupport {
  
  public int doStartTag() throws JspTagException {    
    return EVAL_BODY_BUFFERED;
  }
  
  public int doEndTag() throws JspTagException {
    String body = this.getBodyContent().getString();
    HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
    
    body = body.replace("$date", new Date().toString());
    body = body.replace("$filename", request.getServletPath());
    
    try {
      pageContext.getOut().print(body);
    }
    catch (IOException e) {
      throw new JspTagException(e.getMessage());
    }
    
    return SKIP_BODY;
  }
}


我们将新的标签 DemoTag2 加入到上面的标签文件中。

MyTaglib.tld

<?xml version="1.0" encoding="ISO-8859-1"?>
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>

<tag>
  <name>demo</name>
  <tag-class>com.mycompany.DemoTag</tag-class>
  <body-content>empty</body-content>
  <attribute>
    <name>parameter</name>
    <required>false</required>
    <rtexprvalue>true</rtexprvalue>
  </attribute>
</tag>

<tag>
  <name>demo2</name>
  <tag-class>com.mycompany.DemoTag2</tag-class>
  <body-content>jsp</body-content>
</tag>

</taglib>

web.xml 文件无需修改。

看看同时使用两种标签的Test.jsp效果。

Test.jsp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@taglib uri="/WEB-INF/MyTagLib" prefix="mytag"%>
<html>
  <head>
    <title>My JSP 'Test.jsp' starting page</title>
  </head>
 
  <body>
    This is my JSP page. <br>
    Date : <mytag:demo parameter="date" /><br>
    File : <mytag:demo parameter="filename" />

    <hr>

    <mytag:demo2>
    Date: $date<br>
    File: $filename
    </mytag:demo2>
  </body>
</html>

至此,两种标签方式都完成

免责声明:文章转载自《JAVA自定义标签教程及实例代码》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇springBoot集成Mybatis generatorWebUploader在IE9中文件选择按钮点击没反应下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

JSP三大指令

JSP页面中的三大指令:page include taglib一、Page指令的介绍:对整个页面的配置信息的指令。全部都是当前页面的配置信息。去掉JSP的Page指令就是一个HTML文件。page指令怎么加:<%@ page ... %>里面的属性:autoFlush是否清除缓存,默认True,不用修改。ContentType页面的类型,utf...

html入门详细笔记

Web的基本概念 什么是Web? 中文翻译“网页”,它是一些列技术的总称,(包括网站的前台布局、后台程序、美工、数据库开发等),我们称它为网页。 Web标准 结构标准(HTML) 网页的结构网页该有什么,(就像一辆车的基本框架结构这辆车该有什么) 表现标准(CSS) 设计网页的版式、颜色、大小外观。主要用CSS实现(就像一辆车的外观和内饰要什么颜色款式,现...

IE和Firefox的兼容问题

IE和Firefox的兼容问题 本文摘自:http://blog.csdn.net/powerglover/archive/2009/01/15/3789631.aspx 1、Event的问题 在ie中我们可以直接使用event变量,但是在firefox下由于event是局部变量,firefox下我们可以事件绑定到元素上 例如 <input type...

译文:前端性能的重要性 The Importance of Frontend Performance

欢迎訪问我的主页。最新的文章我会首先公布在个人主页上: http://blog.guaidm.com/shocky/ 原书下载地址:http://pan.baidu.com/s/1pJocRwB        在我的web开发生涯里,大部分时候我都是作为一个后台project师。这样一来,我投入了非常多的精力去研究、练习怎样通过后台优化来提升项目产品...

gulp实现公共html代码复用

在开发网站的时候,尤其是类似于官网这样的项目,顶部都会有一个导航栏,底部会有一些其他信息,而这两个部分在每一个页面都是有的。我们不可能在每个html页面都写一遍,这样也不便后期维护等操作,所以可以把顶部导航和底部这两块的html代码单独写在两个html文件里:header.html和footer.html,然后在每个html文件只需要在适当的位置引入公共部...

将HTML文件转换为MD文件

html格式转md格式 # 模块html2text pip install html2text/pip3 install html2text 测试: import html2text as ht text_maker = ht.HTML2Text() # 读取html格式文件 with open('./*.html', 'r', encoding='U...