`
superzhouych
  • 浏览: 22720 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

SCWCD之路——自定义标签库开发

阅读更多

介绍

 

        在考试中对标签的考查占的比重十分重要,这其中又分自定义标签开发和标准标签库开发。自定义标签开发主要考查程序员是否对各个与标签相关的接口中的方法是否熟悉,倒并不会要程序员去开发一个比较复杂的标签;而标准标签库开发主要考查一些重要标签的使用形式,比较简单。这部分的内容将分成两篇文章来讲述。

        标签扩展可以看成是一个Java类,它类似于JavaBean,但是具有比JavaBean更强大的运行时功能。因为它与JSP的逻辑联系更加紧密,同时它又能像JavaBean那样具有业务逻辑处理能力。所有的标签都必须直接或间接地继承javax.servlet.jsp.tagext.JspTag接口,一般都直接通过继承其子类Tag、BodyTag、IterationTag和SimpleTag来开发自定义标签。考试中对于这几个接口的考查较多,必须清楚它们的关系:

        1)JspTag是所有标签的父接口,它没有声明任何属性和方法。

        2)Tag接口继承了JspTag,它声明了四个属性,分别是SKIP_BODY、EVAL_BODY_INCLUDE、EVAL_PAGE和SKIP_PAGE,方法则有两个,分别是doStartTag()方法和doEndTag()方法。

        3)IterationTag接口继承了Tag,它在Tag的基础上新加了属性EVAL_BODY_AGAIN和方法doAfterBody()。

        4)BodyTag接口继承了IterationTag,它在IterationTag的基础长又增加了两个属性,分别是EVAL_BODY_BUFFERED和EVAL_BODY_TAG,方法则增加了doInitBody()和setBodyContent()两个方法。

        5)DynamicAttributes接口用来开发接收动态参数的标签,它有一个setDynamicAttribute()的方法。

 

 

Tag标签开发

 

        Tag的声明周期一般分为:

        1)setPageContext():设置标签的页面上下文。

        2)setParent():设置该标签的上一级标签,如果没有嵌套则设置为null。

        3)设置该标签的属性,没有则略过。

        4)doStartTag():返回SKIP_BODY或EVAL_BODY_INCLUDE,如果是前者则跳过,后者则计算标签主体。

        5)doEndTag():返回EVAL_PAGE或SKIP_PAGE,如果是前者则继续处理JSP页面的其他部分,否则停止处理。

        6)release():释放标签占用的资源。

 

        下面通过一个例子来说明开发自定义标签的一般步骤:

        1)开发标签的实现类,如:

package mytag;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.Tag;

/**
 * 这是一个显示“Hello world”的标签
 * @author zhouych
 */
public class MyTag implements Tag {

    private PageContext pageContext;
    private Tag parent;

    public MyTag() {
        super();
    }

    @Override
    public void setPageContext(PageContext pc) {
        this.pageContext = pc;
    }

    @Override
    public void setParent(Tag t) {
        this.parent = t;
    }

    @Override
    public Tag getParent() {
        return parent;
    }

    @Override
    public int doStartTag() throws JspException {
        return SKIP_BODY;
    }

    @Override
    public int doEndTag() throws JspException {
        try {
            pageContext.getOut().write("Hello world");
        } catch (Exception e) {
            throw new JspTagException("IO Error: " + e.getMessage());
        }
        return EVAL_PAGE;
    }

    @Override
    public void release() {
        // 暂时没有占用资源
    }
}

        2)编写标签的描述性文件(后缀名是tld),一般做法是在WEB-INF文件夹下新建一个tlds的文件夹来存放这些标签描述文件,如:

<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd">
    <tlib-version>1.0</tlib-version>
    <short-name>mytag</short-name>
    <uri>/WEB-INF/tlds/demotag</uri>
    <tag>
        <name>helloworld</name>
        <tag-class>mytag.HelloWorldTag</tag-class>
        <body-content>empty</body-content><!—表示标签体必须为空-->
        <description>一个打印Hello world的标签</description>
    </tag>
</taglib>

        需要注意 的是在<body-content>中只允许填入如下内容,这个是考试重点

        a)empty:表示标签体为空。

        b)jsp:表示标签体可以是任何有效的JSP代码。

        c)tagdependent:表示标签体内容不是由Servlet容器处理而是由标签处理器来处理,即不同于平常的是将执行能够结果传递给标签处理器。

        d)scriptless:表示标签体可以包含EL表达式和JSP动作元素等,但不能包含JSP的脚本元素。

 

        3)在web.xml文件中指定对标签的引用(节选)

<web-app>
    <jsp-config>
        <taglib>
            <taglib-uri>/WEB-INF/tlds/demotag</taglib-uri>
            <taglib-location>/WEB-INF/tlds/mytag.tld</taglib-location>
        </taglib>
    </jsp-config>
</web-app>

        4)之后编写一个JSP页面来进行测试

<%@taglib uri="/WEB-INF/tlds/demotag" prefix="hello" %>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
        <title>JSP Page</title>
    </head>
    <body>
        <hello:helloworld />
    </body>
</html>

        在浏览器中输入上述页面的地址即可看到输出Hello world,如下图:

 

 

  • 大小: 4.9 KB
2
0
分享到:
评论

相关推荐

    SCWCD之路——标准标签库开发

    "SCWCD之路——标准标签库开发"是一个关于Java Web开发中的重要主题,特别是与Servlet、JSP和自定义标签库相关的知识。SCWCD(Sun Certified Web Component Developer)是Oracle公司提供的一个Java Web开发认证,它...

    SCWCD之路——前言

    标题“SCWCD之路——前言”暗示了这是一个关于SCWCD(Sun Certified Web Component Developer)认证的学习历程或指南的开篇部分。SCWCD是Java EE(现在称为Jakarta EE)开发人员的一个专业认证,它专注于Web组件的...

    SCWCD之路——结束语

    标题“SCWCD之路——结束语”表明这是一个关于SCWCD认证学习的总结或结语。SCWCD,全称Sun Certified Web Component Developer,是Oracle(原Sun Microsystems)推出的一个Java Web开发领域的专业认证,主要考察...

    SCWCD之路——Web应用的安全性

    本篇文章将探讨“SCWCD之路——Web应用的安全性”,并结合提供的文件`catalina.jar`和`tomcat-juli.jar`,深入讲解相关的安全知识点。 首先,让我们理解`catalina.jar`和`tomcat-juli.jar`。这两个文件都是Apache ...

    scwcd国际认证题库

    JSP页面由JSP指令(如page、include、taglib)、脚本元素(scriptlets、表达式、声明)和JSP标签(自定义标签和标准动作)组成。JSP会转换成Servlet并在服务器上运行。了解JSP动作、EL(Expression Language)和JSTL...

    SCWCD

    - 自定义标签库:了解如何创建和使用自定义标签库来封装复杂的业务逻辑。 ### SCWCD Exam Study Kit 《SCWCD Exam Study Kit》是一本专门针对SCWCD认证考试的学习指南。该书由Hanumant Deshmukh、Jignesh Malavia...

    SCWCD资料 scwcd认证

    2. **JSP基础**:掌握JSP语法,包括指令、脚本元素、EL(Expression Language)、JSTL(JavaServer Pages Standard Tag Library)以及自定义标签。 3. **会话管理**:学习如何创建和管理用户会话,如使用session对象...

    SCWCD_310-083-02题库.pdf

    根据提供的文件信息,我们可以归纳出以下相关知识点: ### 1. Sun Certified Web Component Developer (SCWCD) ...通过这种方式,可以在部署描述符中指定自定义标签库的符号名(`myTags`)及其 TLD 文件的实际位置。

    SCWCD第三轮复习

    SCWCD,全称Sun Certified Web Component Developer,是Oracle(原Sun Microsystems)推出的Java EE(企业版)认证考试之一,主要考察开发者在构建Web应用程序方面的能力,包括Servlet、JSP、JSTL、EL表达式语言等...

    SCWCD 题库整理

    6. **SCWCD_310-083_题库.pdf**:这个文件同样可能是一个题库,专门针对310-083考试,涵盖了SCWCD认证的所有主题,包括但不限于JSP表达式语言、自定义标签、JNDI(Java Naming and Directory Interface)和JavaMail...

    scwcd.rar_scwcd

    JSP元素如指令、脚本元素、表达式语言(EL)、自定义标签库(JSTL)和页面生命周期是学习的重点。 3. **MVC模式**:Model-View-Controller模式在Web应用中广泛使用,理解其工作原理以及如何在Servlet和JSP中实现MVC...

    我考scwcd的题库

    自定义标签库配置 #### 问题背景 为了在Web应用程序中使用自定义标签,需要在`/WEB-INF/myTags.xml`文件中定义这些标签,并在JSP中使用符号名`myTags`来引用它们。 #### 代码示例 ```xml &lt;name&gt;myTags ...

    SCWCD_310-083

    SCWCD 310-083 考试涵盖了广泛的Java Web开发技术,包括但不限于JSP、Servlet、JavaBeans和自定义标签。通过深入理解这些概念,开发者可以构建出更加强大、灵活且高效的Web应用程序。掌握如何声明JSP文档的MIME类型...

    SCWCD_310-081+083_完整题库

    310-083 题库则可能专注于JSP和相关技术,比如EL(Expression Language)用于简化页面表达式的编写,JSTL用于减少脚本代码,以及自定义标签库的使用。此外,还可能涉及MVC(Model-View-Controller)设计模式的应用,...

    310-081_SCWCD_题库

    重点包括JSP指令、脚本元素、EL(Expression Language)、JSTL(JavaServer Pages Standard Tag Library)以及自定义标签。 3. **HTTP协议**:理解HTTP的工作原理,如请求方法(GET、POST等)、状态码、头信息和...

    head_first_scwcd.pdf

    4. **JSP自定义标签**:除了JSTL,开发者还可以创建自己的标签库来重用代码和提高可读性。书中会讲解如何创建和使用自定义标签库。 5. **HTTP协议**:理解HTTP协议对于Web开发至关重要。书中会介绍HTTP方法(GET、...

    SUN公司的SCWCD的最新题库

    8. **JSP自定义标签**:学习如何创建和使用自定义JSP标签,这有助于代码复用和提高可维护性。 9. **Web容器**:了解Tomcat、Jetty等Web容器的工作原理,它们是如何加载和管理Servlet的。 10. **Web应用部署描述符*...

    SCWCD 310-081 完整题库

    6. **JSTL (JavaServer Pages Standard Tag Library)**: JSTL提供了一套标准标签库,帮助开发者更方便地处理常见任务,如迭代、条件语句、XML处理等,以减少脚本代码的使用。 7. **Servlet容器**:如Tomcat, ...

    scwcd相关的文档

    这个`&lt;taglib&gt;`元素定义了标签库的名称和位置,使得JSP容器能够找到并解析自定义标签。 在SCWCD认证考试中,考生需要熟悉上述概念以及更多相关技术,如Servlet生命周期、请求处理、会话管理、错误处理、JSP动作、...

Global site tag (gtag.js) - Google Analytics