8.1 自定义标签应用形式
8.1.1.1 空标签
<tag:example/>
8.1.1.2 带体的标签
1、 内容为普通文本
<tag:example>tagcontent</tag:example>
2、 内容为JSP脚本片段
<tag:example>
<%String s= "content";out.print(s);%>
</tag:example>
3、 内容为JSP脚本表达式
<tag:example><%=value%></tag:example>
4、 内容为EL表达式
<tag:example>$(value)</tag:example>
8.1.1.3 嵌套标签
<tag:example><tag:example2>tagcontent</tag:example2></tag:example>
8.1.1.4 带属性标签
<tag:example attribute1="" attribute2="">
body</tag:example>
8.2 自定义标签简单应用
public class ViewIPTag extends TagSupport {
public int doStartTag() throws JspException {
String ip = pageContext.getRequest().getRemoteAddr();
try {
pageContext.getOut().write(ip);
} catch (Exception e) {
e.printStackTrace();
}
return super.doStartTag();
}}
创建XXX.tld标签文件
<?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>
<jsp-version>1.0</jsp-version>
<tlib-version>1.0</tlib-version>
<short-name>wangtongtaglib</short-name>
<uri>/wangtongtaglib</uri>
<tag>
<name>viewip</name>
<tag-class>tag.ViewIPTag</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
JSP文件中标签的使用:
<wangtong:viewip />
JSP引擎调用标签处理器的基本原理
1、 Web容器执行自定义标签开始标记时,会调用标签处理器的doStartTag()。可以通过该方法返回的不同的值来控制后续的行为:
是否执行标签体中的内容。
是直接输出标签体的执行结果,还是将标签体的执行结果输出到一个缓冲区对象中,从而可以让后续的时间方法对标签体的执行结果进行修改和控制其输出。
2、 Web容器执行完开始标记后,执行标签体,标签体执行完成后调用doAfterBody()方法。该方法用于标签体执行完后的行为,这个方法可以返回不同的值来控制是否再次重复执行标签体。
3、 Web容器执行完自定义标签体后,会执行自定义标签的结束标记,此时会执行doEndTag()方法。用于处理遇到结束标记这个事件,通过不同的值来控制Web容器是否执行JSP页面中位于结束标记后面的内容。
8.3 自定义标签API
8.3.1 JspTag接口
是所有自定义标签的父接口,Tag接口和SimpeTag是其直接子接口。
8.3.2 Tag接口
Tag接口是传统标签的父接口,定义了两个重要方法
doStartTag()、doEndTag()
;四个常量(EVAL_BODY_INCLUDE、SKIP_BODY、EVAL_PAGE、SKIP_PAGE
)。
1、 调用doStartTag()方法执行后向Web容器返回常EVAL_BODY_INCLUDE、SKIP_BODY。返回EVAL_BODY_INCLUDE则执行自定义标签的标签体;返回SKIP_BODY则忽略自定义标签的标签体,直接解释执行自定义标签的结果标记。
2、 调用doEndTag()方法、执行后向Web容器返回常量EVAL_PAGE、SKIP_PAGE。返回EVAL_PAGE则执行JSP页面位于结束标记后面的JSP代码、返回SKIP_PAGE则忽略JSP页面中位于结束标记后面的所有内容,例如<jsp:forward>标签。
8.3.3 IterationTag接口
IterationTag继承Tag接口,并增加了doAfterBody()方法和EVAL_BODY_AGAIN常量。能通知Web容器是否重复执行标签体内容。当调用doAfterBody()方法返回EVAL_BODY_AGAIN时,会重复执行标签,知道返回SKIP_BODY,Web容器才会处理标签的结束标记和调用doEndTag()。
8.3.4 BodyTag接口
BodyTag接口继承自IterationTag接口,增加2个方法setBodyContent()、doInitBody()方法和EVAL_BODY_BUFFERED常量。当doStartTag()方法返回EVAL_BODY_BUFFERED常量时,Web容器会创建专门用于捕获标签体运行结果的BodyContent对象,然后调用标签处理器的setBodyContent()将BodyContent对象传入标签处理器,Web容器将标签体的执行结果写入BodyContent对象中。在标签处理器的后续事件方法中,可以通过保存的BodyContent的对象的引用来获取标签体的执行结果,然后调用BodyContent对象特有的方法对BodyContent对象的内容进行修改和控制。
注:JSP API提供BodyTag接口的实现类BodyTagSupport。BodyTagSupport类实现的BodyTagSupport类的doStartTag方法的返回值为EVAL_BODY_BUFFERED。doAfterBody()返回值为SKIP_BODY,doEndTag()返回值为EVAL_PAGE。
8.3.5 SimpleTag接口
SimpleTag接口为JSP2.0新增标签接口,在SimpleTag中之定义了一个用于处理标签逻辑的doTag()方法,该方法在Web容器执行自定义标签时调用,而且只调用一次即完成传统标签的是否执行标签体、迭代标签等功能。
SimpleTagSupport类是SimpleTag接口的实现类。
分享到:
相关推荐
本篇文章将深入探讨JSP自定义标签的开发与使用,以及如何通过实例`Demo1_JspTag`来理解这一过程。 首先,我们需要了解自定义标签的基本概念。自定义标签是JSP的一种扩展机制,它允许我们封装复杂的Java代码或业务...
JSTL 以及自定义标签开发相关 JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out、set、remove、catch 2.流程控制标签:if、choose、when、otherwise 3.循环标签:forEach、forTokens 4.URL...
【JSP自定义标签开发使用】知识详解 JSP(JavaServer Pages)是一种动态网页技术,允许开发者在HTML页面中嵌入Java代码。在JSP中,自定义标签的使用可以增强代码的可读性和可维护性,使得复杂的业务逻辑更易于封装...
3. **编写XML标签**:接下来,我们可以在Mapper XML文件中使用自定义标签。假设我们要实现一个根据某个字段值决定是否包含某个子查询的功能,可以编写如下的自定义标签: ```xml SELECT * FROM users LEFT ...
本文将深入探讨HTML自定义标签的开发与使用,以及在实际应用中需要注意的关键点。 首先,创建自定义标签的目的是为了增加语义化,使网页内容更易于机器理解,同时提高人类阅读的清晰度。例如,可以定义`<article>`...
JSTL中的某些标签功能可能与自定义标签重复,但在实际开发中,两者常常结合使用,互补不足。例如,自定义标签可以处理特定业务逻辑,而JSTL则负责通用的控制流、迭代和I/O操作。 总结,通过自定义标签,我们可以...
下面将详细解释如何在ThinkPHP 3.0版本中实现自定义标签及其使用方法。 1. **自定义标签的作用** 自定义标签是ThinkPHP模板引擎的扩展,它可以将复杂的业务逻辑或重复的代码块封装起来,提高代码的可读性和复用性...
开发者可以根据需求,选择使用内置标签或自定义标签,甚至在同一个页面中混合使用,以达到最佳效果。 总之,Struts2自定义标签是提升项目开发效率和代码质量的有效手段。理解并熟练运用自定义标签,可以让开发者更...
自定义标签的使用极大地提高了JSP页面的可读性和可维护性,降低了视图层与业务逻辑的耦合度。同时,JSTL结合EL(Expression Language)可以提供更强大的数据绑定和控制流能力,使得JSP页面更加简洁高效。因此,理解...
3. 使用自定义标签:在模板文件中,你可以像使用内置标签一样使用你的自定义标签。例如,如果你注册了一个名为`myCustomTag`的自定义指令,你可以在模板中这样使用:`...
自定义标签是JSP开发中的一种重要特性,它允许开发者创建可重用的、符合HTML格式的自定义组件,以增强页面的表现力和代码的可维护性。...通过熟练掌握自定义标签的开发和使用,可以显著提高JSP应用的开发效率和质量。
- `js`:这个目录可能包含了JavaScript文件,与自定义标签的实现没有直接关系,但可能用于前端交互或数据验证。 - `META-INF`:这个目录通常用于存储元数据,如MANIFEST.MF文件。在自定义标签的上下文中,如果这个...
李宁老师的《Java Web开发速成宝典》中,详细讲解了自定义标签的创建步骤、实例分析及注意事项,配合《自定义标签的开发与应用.pdf》文件,读者可以深入理解并掌握这一技术。 总结,自定义标签是Java Web开发中的一...
- 创建函数库描述符:与自定义标签类似,也需要一个TLD文件来描述函数库,包括函数名称、参数和返回值等。 - 注册函数库:在web.xml中声明函数库的位置。 2. **使用自定义标签函数** 在JSP页面的EL表达式中,...
Java自定义标签开发是Java服务器页面(JSP)技术中的一种高级特性,它允许开发者创建自己的标签库,以提供更加可重用、可维护和可扩展的代码。本资源包包含的内容涵盖了Java自定义标签的各个方面,从基础概念到实际...
在实际开发中,自定义标签通常与Expression Language (EL) 和JSTL结合使用,可以处理更复杂的逻辑和数据绑定。自定义标签也可以通过继承已有的标签库,比如JSTL的`fmt`或`c`标签,进一步扩展其功能。 总之,理解和...
### 自定义标签开发中的注意事项 在自定义标签的开发中,需要注意以下几点: - **标签库定义的正确性**:TLD文件的定义需要准确无误,否则在使用标签时可能会遇到解析错误。 - **标签类的正确实现**:标签类中...
在Java编程语言中,自定义标签(也称为自定义JSP标签)是扩展JSP页面功能的一种强大方式。它们允许开发者创建可重用的代码片段,以提高代码的可读性...熟悉和掌握自定义标签的使用,对于提升Java Web开发技能至关重要。
自定义标签通过TLD(Tag Library Descriptor)文件来定义,使得开发人员能够创建符合Java Servlet规范的标签库。 二、创建自定义标签库 创建自定义标签库首先需要编写TLD文件,该文件用于描述标签的属性、行为以及...
在 Struts 中,自定义标签是提供一种灵活的方式,使得视图层(通常为 JSP 页面)能够更好地与业务逻辑交互,从而提高代码的可读性和可维护性。本文将深入探讨如何在 Struts 中实现自定义标签。 一、自定义标签概述 ...