【JSP】自定义标签开放入门

JSP 自定义标签

  自定义标签是用户定义的JSP语言元素。当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操作,即当servlet执行时Web container调用那些操作。

  JSP标签扩展可以让你创建新的标签并且可以直接插入到一个JSP页面。 JSP 2.0规范中引入Simple Tag Handlers来编写这些自定义标记。

你可以继承SimpleTagSupport类并重写的doTag()方法来开发一个最简单的自定义标签

开发步骤

  接下来,将开发一个自定义标签,功能是将long类型的时间,转化成时间的字符串。

  1. 要创建自定义的JSP标签,你首先必须创建处理标签的Java类。所以,让我们创建一个LongDateTag类,如下所示:

      1 package com.tag;
      2
      3 import java.io.IOException;
      4 import java.text.SimpleDateFormat;
      5 import java.util.Calendar;
      6
      7 import javax.servlet.jsp.JspException;
      8 import javax.servlet.jsp.PageContext;
      9 import javax.servlet.jsp.tagext.TagSupport;
     10
     11
     12 /**
     13  *
     14  * 自定义JSTL标签类
     15  *  处理:1.long类型时间转换字符串
     16  *
     17  * @author H__D
     18  *
     19  */
     20 public class LongDateTag extends TagSupport{
     21
     22
     23
     24     private PageContext pageContext;
     25
     26     private String value;
     27     private String partten;
     28
     29     //设置PageContext对象
     30     public void setPageContext(PageContext pageContext) {
     31
     32         //System.out.println("设置PageContext对象!");
     33         this.pageContext = pageContext;
     34     }
     35
     36
     37     public void setValue(String value)
     38     {
     39         this.value = value;
     40     }
     41     public void setPartten(String partten)
     42     {
     43         this.partten = partten;
     44     }
     45
     46
     47
     48
     49     /**
     50      * 标签开始处理..调用的方法
     51      *
     52      */
     53     @Override
     54     public int doStartTag() throws JspException {
     55         String vv = String.valueOf(value);
     56         System.out.println(vv);
     57         Long time = Long.valueOf(vv);
     58         Calendar calendar = Calendar.getInstance();
     59         calendar.setTimeInMillis(time);
     60         if(partten == null || partten.trim().length() == 0)
     61             partten = "yyyy-MM-dd HH:mm:ss.SSS";
     62         SimpleDateFormat simpleDateFormat = new SimpleDateFormat(partten);
     63         String str = simpleDateFormat.format(calendar.getTime());
     64
     65         try {
     66             pageContext.getOut().write(str);
     67         } catch (IOException e) {
     68             // TODO Auto-generated catch block
     69             e.printStackTrace();
     70         }
     71
     72         return super.doStartTag();
     73
     74     }
     75
     76     /**
     77      *
     78      * 标签处理结束的调用的方法
     79      */
     80     @Override
     81     public int doEndTag() throws JspException {
     82         // TODO Auto-generated method stub
     83         return super.doEndTag();
     84     }
     85
     86
     87     /**
     88      *
     89      * 释放资源
     90      */
     91     @Override
     92     public void release() {
     93         // TODO Auto-generated method stub
     94         super.release();
     95     }
     96
     97
     98
     99
    100
    101
    102
    103
    104     /**
    105      *
    106      * 测试主方法
    107      * @param args
    108      */
    109     public static void main(String[] args) {
    110         long a = 123456789123l;
    111         long time = Long.valueOf(a);
    112         Calendar calendar = Calendar.getInstance();
    113         calendar.setTimeInMillis(time);
    114         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
    115         System.out.println(simpleDateFormat.format(calendar.getTime()));
    116     }
    117
    118
    119
    120
    121
    122
    123 }

    LongDateTag

  2. 编写自定义标签的描述文件datetag.tld,将它放在WEB-INF下面,如下所示:

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
     3
     4 <!-- 标签描述TLD文件 -->
     5
     6 <taglib>
     7     <tlib-version>1.1</tlib-version>
     8     <jsp-version>1.2</jsp-version>
     9
    10     <!-- 默认前缀名 -->
    11     <short-name>diy</short-name>
    12
    13     <uri>http://www.mytaglib.com/taglib</uri>
    14     <display-name>MyDateTaglib</display-name>
    15     <description>My date taglib!</description>
    16
    17     <tag>
    18         <name>date</name>
    19         <tag-class>com.tag.LongDateTag</tag-class>
    20
    21         <attribute>
    22             <name>value</name>
    23             <!-- 属性是否必须 -->
    24             <required>true</required>
    25             <!-- 属性是否支持小脚本 EL表达式 -->
    26             <rtexprvalue>true</rtexprvalue>
    27         </attribute>
    28
    29         <attribute>
    30             <name>partten</name>
    31             <!-- 属性是否必须 -->
    32             <required>false</required>
    33             <!-- 属性是否支持小脚本 EL表达式 -->
    34             <rtexprvalue>true</rtexprvalue>
    35         </attribute>
    36
    37     </tag>
    38
    39 </taglib>

    datetag

  3. 在web项目中的web.xml文件中声明自定义标签,如下所示:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     3     xmlns="http://xmlns.jcp.org/xml/ns/javaee"
     4     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
     5     id="WebApp_ID" version="3.1">
     6     <display-name>test</display-name>
     7
     8     <!-- 自定义JSTL时间格式化标签 -->
     9     <jsp-config>
    10         <taglib>
    11             <taglib-uri>http://www.mytaglib.com/taglib</taglib-uri>
    12             <taglib-location>/WEB-INF/datetag.tld</taglib-location>
    13         </taglib>
    14     </jsp-config>
    15
    16     <welcome-file-list>
    17         <welcome-file>index.html</welcome-file>
    18         <welcome-file>index.htm</welcome-file>
    19         <welcome-file>index.jsp</welcome-file>
    20         <welcome-file>default.html</welcome-file>
    21         <welcome-file>default.htm</welcome-file>
    22         <welcome-file>default.jsp</welcome-file>
    23     </welcome-file-list>
    24 </web-app>

    web.xml

  4. 在jsp页面中使用自定义标签,如下所示:                                                                                                    
  5.  1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
     4
     5 <%@ taglib prefix="diy" uri="http://www.mytaglib.com/taglib" %>
     6
     7
     8 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     9 <html>
    10 <head>
    11 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    12 <title>Insert title here</title>
    13 </head>
    14 <body>
    15     <diy:date value="123"></diy:date>
    16 </body>
    17 </html>

    index.jsp

  6. 启动服务,打开index界面,效果图,如下所示

    

