zoukankan      html  css  js  c++  java
  • JavaWeb 自定义标签库开发传统标签

    自定义标签主要用于移除Jsp页面中的java代码。

     移除jsp页面中的java代码,只需要完成两个步骤:

    1. 编写一个实现Tag接口的Java类,并覆盖doStartTag方法,把jsp页面中的java代码写到doStartTag方法中。
    2. 编写标签库描述符(tld)文件,在tld文件中对自定义标签进行描述。

    完成以上操作,即可在JSP页面中导入和使用自定义标签。

    1.1 使用自定义标签输出客户机IP

    ViewIPTag 类:

    package com;
    
    import java.io.IOException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.JspWriter;
    import javax.servlet.jsp.tagext.TagSupport;
    
    public class ViewIPTag extends TagSupport {
    
        @Override
        public int doStartTag() throws JspException {
            HttpServletRequest request=(HttpServletRequest) this.pageContext.getRequest();
            String strIP=request.getRemoteAddr();
            JspWriter out=this.pageContext.getOut();
            try {
                out.write("你的IP地址为"+strIP);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            return super.doStartTag();
        }
    }

    新建mytag.tld文件,放在WEB-INF目录下:

    <?xml version="1.0" encoding="UTF-8"?>
    <taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
     <description>A tag library exercising SimpleTag handlers.</description>
     <tlib-version>1.0</tlib-version>
     <short-name>SimpleTagLibrary</short-name>
     <uri>http://www.mytag.com</uri>
     <tag>
      <name>viewIP</name>
      <tag-class>com.ViewIPTag</tag-class>
      <body-content>empty</body-content>
      <description>show client IP</description>
     </tag>
    </taglib>

    编辑web.xml文件,添加:

    <jsp-config>
        <taglib>
            <taglib-uri>http://www.mytag.com</taglib-uri>
            <taglib-location>/WEB-INF/mytag.tld</taglib-location>
        </taglib>    
    </jsp-config>

    JSP测试页面:

    <%@ page language="java" pageEncoding="UTF-8"%>
    <%@ taglib prefix="mytag" uri="http://www.mytag.com"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>显示IP地址</title>
    </head>
    <body>
        <%
            String strIP=request.getRemoteAddr();
            out.print("你的IP地址为"+strIP);
        %>
        <br>
    
        <mytag:viewIP />
    </body>
    </html>

    1.2  Tag接口的执行流程

    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方法。

  • 相关阅读:
    Algorithm Gossip (48) 上三角、下三角、对称矩阵
    .Algorithm Gossip (47) 多维矩阵转一维矩阵
    Algorithm Gossip (46) 稀疏矩阵存储
    Algorithm Gossip (45) 费氏搜寻法
    Algorithm Gossip (44) 插补搜寻法
    Algorithm Gossip (43) 二分搜寻法
    Algorithm Gossip (42) 循序搜寻法(使用卫兵)
    Algorithm Gossip (41) 基数排序法
    Algorithm Gossip (40) 合并排序法
    AlgorithmGossip (39) 快速排序法 ( 三 )
  • 原文地址:https://www.cnblogs.com/aaron911/p/7789117.html
Copyright © 2011-2022 走看看