`

自定义标签&简单标签

 
阅读更多

1.编写一个实现tag接口的java类

 

 

public class ViewIPTag extends TagSupport {

	@Override
	public int doStartTag() throws JspException {
	
		HttpServletRequest request = (HttpServletRequest) this.pageContext.getRequest();
		JspWriter out = this.pageContext.getOut();
		
		
		String ip = request.getRemoteAddr();
    	try {
			out.print(ip);
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
		
		return super.doStartTag();
	}
}

 

 

 

2.在tld文件中对标签处理器类进行描述(tld文件的位置:WEB-INF下,可以抄\apache-tomcat-6.0.20\webapps\examples\WEB-INF\jsp2\jsp2-example-taglib.tld)

 

 

 

<?xml version="1.0" encoding="UTF-8" ?>

<taglib 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"
    version="2.0">
    
    <description>A tag library exercising SimpleTag handlers.</description>
    <tlib-version>1.0</tlib-version>
    <short-name>com</short-name>
    <uri>http://www.com.cn</uri>
    
    
    <tag>
        <name>viewIP</name>
		<tag-class>com.web.tag.ViewIPTag</tag-class>
		<body-content>empty</body-content>
    </tag>
    
</taglib>

 

 

3.在jsp页面中导入和使用自定义标签

 

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://www.com.cn" prefix="com" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP '1.jsp' starting page</title>
  </head>
  
  <body>
    您的ip是:<com:viewIP/>
  </body>
</html>
 

 

 

---------------------------------------------------

 

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

  • 使用自定义标签控制页面内容
	int x = 5;//控制标签体重复执行
	@Override
	public int doStartTag() throws JspException {
		return Tag.EVAL_BODY_INCLUDE;//输出标签体内容(控制标签体重复执行)
//		return Tag.SKIP_BODY;//不输出标签体内容
//		return Tag.EVAL_PAGE;//控制整个jsp是否输出(<com:demo1/>放在html标签之上)
	}
	//控制标签体重复执行
	public int doAfterBody() throws JspException {
		x--;
		if(x>0){
			return IterationTag.EVAL_BODY_AGAIN;
		}else{
			return IterationTag.SKIP_BODY;
		}
	}
	//修改标签体(把标签体改为大写)extends BodyTagSupport
	public int doEndTag() throws JspException {
		BodyContent bc = this.getBodyContent();   //得到标签体
		String content =  bc.getString();
		content = content.toUpperCase();
		try {
			this.pageContext.getOut().write(content);
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
		return Tag.EVAL_PAGE;
	}
<tag>
        <name>demo1</name>
	<tag-class>cn.com.web.tag.TagDemo1</tag-class>
	<body-content>JSP</body-content>
</tag>
<com:demo1>
	aaaaa
</com:demo1>
  	
 
  • 使用简单标签控制页面内容
public class SimpleTagDemo1 extends SimpleTagSupport {
        private int count;
	private Date date;

	public void setCount(int count) {
		this.count = count;
	}

	public void setDate(Date date) {
		this.date = date;
	}

	@Override
	public void doTag() throws JspException, IOException {
		
		JspFragment  jf = this.getJspBody();
		//jf.invoke(this.getJspContext().getOut());//控制标签体是否执行
                //for(int i=0;i<5;i++){//控制标签体执行5次
		//	jf.invoke(null);  
		//}
                //throw new SkipPageException();控制标签余下的jsp不执行
                //------------修改标签体
               //StringWriter sw = new StringWriter();
		//jf.invoke(sw);
		//String content = sw.toString();
		//content = content.toUpperCase();
		//this.getJspContext().getOut().write(content);
               //----------带属性的标签
               //this.getJspContext().getOut().write(date.toLocaleString() + "<br/>");
		//for(int i=0;i<count;i++){
		//	jf.invoke(null);
		//}
	}
	
}
<tag>
        <name>demo1</name>
	<tag-class>cn.com.web.simpletag.SimpleTagDemo1</tag-class>
	<body-content>scriptless</body-content>
		
	<attribute>
		<name>count</name>
		<required>true</required>
		<rtexprvalue>true</rtexprvalue>
	</attribute>
		
	<attribute>
		<name>date</name>
		<required>true</required>
		<rtexprvalue>true</rtexprvalue>
	</attribute>
</tag>

 

<com:demo1 count="3" date="<%=new Date() %>">
 		aaaaaa
</com:demo1>
 

 

  • 使用标签控制页面逻辑案例
开发防盗链标签|开发<c:if>标签|开发<c:if><c:else>标签|开发迭代标签|开发html转义标签|打包标签库

 

分享到:
评论

相关推荐

    jsp 自定义标签实例

    本实例将深入探讨如何实现一个简单的JSP自定义标签。 首先,自定义标签的实现主要依赖于两个核心概念:Tag接口和TagSupport类。`Tag`接口定义了自定义标签必须实现的方法,如`doStartTag()`和`doEndTag()`,它们...

    freemarker 自定义freeMarker标签

    3. 使用自定义标签:在模板文件中,你可以像使用内置标签一样使用你的自定义标签。例如,如果你注册了一个名为`myCustomTag`的自定义指令,你可以在模板中这样使用:`...

    Freemarker 自定义标签 简单案例

    在这个"Freemarker自定义标签简单案例"中,我们将深入探讨如何利用Freemarker进行模板设计,并结合自定义标签来增强模板的功能。 首先,让我们理解Freemarker的基础知识。Freemarker是一个与语言无关的模板引擎,它...

    jsp2.0 自定义标签和自定标签函数

    在Java Server Pages (JSP) 2.0版本中,自定义标签和自定义标签函数极大地扩展了JSP开发的灵活性和可重用性。这些特性允许开发者创建可复用的组件,使代码更加清晰,易于维护。本文将深入探讨JSP 2.0中的自定义标签...

    JSP自定义标签学习笔记

    在JSP(JavaServer Pages)开发中,自定义标签是一种扩展JSP功能的强大工具,它允许开发者创建可重用的代码组件,以提高代码的可读性和可维护性。本篇学习笔记将深入探讨JSP自定义标签的相关概念、创建方法以及实际...

    置文件夹自定义图标&文件夹背景图1.rar

    3. **打开属性窗口**:在弹出的属性对话框中,选择“自定义”标签页。 4. **选择图标**:点击“更改图标…”按钮,这将打开一个选择图标的对话框。 5. **添加图标**:如果你想要的图标不在预设列表中,你可以从外部...

    jsp 自定义标签的使用

    在JavaServer Pages (JSP) 技术中,自定义标签是提高代码可重用性和模块化的重要手段。自定义标签允许开发者创建自己的组件,这些组件可以像HTML标签一样在页面上使用,使得代码更加清晰易读。本教程将深入探讨JSP...

    易语言置文件夹自定义图标&文件夹背景图1

    标签中提到的“易语言置文件夹自定义图标&文件夹背景图1源码”表明这个资源提供了一整套实现这些功能的源代码示例。这对于初学者来说是非常宝贵的,通过阅读和分析源码,可以深入理解如何在易语言中调用API函数,...

    自定义标签

    自定义标签则允许我们将Java代码逻辑封装在标签处理类中,而JSP页面只需要使用简单的标签声明就可以实现相同的功能。 自定义标签的开发通常涉及到以下几个步骤: 1. 创建一个实现了TagSupport接口的Java类。 2. 在...

    Web2.0体系学习(自定义标签)

    - Spring Web Flow、JSF等框架也提供了自定义标签的机制,进一步丰富了Web2.0开发中的自定义标签应用。 通过自定义标签,Web2.0应用可以更加灵活地构建用户界面,提供定制化的交互体验。同时,这也有助于提升...

    Struts2自定义标签

    自定义标签是Struts2框架中的一个重要特性,它允许开发者创建自己的标签库,以更直观、易读的方式在JSP页面中处理业务逻辑。下面将详细介绍Struts2自定义标签的相关知识点。 首先,理解自定义标签的作用。在传统的...

    自定义标签的内容及使用

    自定义标签有多种类型,包括没有属性和主体的简单标签、有属性但无主体的标签以及同时包含属性和主体的标签。在开发自定义标签时,通常会通过继承如`BodyTagSupport`这样的基类来实现,因为它们已经实现了`Tag`接口...

    JSTL自定义标签实例解析

    通过以上步骤,我们可以创建一个简单的自定义标签,例如一个循环输出标签,它接受两个参数——要输出的字符串(S)和重复次数(n),然后在页面上按要求重复输出字符串S。 总结来说,JSTL自定义标签提供了一种高效...

    JSP自定义标签实例与详细讲解

    一个简单的HelloWorld自定义标签可能如下: 1. 创建TLD文件(hello.tld): ```xml xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" ...

    java自定义标签教程

    在Java中,自定义标签是通过实现特定的接口或继承已有的支持类来完成的。 首先,Java自定义标签是一个Java类,它可以实现`javax.servlet.jsp.tagext.Tag`接口或者其子接口。这个接口定义了标签的生命周期方法,如`...

    JSP自定义标签之日期显示

    在Java服务器页面(JSP)开发中,自定义标签是一种扩展JSP功能的强大方式,它允许我们封装复杂的逻辑或重复使用的代码片段,提高代码的可读性和可维护性。本篇将深入探讨“JSP自定义标签之日期显示”,以及如何通过...

    JSP下 一个简单的自定义标签

    通过以上步骤,我们能够创建一个简单的自定义标签`&lt;myTags:defineTag&gt;`,并将其应用于JSP页面中。自定义标签使得JSP开发更加模块化,提高了代码的可读性和可维护性,降低了维护复杂性的不良影响。因此,掌握自定义...

    自定义标签学习笔记

    1. **自定义标签的本质**:本质上是一个简单的Java Bean,它可以用来封装业务逻辑或UI行为。 2. **自定义标签与JSP的关系**:自定义标签可以显著增强JSP的表现力,它将复杂的业务逻辑或者显示逻辑封装起来,使得...

    创建JSP自定义标签.doc

    以下是一个简单的自定义标签示例,名为`PermissionBodyTag`,它检查一个`permission`属性,决定是否包含标签内的内容: ```java package com.test.tag; import java.io.IOException; import javax.servlet.jsp....

Global site tag (gtag.js) - Google Analytics