`
heimuad
  • 浏览: 297453 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

JSP中自定义标记符的使用zz

阅读更多
JSP中自定义标记符的使用
时间:2007-04-05 阅读:13 类型:转载 编辑:fly   

摘要
   在JSP中有一种机制,可以让你在JSP页面中插入与HTML类似的标记。本文介绍JSP定制标记的基本概念和构成,以及如何开发和应用JSP定制标记。

 关键字
JSP,XML,TLD,标记符

什么是标记
使用HTML语言我们可以这样去编辑我们的网页:

  

    

 

       

       

HELLO WORLD

 

 

在这里我们把,

      

      

        <tagclass:login height="100" width="200"></tagclass:login>

          

      

 

在上例中就是一个JSP定制标记符。widtht、height是这个标记的属性。<!---->是一个标记库定义指令,在稍后我们将会讨论。在JSP中定制标记符,实质上就是以标记的形式封装了一个俱有独立功能的Java类。标记的使用减少了直接嵌入JSP页面的Java代码,方便了页面的布局,并且有利于代码的复用,提高了开发的效率。

JSP服务器解析标记的过程
那么当一个标记被嵌入JSP页面后,JSP服务器是如何对这个标记进行解析的呢?各对象的含义如下所示:

Client:   表示客户端。

JSP-Server:JSP服务器。

JSP-Page:JSP页面。

TLD:   标记库描述文件,定义标记和标记的各种属性和处理文件等。

TagClass   标记处理程序

当一个用户访问一个JSP页面时,这个请求被发送到JSP服务器,JSP服务器会根据这个请求去调用相应的页面,如果这个页面中有自定义的标记, JSP服务就会根据页面指令

例子
<!---->

 

      

          

      

      

        <tagclass:login height="100" width="200"></tagclass:login>

          

      

 

描述

<!---->指令声明此JSP文件使用了自定义的标记,同时引用标记库,

也指定了他们的标记的前缀。 你必须在使用自定义标记之前使用<!---->指令。

属性

uri="URIToTagLibrary" :Uniform Resource Identifier (URI)根据标记的前缀对自定义的标记进行唯一的命名,URI可以是一个相对或绝对的路径。
  prefix="tagPrefix":在自定义标记之前的前缀。如上例中的

标记符的处理程序(Tag handle)
我们还是以一个例子来看下如何实现一个Tag handle。首先是看一下它的类图:

让我们再看一下它的代码:

package  tagclass.login;

import javax.servlet.jsp.tagext.TagSupport;

import javax.servlet.jsp.*;

import java.io.*;

public class login extends TagSupport

{

      public login()

     {

             super();

      }

      public int doStartTag() throws JspTagException

     {

                JspWriter out = pageContext.getOut();

                try

                {

                        out.println("<applet codebase="applet/login/" height="100" width="200" code="login.class"></applet>");

}

                catch(Exception e)

                {

 

                }

             return SKIP_BODY;

}

publicc int doEndTag()throws JsptagException

{

     return EVAL_PAGE;

}

       public void release()

       {

                 super.release();

       }

      public void setWidth(String language)

      {

             this.width = width;

      }

      public String getWidth()

      {

             return this.width;

      }

      public void setHeight(String height)

      {

          this.height=height;

      }

      public String getHeight()

      {

          return this.height;

      }

      private String width;

      private String height;

 }

从以上我们可以看出,实现一个简单的标记符处理程序有几个要求:①增加一个类,使之继承 java.Servlet.jsp.tagext.TagSupport类。这个类提供了java.Servlet.jsp.tagext.Tag接口所要求的所有的方法。另外,还需要使用一些基本的API,使JSP容器能够调用我们自己提供的标记符处理程序。②必须为每个标记符属性分别创建一个 get<attribute></attribute>和set<attribute></attribute>方法,JSP容器需要使用这些方法处理程序传递参数。③要为标记符处理程序创建一个构造器和自毁器。JSP需要使用构造器启动处理程序。自毁器是在realease()方法中定义的。在处理程序的生命周期结束时,需要调用自毁器释放所占用的资源。④创建两个名为doStartTag()和doEndTag()的方法,执行具体的处理和输出动作。这两个方法是在处理自定义标记符的起始位置和结束位置调用的。它们的返回值是在Tag Interface里定义的静态int,这几个静态值分别是:

SKIP_BODY隐含0  :跳过了开始和结束标签之间的代码。

EVAL_BODY_INCLUDE隐含1:将body的内容输出到存在的输出流中

SKIP_PAGE隐含5 : 忽略剩下的页面。

EVAL_PAGE隐含6:继续执行下面的页

  当然标记符也有它自己的缺点。很不方便的封装过程,有限的功能。对于一些不太复杂和功能单一的逻辑描述,需要传递的参数要求不高时,使用JSP标记,要方便的多。对于大多数的商业逻辑应用,还是使用bean要好的多,也宜于servlet控制。

附录:文章中所用示例的完整代码
JSP代码:login.jsp
<!---->

 

    

          

    

    

           <tagclass:login height="100" width="200"></tagclass:login>

          

    

 

标记符描述库:taglib.tld
<!---->

<!---->

      PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"

     "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">

<taglib></taglib>

  <tlibversion></tlibversion>1.0

  <jspversion></jspversion>1.1

 <shortname></shortname>tagclass

  <tag></tag>

     <name></name>login

<tagclass></tagclass>

tagclass.login.login

 

     <info></info>

    

<attribute></attribute>

          <name></name>height

          <required></required>true

          <rtexprvalue></rtexprvalue>true

      

<attribute></attribute>

          <name></name>width

          <required></required>true

          <rtexprvalue></rtexprvalue>true

      

   

 

标记符处理程序:login.java
package  tagclass.login;

import javax.servlet.jsp.tagext.TagSupport;

import javax.servlet.jsp.*;

import java.io.*;

public class login extends TagSupport

{

      public login()

     {

             super();

      }

      public int doStartTag() throws JspTagException

     {

                JspWriter out = pageContext.getOut();

                try

                {

                        out.println("<applet codebase="applet/login/" height="100" width="200" code="login.class"></applet>");

}

                catch(Exception e)

                {

 

                }

             return SKIP_BODY;

}

publicc int doEndTag()throws JsptagException

{

     return EVAL_PAGE;

}

       public void release()

       {

                 super.release();

       }

      public void setWidth(String language)

      {

             this.width = width;

      }

      public String getWidth()

      {

             return this.width;

      }

      public void setHeight(String height)

      {

          this.height=height;

      }

      public String getHeight()

      {

          return this.height;

      }

      private String width;

      private String height;

 }

标记符处理程序中所使用的Applet : login.java
import java.awt.*;

import java.awt.event.*;

import java.applet.*;

public class login extends Applet implements ActionListener

{

    private String s_username;

    private String s_userpassword;

    private Button b_ok;

    private Button b_register;

    private Label l_username;

    private Label l_userpassword;

    private TextField t_username;

    private TextField t_userpassword;

    private GridLayout g_gridlayout;

    public void init()

    {

       b_ok=new Button("ok");

       b_register=new Button("register");

       l_username= new Label("name");

       l_userpassword=new Label("password");

       t_username=new TextField();

       t_userpassword=new TextField();

       b_ok.addActionListener(this);

       b_register.addActionListener(this);

       g_gridlayout=new GridLayout(3,2,10,10);

       this.setLayout(g_gridlayout);

                //this.setBackground(Color.blue);

                add(l_username);

                add(t_username);

       add(l_userpassword);

       add(t_userpassword);

       add(b_ok);

       add(b_register);

    }

    public void actionPerformed(ActionEvent ev)

    {

           String s_label=ev.getActionCommand();

           if (s_label.equals("ok"))

           {

                 t_username.setText("name");

           }

           if (s_label.equals("register"))

           {

                 t_userpassword.setText("password");

           }

    }

    public void paint(Graphics g)

    {

     }

}

分享到:
评论

相关推荐

    JSP之自定义标记示例程序

    3. **在JSP页面中使用自定义标记**:在JSP文件中,通过`&lt;%@ taglib %&gt;`指令引入TLD,然后就可以像使用普通HTML标签一样使用自定义标记了。 ```jsp ``` 4. **运行与测试**:最后,将JSP文件部署到支持JSP的应用...

    ppt课件-第6章 JSP自定义标记.zip

    - **在JSP中使用**:最后,在JSP页面上,通过`&lt;%@ taglib %&gt;`指令引入标签库,并使用自定义标记。 ### 4. 自定义标记的属性和事件 - **属性**:自定义标记可以有零个或多个属性,这些属性在JSP页面中通过标记的...

    JSP自定义标记

    在JSP页面中,我们可以通过URI引用TLD文件,然后像使用标准JSP标记一样使用自定义标记。 ```jsp 张三" /&gt; ``` 四、自定义标记的优势 1. **重用性**:自定义标记可以封装常见的功能,提高代码的重用性。 2. **易...

    第6章 JSP自定义标记.ppt

    【JSP自定义标记】是Java EE编程技术中用于扩展JSP标准动作的重要特性,它允许开发者创建符合特定应用场景的自定义标签,以提高代码的可读性和维护性。自定义标记以XML的形式表达,使得业务逻辑可以通过标签文档化的...

    jsp使用自定义标签taglib分页系列——完整例子

    jsp使用自定义标签taglib分页系列——完整例子

    jsp 自定义标签的使用

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

    jsp中自定义标签的使用

    本资源包含的是一个关于在JSP中使用自定义标签的源代码示例,对于理解和实践这一技术具有很高的实用性。 自定义标签的核心概念包括以下几点: 1. **标签库定义(TLD, Tag Library Descriptor)**:TLD 是一个XML...

    JSP自定义标签之自动完成框

    自定义标签的实现通常涉及三个主要部分:标签库描述符(TLD)、标签处理类(Tag Handler Class)以及实际的JSP页面中的标签使用。 1. **标签库描述符(TLD)**: TLD是一个XML文件,它定义了自定义标签的元数据,...

    在JSP中使用嵌套的自定义标记 (2002年)

    Java Server Page(JSP)是近几年发展起来的用于生成动态...提出了通过标记处理类可以解决嵌套的自定义标记中父标记如何完全包含子标记的问题,并以IF-ELSE-THEN形式的标记为例子,成功解决了在JSP中使用嵌套的自定义标记

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

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

    自定义标记实现银行系统的数字大小写转换

    在实际应用中,这个自定义标记可以方便地嵌入到JSP页面中,通过简单的标签语法就能完成数字转换。例如: ```jsp ``` 这行代码会将数字1234567890转换为银行格式的汉字数字,并显示在页面上。 通过这种方式,自定义...

    JSP EL 自定义函数

    最后,在JSP页面中使用这个自定义函数: ```jsp ${mathUtils:addNumbers(5, 7)} ``` 这将在页面上输出12。 通过自定义EL函数,你可以充分利用JSP EL的简洁性和强大性,同时保持代码的模块化和可维护性。在实际项目...

    JSP自定义标签学习笔记

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

    jsp中自定义Taglib详解

    为了在JSP页面中使用自定义标签,我们需要完成以下步骤: 1. 创建自定义标签类并实现所需逻辑。 2. 编写TLD文件,定义标签库及其标签。 3. 将TLD文件放入Web应用的`WEB-INF`目录下。 4. 在JSP页面中引入标签库,使用...

    JSP自定义标记(四则运算)

    这是个实现ComputeSimpleTag标记的文件,该标记可以实现两个数字的加减乘除。自定义为,然后再输入两个数字就可以实现

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

    3. **在JSP页面中使用**:在JSP页面顶部引入TLD文件,然后在页面中使用自定义标签。 ```jsp ``` 在这个例子中,`Demo1_JspTag`项目包含了一个简单的自定义标签实现,通过`myTag`标签,我们可以看到如何将Java代码...

    jsp自定义带属性的标签

    6. **在JSP页面中使用自定义标签**:最后,在JSP页面中使用`&lt;%@ taglib %&gt;`指令导入标签库,并使用前缀加上标签名称来调用自定义标签。在调用标签时,可以通过类似HTML属性的方式设置标签的属性值。 #### 三、示例...

    jsp 自定义标签实例

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

    jsp中自定义标签用法实例分析

    1. **代码重用**:自定义标签可以封装常用的业务逻辑,当需要在多个JSP页面中使用这些业务逻辑时,只需要调用相应的标签即可。 2. **页面清晰**:将业务逻辑从JSP页面中分离出来,使得JSP页面更加简洁,主要关注于...

Global site tag (gtag.js) - Google Analytics