Test.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'Test.jsp' starting page</title>
</head>
<body>
This is my JSP page. <br>
Date : <%= new java.util.Date().toString() %> <br>
File : <input value="<%= request.getServletPath() %>" />
</body>
</html>
为了将这个这个Test.jsp改成自定义标签方法,我们分别使用简单标签和内容标签两种不同的方式实现。
1. 简单标签
由于我们需要输出两个内容(日期和文件名),因此我们为标签创建一个参数。具体代码:
DemoTag.java
package com.mycompany;
import java.util.Date;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
public class DemoTag extends TagSupport {
public int doStartTag() throws JspException {
try {
HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
JspWriter out = pageContext.getOut();
if (parameter.compareToIgnoreCase("filename") == 0)
out.print(request.getServletPath());
else
out.print(new Date());
} catch (java.io.IOException e) {
throw new JspTagException(e.getMessage());
}
return SKIP_BODY;
}
private String parameter = "date";
public void setParameter(String parameter) {
this.parameter = parameter;
}
public String getParameter() {
return parameter;
}
}
接下来,我们创建标签文件 MyTagLib.tld。标签文件其实只是一个XML格式的说明文件,内容也很简单。
MyTagLib.tld
<?xml version="1.0" encoding="ISO-8859-1"?>
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<tag>
<name>demo</name>
<tag-class>com.mycompany.DemoTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>parameter</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
在这个标签文件中,我们将我们创建的标签取名 demo,并声明了类型和参数(parameter)。将该文件保存在 /WEB-INF 下面。
当然,我们还需要将我们自定义的标签添加到 web.xml 中,否则还是无法使用。
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<jsp-config>
<taglib>
<taglib-uri>/WEB-INF/MyTagLib</taglib-uri>
<taglib-location>/WEB-INF/MyTagLib.tld</taglib-location>
</taglib>
</jsp-config>
</web-app>
你可能在别处看到过类似的声明,只是没有外面的 jsp-config,但是我们使用的是DTD 2.4,如果不加,Eclipse 会提示出错。
到此为止,我们的自定义标签算是创建完毕。接下来,我们可以开始改写那个JSP文件来分离代码了。
Test.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@taglib uri="/WEB-INF/MyTagLib" prefix="mytag"%>
<html>
<head>
<title>My JSP 'Test.jsp' starting page</title>
</head>
<body>
This is my JSP page. <br>
Date : <mytag:demo parameter="date" /><br>
File : <mytag:demo parameter="filename" />
</body>
</html>
上面这些想必你已经很熟悉,我就不做多说了。
2. 内容标签
创建过程和上面大抵相同,只是程序文件和配置内容有些差异。
DemoTag2.java
package com.mycompany;
import java.io.IOException;
import java.util.Date;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
public class DemoTag2 extends BodyTagSupport {
public int doStartTag() throws JspTagException {
return EVAL_BODY_BUFFERED;
}
public int doEndTag() throws JspTagException {
String body = this.getBodyContent().getString();
HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();
body = body.replace("$date", new Date().toString());
body = body.replace("$filename", request.getServletPath());
try {
pageContext.getOut().print(body);
}
catch (IOException e) {
throw new JspTagException(e.getMessage());
}
return SKIP_BODY;
}
}
我们将新的标签 DemoTag2 加入到上面的标签文件中。
MyTagLib.tld
<?xml version="1.0" encoding="ISO-8859-1"?>
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<tag>
<name>demo</name>
<tag-class>com.mycompany.DemoTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>parameter</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<tag>
<name>demo2</name>
<tag-class>com.mycompany.DemoTag2</tag-class>
<body-content>jsp</body-content>
</tag>
</taglib>
web.xml 文件无需修改。
看看同时使用两种标签的Test.jsp效果。
Test.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@taglib uri="/WEB-INF/MyTagLib" prefix="mytag"%>
<html>
<head>
<title>My JSP 'Test.jsp' starting page</title>
</head>
<body>
This is my JSP page. <br>
Date : <mytag:demo parameter="date" /><br>
File : <mytag:demo parameter="filename" />
<hr>
<mytag:demo2>
Date: $date<br>
File: $filename
</mytag:demo2>
</body>
</html>
分享到:
相关推荐
这个“一个类似foreach的简单自定义标签”是一个示例,它实现了与JSTL(JavaServer Pages Standard Tag Library)中的`<c:forEach>`标签类似的功能,用于遍历集合数据并进行渲染。 自定义标签的核心在于TLD(Tag ...
Java数据库连接池与简单自定义标签是两个在Web开发中至关重要的概念,它们极大地提高了应用程序的性能和可维护性。 首先,我们来深入理解“Java数据库连接池”。数据库连接池是一种管理数据库连接的技术,它允许...
本实例将深入探讨如何实现一个简单的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自定义标签的相关概念、创建方法以及实际...
在JavaServer Pages (JSP) 技术中,自定义标签是提高代码可重用性和模块化的重要手段。自定义标签允许开发者创建自己的组件,这些组件可以像HTML标签一样在页面上使用,使得代码更加清晰易读。本教程将深入探讨JSP...
- Spring Web Flow、JSF等框架也提供了自定义标签的机制,进一步丰富了Web2.0开发中的自定义标签应用。 通过自定义标签,Web2.0应用可以更加灵活地构建用户界面,提供定制化的交互体验。同时,这也有助于提升...
自定义标签则允许我们将Java代码逻辑封装在标签处理类中,而JSP页面只需要使用简单的标签声明就可以实现相同的功能。 自定义标签的开发通常涉及到以下几个步骤: 1. 创建一个实现了TagSupport接口的Java类。 2. 在...
自定义标签有多种类型,包括没有属性和主体的简单标签、有属性但无主体的标签以及同时包含属性和主体的标签。在开发自定义标签时,通常会通过继承如`BodyTagSupport`这样的基类来实现,因为它们已经实现了`Tag`接口...
自定义标签是Struts2框架中的一个重要特性,它允许开发者创建自己的标签库,以更直观、易读的方式在JSP页面中处理业务逻辑。下面将详细介绍Struts2自定义标签的相关知识点。 首先,理解自定义标签的作用。在传统的...
通过以上步骤,我们能够创建一个简单的自定义标签`<myTags:defineTag>`,并将其应用于JSP页面中。自定义标签使得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" ...
通过以上步骤,我们可以创建一个简单的自定义标签,例如一个循环输出标签,它接受两个参数——要输出的字符串(S)和重复次数(n),然后在页面上按要求重复输出字符串S。 总结来说,JSTL自定义标签提供了一种高效...
在Java服务器页面(JSP)开发中,自定义标签是一种扩展JSP功能的强大方式,它允许我们封装复杂的逻辑或重复使用的代码片段,提高代码的可读性和可维护性。本篇将深入探讨“JSP自定义标签之日期显示”,以及如何通过...
在Java中,自定义标签是通过实现特定的接口或继承已有的支持类来完成的。 首先,Java自定义标签是一个Java类,它可以实现`javax.servlet.jsp.tagext.Tag`接口或者其子接口。这个接口定义了标签的生命周期方法,如`...
1. **自定义标签的本质**:本质上是一个简单的Java Bean,它可以用来封装业务逻辑或UI行为。 2. **自定义标签与JSP的关系**:自定义标签可以显著增强JSP的表现力,它将复杂的业务逻辑或者显示逻辑封装起来,使得...
本篇文章将带你回顾如何实现一个简单的自定义标签。 一、自定义标签的基本概念 自定义标签是JSP标准标签库(JSTL)的扩展,它们通常由两个部分组成:标签处理类(Tag Handler Class)和标签库描述文件(TLD,Tag ...
以下是一个简单的自定义标签示例,名为`PermissionBodyTag`,它检查一个`permission`属性,决定是否包含标签内的内容: ```java package com.test.tag; import java.io.IOException; import javax.servlet.jsp....