自定义标签的作用

*** 自定义标签的主要用于移除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>

jsp 自定义标签库的更多相关文章

  1. JSP自定义标签库

    总所周知,JSP自定义标签库,主要是为了去掉JSP页面中的JAVA语句 此处以格式化输出时间戳为指定日期格式为例,简单介绍下JSP自定义标签的过程. 编写标签处理类(可继承自javax.servlet ...

  2. [JSP]自定义标签库taglib

    自定义标签的步骤 自定义标签的步骤大概有三步: 1.继承javax.servlet.jsp.tagext.*下提供的几个标签类,如Tag.TagSupport.BodyTagSupport.Simpl ...

  3. JSP自定义标签的使用简化版

    在jsp中 如果不想页面中出现java代码 这个时候就需要使用到jsp的自定义标签库技术了 自定义标签库 能够有效的减少jsp中java代码的出现 使其更加自然的像html页面一样 如果要使用jsp自 ...

  4. jsp的标签库和自定义标签

    1.jstl标签库 JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签. ...

  5. JSP 标准标签库(JSTL)

    JSP 标准标签库(JSTL) JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签, ...

  6. JSP 自定义标签

    0 标签技术的API继承体系 1 作用 jsp自定义标签用于移除页面中的java代码 2 实现 2.1 标签处理类ViewIPTag.java package com.zsm.util; import ...

  7. JSP自定义标签开发入门

    一般情况下开发jsp自定义标签需要引用以下两个包 import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; 首先我们需要大致了解开发 ...

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

    一.自定义标签的作用 自定义标签主要用于移除Jsp页面中的java代码. 二.自定义标签开发和使用 2.1.自定义标签开发步骤 1.编写一个实现Tag接口的Java类(标签处理器类) 1 packag ...

  9. JSP 标准标签库(JSTL)之最常用的JSTL标签总结

    JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. Apache Tomcat安装JSTL 库步骤如下: 从Apache的标准标签库中下载的二进包(jakarta-t ...

随机推荐

  1. github客户端上传代码

    在window下安装github客户端上传代码 第一步:创建Github新账户 第二步:新建仓库 第三步:安装Github shell程序,地址:http://windows.github.com/ ...

  2. VS不显示最近打开的项目

    VS2012不显示最近打开的项目 解决方法, 在"运行"中输入 " gpedit.msc"打开后在"用户配置"-"管理模板&quo ...

  3. 论文笔记——MobileNets(Efficient Convolutional Neural Networks for Mobile Vision Applications)

    论文地址:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications MobileNet由Go ...

  4. UVa 821 网页跳跃(Floyd)

    https://vjudge.net/problem/UVA-821 题意:给出一个有向图,任意两点都可相互到达,求任意两点的最短距离的平均值. 思路:求两点的最短距离,用Floyd算法很方便,最后加 ...

  5. Git operate

    新建远程分支和删除 https://www.jianshu.com/p/ea1dab2de419 使用git branch -a查看所有分支 远程先开好分支然后拉到本地 git checkout -b ...

  6. vim/vi中移动光标键会变成A,B,C,D的解决办法

    在某些情况下, vi/vim中的编辑会出现一些很不愉快的情况, 比如在vi/vim中输入方向键有时被转化为A B C D, 或者按个Enter键, 却被转为为其他字母, 恼人得很, 该怎么办呢? 方法 ...

  7. ci与cd的全称

    Continuous Integration (CI) / Continuous Delivery (CD)

  8. 《剑指offer》第二十二题(链表中倒数第k个结点)

    // 面试题22:链表中倒数第k个结点 // 题目:输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯, // 本题从1开始计数,即链表的尾结点是倒数第1个结点.例如一个链表有6个结点, ...

  9. CAS-自旋锁

    自旋锁 自旋锁(spinlock):是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环.  获取锁的线程一直处于 ...

  10. SpringBoot 中常用注解@Controller/@RestController/@RequestMapping介绍

    原文 SpringBoot 中常用注解 @Controller/@RestController/@RequestMapping介绍 @Controller 处理http请求 @Controller / ...