• jsp 自定义标签库


    自定义标签的作用

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

    JSP页面中使用自定义的标签

    使用jsp指令<% @taglib uri="标签库的uri" prefix="标签使用的前缀" %> 指令要引入使用的标签库。

    自定义标签的执行流程

    jsp引擎遇到自定义标签时,首先创建标签处理类的实例对象,然后按照JSP规范定义的通信规则依次调用它的方法。
    public void setPageContext(pageContext pc) JSP引擎实例化标签处理器后,将调用setPageContext方法将JSP页面
    的pageContext对象传递给标签处理器,标签处理器以后可以通过这个pageContext对象与JSP页面进行通信。
    public void setParent(Tag t),setPageContext 方法执行完成后,WEB容器接着调用setParent方法将当前标签的父标签
    传递给当前标签处理器,如果当前标签没有父标签,则传递给setParent方法的参数值为null
    public int doStartTag(),调用setPageContext方法和setParent方法之后,WEB容器执行到自定义标签的开始标记时,就会调用标签处理器的doStartTag 方法。
    public int doEndTag(),WEB容器执行完自定义标签的标签体后,就会接着去执行自定义标签的结束标记,此时,WEB容器会去调用标签处理器的doEndTag方法。
    public void release() 通常WEB容器执行完自定义的标签后,标签处理器会驻留在内存中,为其他请求服务,直至停止web应用,web容器才会调用release方法。
    

    开发步骤

    实现tag接口的JAVA类
         
    package business.tagdemo;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.JspWriter;
    import javax.servlet.jsp.PageContext;
    import javax.servlet.jsp.tagext.Tag;
    ​
    public class DemoTag implements Tag {
    ​
        /** 接受传递进来的pageContext */
        private PageContext pageContext;
        
        /**WEB容器执行完自定义标签的标签体后,就会接着去执行自定义标签的结束标记,此时,WEB容器会去调用标签处理器的doEndTag方法*/
        @Override
        public int doEndTag() throws JspException {
            System.out.println("调用doEndTag()方法");
            return 0;
        }
    ​
        /**调用setPageContext方法和setParent方法之后,WEB容器执行到自定义标签的开始标记时,就会调用标签处理器的doStartTag 方法*/
        @Override
        public int doStartTag() throws JspException {
            System.out.println("调用doStartTag()方法");
            HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
            JspWriter jw = pageContext.getOut();
            String ip = request.getRemoteAddr();
            try {
                jw.write(ip);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return 0;
        }
    ​
        @Override
        public Tag getParent() {
            return null;
        }
    ​
        @Override
        public void release() {
            System.out.println("调用release()方法");
        }
    ​
        /**
         * JSP引擎实例化标签处理器后,将调用setPageContext方法将JSP页面的pageContext对象传递给标签处理器,标签处理器以后可以通过这个pageContext对象与JSP页面进行通信
         */
        @Override
        public void setPageContext(PageContext arg0) {
            this.pageContext=arg0;
        }
    ​
        @Override
        public void setParent(Tag arg0) {
            
        }
    ​
    }
    

    创建tld文件

    elipse中的创建方法
    New ----> XML ----> XML File ----> 输入xx.tld
    ----> Create XML file from a DTD file ----> Select XML Catalog entry
    ----> -//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN 
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd" >
    <taglib>
    <!-- taglib标签库版本号 -->
      <tlib-version>gs-1.0</tlib-version>
      <jsp-version>jsp-version</jsp-version>
      <short-name>gs</short-name>
      <!-- 
        为自定义标签库设置一个uri,uri以/开头,后面的内容可以随便写,如这里写/gs.
        在JSP页面中引用标签库的时候,需要通过uri找到标签库
        在JSP页面中就要这样引入标签库<%@ taglib uri="/gs" prefix="/gs"%>
       -->
      <uri>/gs</uri>
      <!-- 
        一个taglib中可以包含多个自定义标签,每一个标签使用一个tag标记来描述
        一个tag标记对应一个自定义标签
       -->
      <tag>
        <!-- 
            为标签类配置一个标签名,在JSP页面中使用标签时是通过标签名来找到要调用的标签处理类的
            通过aouo就能找到business.tagdemo.DemoTag类
         -->
        <name>aouo</name>
        <!-- 标签处理类 -->
        <tag-class>business.tagdemo.DemoTag</tag-class>
        <body-content>empty</body-content>
      </tag>
    </taglib>
    

    JSP中使用自定义标签库

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <!-- 使用taglib 指令引入gs标签库,标签库的前缀(prefix)可以随意设置,如这里设置成 prefix=ssgao-->
    <%@ taglib uri="/gs" prefix="ssgao"%>
    <!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>Insert title here</title>
    </head>
    <body>
        你的IP地址(使用JAVA代码输出):
        <% 
            //JSP页面中使用java代码输出IP地址
            String ip=request.getRemoteAddr();
            out.write(ip);
        %>
        <br />
        你的ip地址(使用自定义标签库输出):
        <!-- 使用是自定义标签gs -->
        <ssgao:aouo/>   
    </body>
    </html>
    
  • 相关阅读:
    tomcat加载项目原理解惑
    英语口语大全
    ubuntu中wubi正在下载ubuntu11.04desktopi386.iso
    Strust2获得session和request
    字符串转成对象
    DevExpress控件使用
    DevExpress控件之GridControl控件(控件篇)
    ASP.NET AJAX + JSON 实现对象调用
    WinForm窗体之间交互的一些方法[转]
    barmanager设置
  • 原文地址:https://www.cnblogs.com/ssgao/p/8867004.html
Copyright © 2020-2023  润新知