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规范定义的通信规则依次调用它的方法。
- 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方法。
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自定义标签。 首先,自定义标签的实现主要依赖于两个核心概念:Tag接口和TagSupport类。`Tag`接口定义了自定义标签必须实现的方法,如`doStartTag()`和`doEndTag()`,它们...
3. 使用自定义标签:在模板文件中,你可以像使用内置标签一样使用你的自定义标签。例如,如果你注册了一个名为`myCustomTag`的自定义指令,你可以在模板中这样使用:`...
在这个"Freemarker自定义标签简单案例"中,我们将深入探讨如何利用Freemarker进行模板设计,并结合自定义标签来增强模板的功能。 首先,让我们理解Freemarker的基础知识。Freemarker是一个与语言无关的模板引擎,它...
在Java Server Pages (JSP) 2.0版本中,自定义标签和自定义标签函数极大地扩展了JSP开发的灵活性和可重用性。这些特性允许开发者创建可复用的组件,使代码更加清晰,易于维护。本文将深入探讨JSP 2.0中的自定义标签...
在JSP(JavaServer Pages)开发中,自定义标签是一种扩展JSP功能的强大工具,它允许开发者创建可重用的代码组件,以提高代码的可读性和可维护性。本篇学习笔记将深入探讨JSP自定义标签的相关概念、创建方法以及实际...
3. **打开属性窗口**:在弹出的属性对话框中,选择“自定义”标签页。 4. **选择图标**:点击“更改图标…”按钮,这将打开一个选择图标的对话框。 5. **添加图标**:如果你想要的图标不在预设列表中,你可以从外部...
在JavaServer Pages (JSP) 技术中,自定义标签是提高代码可重用性和模块化的重要手段。自定义标签允许开发者创建自己的组件,这些组件可以像HTML标签一样在页面上使用,使得代码更加清晰易读。本教程将深入探讨JSP...
标签中提到的“易语言置文件夹自定义图标&文件夹背景图1源码”表明这个资源提供了一整套实现这些功能的源代码示例。这对于初学者来说是非常宝贵的,通过阅读和分析源码,可以深入理解如何在易语言中调用API函数,...
自定义标签则允许我们将Java代码逻辑封装在标签处理类中,而JSP页面只需要使用简单的标签声明就可以实现相同的功能。 自定义标签的开发通常涉及到以下几个步骤: 1. 创建一个实现了TagSupport接口的Java类。 2. 在...
- Spring Web Flow、JSF等框架也提供了自定义标签的机制,进一步丰富了Web2.0开发中的自定义标签应用。 通过自定义标签,Web2.0应用可以更加灵活地构建用户界面,提供定制化的交互体验。同时,这也有助于提升...
自定义标签是Struts2框架中的一个重要特性,它允许开发者创建自己的标签库,以更直观、易读的方式在JSP页面中处理业务逻辑。下面将详细介绍Struts2自定义标签的相关知识点。 首先,理解自定义标签的作用。在传统的...
自定义标签有多种类型,包括没有属性和主体的简单标签、有属性但无主体的标签以及同时包含属性和主体的标签。在开发自定义标签时,通常会通过继承如`BodyTagSupport`这样的基类来实现,因为它们已经实现了`Tag`接口...
通过以上步骤,我们可以创建一个简单的自定义标签,例如一个循环输出标签,它接受两个参数——要输出的字符串(S)和重复次数(n),然后在页面上按要求重复输出字符串S。 总结来说,JSTL自定义标签提供了一种高效...
一个简单的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类,它可以实现`javax.servlet.jsp.tagext.Tag`接口或者其子接口。这个接口定义了标签的生命周期方法,如`...
在Java服务器页面(JSP)开发中,自定义标签是一种扩展JSP功能的强大方式,它允许我们封装复杂的逻辑或重复使用的代码片段,提高代码的可读性和可维护性。本篇将深入探讨“JSP自定义标签之日期显示”,以及如何通过...
通过以上步骤,我们能够创建一个简单的自定义标签`<myTags:defineTag>`,并将其应用于JSP页面中。自定义标签使得JSP开发更加模块化,提高了代码的可读性和可维护性,降低了维护复杂性的不良影响。因此,掌握自定义...
1. **自定义标签的本质**:本质上是一个简单的Java Bean,它可以用来封装业务逻辑或UI行为。 2. **自定义标签与JSP的关系**:自定义标签可以显著增强JSP的表现力,它将复杂的业务逻辑或者显示逻辑封装起来,使得...
以下是一个简单的自定义标签示例,名为`PermissionBodyTag`,它检查一个`permission`属性,决定是否包含标签内的内容: ```java package com.test.tag; import java.io.IOException; import javax.servlet.jsp....