• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    jsp中自定义标签用法实例分析

    本文实例讲述了jsp中自定义标签用法。分享给大家供大家参考。具体如下:

    这里简单的写了一个自定义标签,自己定义标签的好处就是在jsp页面中可以使用自己定义的功能,完全与Java代码分离

    1. tld文件如下:

    首先是要写×.tld文件,当项目随着服务器启动的时候,会检查项目中有没有*tld文件。
    写的tld文件

    ?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>apsliyuan/short-name>
      !-- 定义uri -->
      uri>http://my.oschina.net/aps/uri>
      !-- 定义自己的类 -->
      tag>
        !-- name 就是在jsp中显示的标签名字,aps:hellowTag/> -->
        name>hellowTag/name>
        !-- 自己写的标签类的完整路径 -->
        tag-class>cn.itcast.apsliyuan.tag.HellowtTag/tag-class>
        !-- jsp中主题中是不是要显示内容,有四个属性, 如果为empty的话。在jsp页面中标签就不能定义自己的内容了,否则会报 Servlet.service() 
          for servlet jsp threw exception org.apache.jasper.JasperException: /index.jsp(12,8) 
          According to TLD, tag aps:hellowTag must be empty, but is not 异常
         -->
        body-content>JSP/body-content>
      /tag>
    !-- 
      这里没有写属性,有时间补上
     -->
      tag>
        name>ApsliyuanTag/name>
        tag-class>cn.itcast.apsliyuan.tag.ApsliyuanTag/tag-class>
        body-content>JSP/body-content>
      /tag>
    /taglib>

    2. 自定义标签类java代码如下:

    //自定义标签的类
    package cn.itcast.apsliyuan.tag;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.JspWriter;
    import javax.servlet.jsp.tagext.TagSupport;
    public class HellowtTag extends TagSupport{
      /**
       * 
       */
      private static final long serialVersionUID = 1781703371130382609L;
      @Override
      public int doStartTag() throws JspException {
        // TODO Auto-generated method stub
        JspWriter out = pageContext.getOut();
        SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
          out.print(format.format(new Date()));
        } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
        return EVAL_BODY_INCLUDE;
      }
      @Override
      public int doEndTag() throws JspException {
        // TODO Auto-generated method stub
        JspWriter out = pageContext.getOut();
        try {
          out.print("br/> hr/>标签执行完毕了");
        } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
        return EVAL_PAGE;
      }
    }
    
    

    3. jsp引入自己定义标签代码如下:

    //jsp中引入自己定义的标签
    %@ page language="java" contentType="text/html; charset=UTF-8"
      pageEncoding="UTF-8"%>
      %@taglib uri="http://my.oschina.net/aps" prefix="aps" %>
      %@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    !DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    html>
    head>
    meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    title>index.jsp/title>
    /head>
    body>
      现在的时间是:aps:hellowTag> /aps:hellowTag>br/>
      hr/>
      我爱的人是: aps:ApsliyuanTag/>
    /body>
    /html>
    
    

    4. TagSupport代码如下:

    //看看TagSupport中的源代码, 这个是适配器模式
    public class TagSupport implements IterationTag, Serializable {
      public static final Tag findAncestorWithClass(Tag from,
          // TCK signature test fails with generics
          @SuppressWarnings("unchecked")
          Class klass) {
      boolean isInterface = false;
      if (from == null ||
        klass == null ||
        (!Tag.class.isAssignableFrom(klass) 
         !(isInterface = klass.isInterface()))) {
        return null;
      }
      for (;;) {
        Tag tag = from.getParent();
        if (tag == null) {
        return null;
        }
        if ((isInterface  klass.isInstance(tag)) ||
          klass.isAssignableFrom(tag.getClass()))
        return tag;
        else
        from = tag;
      }
      }
      /**
       * Default constructor, all subclasses are required to define only
       * a public constructor with the same signature, and to call the
       * superclass constructor.
       *
       * This constructor is called by the code generated by the JSP
       * translator.
       */
      public TagSupport() { }
      /**
       * Default processing of the start tag, returning SKIP_BODY.
       *
       * @return SKIP_BODY
       * @throws JspException if an error occurs while processing this tag
       *
       * @see Tag#doStartTag()
       */
      public int doStartTag() throws JspException {
        return SKIP_BODY;
      }
      /**
       * Default processing of the end tag returning EVAL_PAGE.
       *
       * @return EVAL_PAGE
       * @throws JspException if an error occurs while processing this tag
       *
       * @see Tag#doEndTag()
       */
      public int doEndTag() throws JspException {
      return EVAL_PAGE;
      }
      /**
       * Default processing for a body.
       *
       * @return SKIP_BODY
       * @throws JspException if an error occurs while processing this tag
       *
       * @see IterationTag#doAfterBody()
       */
      public int doAfterBody() throws JspException {
      return SKIP_BODY;
      }
      // Actions related to body evaluation
      /**
       * Release state.
       *
       * @see Tag#release()
       */
      public void release() {
      parent = null;
      id = null;
      if( values != null ) {
        values.clear();
      }
      values = null;
      }
      /**
       * Set the nesting tag of this tag.
       *
       * @param t The parent Tag.
       * @see Tag#setParent(Tag)
       */
      public void setParent(Tag t) {
      parent = t;
      }
      /**
       * The Tag instance most closely enclosing this tag instance.
       * @see Tag#getParent()
       *
       * @return the parent tag instance or null
       */
      public Tag getParent() {
      return parent;
      }
      /**
       * Set the id attribute for this tag.
       *
       * @param id The String for the id.
       */
      public void setId(String id) {
      this.id = id;
      }
      /**
       * The value of the id attribute of this tag; or null.
       *
       * @return the value of the id attribute, or null
       */
      public String getId() {
      return id;
      }
      /**
       * Set the page context.
       *
       * @param pageContext The PageContext.
       * @see Tag#setPageContext
       */
      public void setPageContext(PageContext pageContext) {
      this.pageContext = pageContext;
      }
      /**
       * Associate a value with a String key.
       *
       * @param k The key String.
       * @param o The value to associate.
       */
      public void setValue(String k, Object o) {
      if (values == null) {
        values = new HashtableString, Object>();
      }
      values.put(k, o);
      }
      /**
       * Get a the value associated with a key.
       *
       * @param k The string key.
       * @return The value associated with the key, or null.
       */
      public Object getValue(String k) {
      if (values == null) {
        return null;
      } else {
        return values.get(k);
      }
      }
      /**
       * Remove a value associated with a key.
       *
       * @param k The string key.
       */
      public void removeValue(String k) {
      if (values != null) {
        values.remove(k);
      }
      }
      /**
       * Enumerate the keys for the values kept by this tag handler.
       *
       * @return An enumeration of all the keys for the values set,
       *   or null or an empty Enumeration if no values have been set.
       */
      public EnumerationString> getValues() {
      if (values == null) {
        return null;
      }
      return values.keys();
      }
      // private fields
      private  Tag     parent;
      private  HashtableString, Object>  values;
      /**
       * The value of the id attribute of this tag; or null.
       */
      protected String   id;
      // protected fields
      /**
       * The PageContext.
       */
      protected PageContext pageContext;
    }
    
    

    doStartTag的返回值

    在doStartTag返回的值决定的body部分的数据如何显示。

    两个返回值:

    0 – SKIP_BODY – 常量。不显示body。
    1-EVAN_BODY_INCLUDE ;包含body部分的数据,正常显示。
    3:在doEndTag也有两个返回值

    决定后面的页面部分是否显示:

    SKIP_PAGE : 不再显示后面的页面部分。

    EVAL_PAGE : 显示后面的page部分。

    希望本文所述对大家的JSP程序设计有所帮助。

    您可能感兴趣的文章:
    • jsp自定义标签用法实例详解
    • JSP使用自定义标签防止表单重复提交的方法
    • JSP自定义分页标签TAG全过程
    • jsp自定义标签之ifelse与遍历自定义标签示例
    • JSP自定义标签获取用户IP地址的方法
    • 基于JSP 自定义标签使用实例介绍
    • JSP自定义标签Taglib实现过程重点总结
    • jsp 自定义标签实例
    • JSP 自定义标签之一 简单实例
    • jsp 标准标签库简析
    • 用定制标签库和配置文件实现对JSP页面元素的访问控制
    • jsp通过自定义标签库实现数据列表显示的方法
    上一篇:Java Web开发之图形验证码的生成与使用方法
    下一篇:JSP使用自定义标签防止表单重复提交的方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    jsp中自定义标签用法实例分析 jsp,中,自定义,标签,用法,