`
1028826685
  • 浏览: 940815 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类

jsp中使用简单标签实现自定义表签

    博客分类:
  • Jsp
阅读更多
说明:

使用简单标签需要继承SimpleTagSupport类,这个类简化了对标签的开发

知识点:

SimpleTag方法介绍:


setJspContext方法
用于把JSP页面的pageContext对象传递给标签处理器对象
setParent方法
用于把父标签处理器对象传递给当前标签处理器对象
getParent方法
用于获得当前标签的父标签处理器对象
setJspBody方法
用于把代表标签体的JspFragment对象传递给标签处理器对象
doTag方法
用于完成所有的标签逻辑,包括输出、迭代、修改标签体内容等。在doTag方法中可以抛出javax.servlet.jsp.SkipPageException异常,用于通知WEB容器不再执行JSP页面中位于结束标记后面的内容,这等效于在传统标签的doEndTag方法中返回Tag.SKIP_PAGE常量的情况。


SimpleTag接口方法的执行顺序:

当web容器开始执行标签时,会调用如下方法完成标签的初始化
WEB容器调用标签处理器对象的setJspContext方法,将代表JSP页面的pageContext对象传递给标签处理器对象。
WEB容器调用标签处理器对象的setParent方法,将父标签处理器对象传递给这个标签处理器对象。注意,只有在标签存在父标签的情况下,WEB容器才会调用这个方法。
如果调用标签时设置了属性,容器将调用每个属性对应的setter方法把属性值传递给标签处理器对象。如果标签的属性值是EL表达式或脚本表达式,则WEB容器首先计算表达式的值,然后把值传递给标签处理器对象。
如果简单标签有标签体,容器将调用setJspBody方法把代表标签体的JspFragment对象传递进来。
执行标签时:
容器调用标签处理器的doTag()方法,开发人员在方法体内通过操作JspFragment对象,就可以实现是否执行、迭代、修改标签体的目的。

JspFragment类:

javax.servlet.jsp.tagext.JspFragment类是在JSP2.0中定义的,它的实例对象代表JSP页面中的一段符合JSP语法规范的JSP片段,这段JSP片段中不能包含JSP脚本元素。

WEB容器在处理简单标签的标签体时,会把标签体内容用一个JspFragment对象表示,并调用标签处理器对象的setJspBody方法把JspFragment对象传递给标签处理器对象。JspFragment类中只定义了两个方法,如下所示:

getJspContext方法
用于返回代表调用页面的JspContext对象.

public abstract void invoke(java.io.Writer out)
用于执行JspFragment对象所代表的JSP代码片段
参数out用于指定将JspFragment对象的执行结果写入到哪个输出流对象中,如果传递给参数out的值为null,则将执行结果写入到JspContext.getOut()方法返回的输出流对象中。(简而言之,可以理解为写给浏览器)

invoke方法详解 :

JspFragment.invoke方法可以说是JspFragment最重要的方法,利用这个方法可以控制是否执行和输出标签体的内容、是否迭代执行标签体的内容或对标签体的执行结果进行修改后再输出。例如:
在标签处理器中如果没有调用JspFragment.invoke方法,其结果就相当于忽略标签体内容;
在标签处理器中重复调用JspFragment.invoke方法,则标签体内容将会被重复执行;
若想在标签处理器中修改标签体内容,只需在调用invoke方法时指定一个可取出结果数据的输出流对象(例如StringWriter),让标签体的执行结果输出到该输出流对象中,然后从该输出流对象中取出数据进行修改后再输出到目标设备,即可达到修改标签体的目的。



第一步:编写SimpleTag继承SimpleTagSupport

public class SimpleTag extends SimpleTagSupport {

public void doTag() throws JspException, IOException {

//执行标签体
/*
JspFragment body=getJspBody();
JspWriter out=this.getJspContext().getOut();
body.invoke(out);

*/
//不执行标签体


//重复执行

/*JspFragment body=getJspBody();
JspWriter out=this.getJspContext().getOut();

for(int i=0;i<5;i++)
{
body.invoke(out);
}*/

//修改标签体内容
/*JspFragment body=getJspBody();
StringWriter out=new StringWriter();
//执行标签体,把内容传入流中
body.invoke(out);
String str=out.toString();
str=str.toUpperCase();
getJspContext().getOut().write(str);*/

//停止显示标签后面文档内容

super.doTag();
throw new SkipPageException();

}
}

第二步:编写一个view.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>SimpleTagLibrary</short-name>
    <uri>http://www.liyong.simpletag</uri>
    <tag>
        <description>show client IP</description>
        <name>tag</name>
        <tag-class>com.liyong.simpleTag.SimpleTag</tag-class>
        <!-- 标签体不为空 这与传统标签不同 JSP -->
        <body-content>scriptless</body-content>
    </tag>
    <tag>
        <description>show client IP</description>
        <name>tag2</name>
        <tag-class>com.liyong.simpleTag.SimpleTag</tag-class>
        <!-- 标签体为空 这与传统标签同 empty -->
        <body-content>empty</body-content>
    </tag>
</taglib>

第三步:编写jsp并导入 *.tld 库

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="/WEB-INF/simptag/view.tld" prefix="simple" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!-- 不执行页面内容 -->
<%--

   <simple:tag2/>

-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>My JSP 'simpletag.jsp' starting page</title>
   
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

  </head>
 
  <body>
<!--
显示标签体
   <simple:tag>
test!!
</simple:tag>
-->
<%--
重复执行标签体内容

<simple:tag>
aaaaa
</simple:tag>
--%>
<%--

<simple:tag>
改变标签体内容
aaaaa
</simple:tag>
--%>

  </body>
</html>
第四步:测试...
分享到:
评论

相关推荐

    jsp 自定义标签实例

    3. **在JSP页面中使用自定义标签**:在JSP页面中,通过`&lt;jsp:taglib&gt;`指令引入TLD文件,然后就可以像使用内置标签一样使用自定义标签了。例如,`&lt;myTag:myTag attribute1="value1" attribute2="value2"&gt;`。 在给定...

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

    本文将深入探讨JSP 2.0中的自定义标签和自定义标签函数,以及如何配置和使用它们。 **一、自定义标签** 自定义标签是JSP中的一种高级特性,它允许开发者创建类似于HTML标签的自定义组件。这种组件可以封装复杂的...

    jsp 自定义标签的使用

    3. **在JSP页面中使用**:在JSP页面中,通过`&lt;%@ taglib %&gt;`指令引入自定义标签库,然后就可以像使用内置标签一样使用自定义标签了。 二、分页封装 分页是网页应用中常见的需求,通过自定义标签可以方便地实现。...

    JSP自定义标签学习笔记

    对于带有标记体的标签,需要继承`javax.servlet.jsp.tagext.BodyTagSupport`,并在处理类中使用`doStartTag()`、`doAfterBody()`和`doEndTag()`方法来处理标签体内容。 5.3 一个简单的带标记体的标签(二) 在实际...

    自定义JSP标签样例

    2. 标签处理类(Tag Handler Class):这是实现自定义标签逻辑的Java类,它实现了`javax.servlet.jsp.tagext.Tag`接口或其子接口。 3. 标签文件(Tag File):可选的,用于简化标签定义,类似于HTML模板,可以包含...

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

    而标签处理类则是实现自定义标签功能的Java类,它扩展了`javax.servlet.jsp.tagext.TagSupport`或`javax.servlet.jsp.tagext.SimpleTagSupport`类。 创建自定义标签的步骤如下: 1. **定义TLD文件**:在TLD文件中...

    自定义JSP标签,用于实现无刷新的方法之一

    3. **在JSP页面中使用自定义标签**:在JSP页面中,通过`&lt;%@ taglib %&gt;`指令引入TLD文件,然后就可以像使用标准JSP标签一样使用自定义标签了: ```jsp ``` 自定义JSP标签实现无刷新功能,主要是通过AJAX技术。当...

    jsp自定义迭代标签

    在实现自定义迭代标签时,通常需要继承`javax.servlet.jsp.tagext.IterationTag`类或者其子类`javax.servlet.jsp.tagext.BodyTagSupport`。 #### 三、示例代码分析 ##### 1. `iterateTag`类 ```java package body...

    简单JSP标签、自定义标签

    - **在JSP页面中使用自定义标签**:通过`&lt;jsp:useBean&gt;`导入标签库,然后在页面中像使用标准标签一样使用自定义标签。 ### 3. JSP简单标签 简单标签是自定义标签的一种特殊形式,它们没有开始和结束标签,只有一个...

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

    四、在JSP页面中使用自定义标签 在JSP页面中引入自定义标签库后,可以通过`&lt;%@ taglib %&gt;`指令来引用TLD文件,然后像使用HTML标签一样使用自定义标签。 五、自定义标签实例 一个简单的HelloWorld自定义标签可能如下...

    开发自定义JSP标签

    2. **标签处理类(Tag Handler Class)**: 这是实现自定义标签逻辑的Java类,它继承自`javax.servlet.jsp.tagext.TagSupport`或`javax.servlet.jsp.tagext.SimpleTagSupport`。在这个类中,我们可以覆盖`doStartTag()`...

    掌握jsp自定义标签chm版

    学习自定义标签的过程中,会涉及到如何创建处理程序类、编写TLD文件、在JSP页面中使用自定义标签等多个步骤。通过实际项目练习,可以更好地掌握这些技能。 9. **与其他技术的结合** 自定义标签可以与Servlet、...

    jsp自定义标签大全.rar

    4. **在JSP页面中使用标签**: 引入TLD文件,然后像使用标准JSP标签一样使用自定义标签。 **自定义标签的优势** 1. **代码分离**: 自定义标签可以将HTML和Java代码分离,使页面更易于阅读和维护。 2. **复用性**: ...

    jsp的自定义标签

    **JSP自定义标签详解** 在Java服务器页面(JSP)技术中,自定义标签是扩展JSP功能的重要手段,它允许开发者创建可重用的组件,...在实际项目中,可以根据需求选择合适的方式来实现自定义标签,以满足各种业务场景。

    JSP自定义标签的开发及使用

    在这个例子中,`Demo1_JspTag`项目包含了一个简单的自定义标签实现,通过`myTag`标签,我们可以看到如何将Java代码与JSP页面分离,提高代码的复用性和可维护性。这只是一个基础示例,实际上自定义标签可以处理更复杂...

    jsp java自定义标签 实现分页 当前位置标签

    3. 处理分页逻辑:在标签实现类中,你需要实现计算总页数、当前页、上一页、下一页等功能。这通常涉及到数据库查询,获取总记录数,并根据每页显示的记录数计算总页数。 4. 输出HTML:在`doEndTag()`方法中,根据...

    掌握自定义jsp标签

    自定义标签允许开发者创建自己的HTML标签,这些标签封装了特定的功能,可以像标准HTML标签一样在JSP页面中使用。本篇文章将详细探讨自定义标签的三种类型:简单标签、嵌套标签以及正文标签,并讲解如何利用自定义...

    jsp自定义标签编写的分页

    标签处理类是实现自定义标签逻辑的Java类,它处理标签的生命周期方法,如doStartTag()和doEndTag()。最后,标签库是一组自定义标签的集合,它们可以通过JSP页面引用。 在我们的例子中,"分页"自定义标签可以包含...

    jsp自定义简单标签

    通过上述步骤,我们成功地创建了一个简单的自定义标签 `helloTag` 并在 JSP 页面中使用了它。这种自定义标签的方式不仅提高了代码的复用性,还使得 JSP 页面更加简洁和易于理解。在实际项目开发中,合理利用自定义...

Global site tag (gtag.js) - Google Analytics