自定义标签的执行流程

  JSP引擎将遇到自定义标签时,首先创建标签处理器类的实例对象,然后按照JSP规范定义的通信规则依次调用它的方法。

  1. public void setPageContext(PageContext pc), JSP引擎实例化标签处理器后,将调用setPageContext方法将JSP页面的pageContext对象传递给标签处理器,标签处理器以后可以通过这个pageContext对象与JSP页面进行通信。
  2. public void setParent(Tag t),setPageContext方法执行完后,WEB容器接着调用的setParent方法将当前标签的父标签传递给当前标签处理器,如果当前标签没有父标签,则传递给setParent方法的参数值为null。
  3. public int doStartTag(),调用了setPageContext方法和setParent方法之后,WEB容器执行到自定义标签的开始标记时,就会调用标签处理器的doStartTag方法。
  4. public int doEndTag(),WEB容器执行完自定义标签的标签体后,就会接着去执行自定义标签的结束标记,此时,WEB容器会去调用标签处理器的doEndTag方法。
  5. public void release(),通常WEB容器执行完自定义标签后,标签处理器会驻留在内存中,为其它请求服务器,直至停止web应用时,web容器才会调用release方法。
时间: 2024-10-13 00:33:53

【JSP】自定义标签开放入门的相关文章

JSP自定义标签开发入门《转》

JSP自定义标签开发入门 一般情况下开发jsp自定义标签需要引用以下两个包 import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; 首先我们需要大致了解开发自定义标签所涉及到的接口与类的层次结构(其中SimpleTag接口与SimpleTagSupport类是JSP2.0中新引入的). 目标1:自定义一个用表格显示用户信息的简单标签 效果图: 在jsp页面使用此自定义标签: 假设我们有一个UserInfo的javabean,那

JSP自定义标签开发入门

一般情况下开发jsp自定义标签需要引用以下两个包 import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; 首先我们需要大致了解开发自定义标签所涉及到的接口与类的层次结构(其中SimpleTag接口与SimpleTagSupport类是JSP2.0中新引入的). 目标1:自定义一个用表格显示用户信息的简单标签 效果图: 在jsp页面使用此自定义标签: 假设我们有一个UserInfo的javabean,那么在JSP页面使用此标签只

javaweb学习总结(二十三)——jsp自定义标签开发入门

一.自定义标签的作用 自定义标签主要用于移除Jsp页面中的java代码. 二.自定义标签开发和使用 2.1.自定义标签开发步骤 1.编写一个实现Tag接口的Java类(标签处理器类) 1 package me.gacl.web.tag; 2 3 import java.io.IOException; 4 5 import javax.servlet.http.HttpServletRequest; 6 import javax.servlet.jsp.JspException; 7 import

javaweb学习总结(二十三)——jsp自定义标签开发入门【转】

原文地址:http://www.cnblogs.com/xdp-gacl/p/3916734.html 一.自定义标签的作用 自定义标签主要用于移除Jsp页面中的java代码. 二.自定义标签开发和使用 2.1.自定义标签开发步骤 1.编写一个实现Tag接口的Java类(标签处理器类) 1 package me.gacl.web.tag; 2 3 import java.io.IOException; 4 5 import javax.servlet.http.HttpServletReques

javaweb(二十三)——jsp自定义标签开发入门

一.自定义标签的作用 自定义标签主要用于移除Jsp页面中的java代码. 二.自定义标签开发和使用 2.1.自定义标签开发步骤 1.编写一个实现Tag接口的Java类(标签处理器类) 1 package me.gacl.web.tag; 2 3 import java.io.IOException; 4 5 import javax.servlet.http.HttpServletRequest; 6 import javax.servlet.jsp.JspException; 7 import

JSP自定义标签入门实例详解

JSP自定义标签主要能用到的两个包 javax.servlet.jsp.*;javax.servlet.jsp.tagext.*; 自定义标签<userInfo:showUserInfo/>实现对用户的展现. 效果图如下 定义用户累User.java  get set就不在赘述. private String userName; private Integer age; private String email; public User(){ this.userName="张三&qu

JSP自定义标签渲染时报Illegal to flush错误

javax.servlet.ServletException:Illegal to flush within a custom tag 此错误是因为在JSP页面中的某一个自定义标签的doStartTag或doEndTag中用了out.flush,而其他的自定义标签没有导致.可以去掉out.flush. JSP自定义标签渲染时报Illegal to flush错误,布布扣,bubuko.com

JSP 自定义标签 生命周期

1. 2. JSP 自定义标签 生命周期,布布扣,bubuko.com

整理一份jsp自定义标签以及权限控制标签

jsp自定义标签使用场景因地制宜,可以实现自定义的标签输出功能也可以实现权限的管理 1:先定义标签类 1-1:页面输出标签 package com.suyin.web.jspsectag; import java.io.IOException; import javax.servlet.jsp.JspTagException; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.Tag; public cla