深入体验JavaWeb开发内幕——简述JSP中的自定义标签叫你快速学会

 

        自定义标签,顾名思义,就是自己定义的标签。那么我们为什么要自己定义一些标签呢?

我们知道,如果要在JSP中获取数据我们可以采用通过JSP的隐式对象request来获取相应的请求参数或者属性,也可以通过脚本<%  Java  代码%>来进行相应的处理,当然还可以使用EL表达式进行相关数据的操作。

         这里,我们主要来谈一下在JSP中使用自定义标签。那么我们为什么要自定义一些标签呢?我们知道,JSP中标签的使用使得Web应用的显示层与业务逻辑层分开。在JSP使用标签,可以移除JSP中的java代码使得JSP页面更加的整洁和便于维护。然而,在JSP中定义的一些标签又是有限的或者是我们所不需要的,这时,我们就可以同过自定义标签的形式将相应的操作封装在标签中,只需在JSP中调用相应的标签即可。这样就简化了我们的JSP页面也便于页面操作人员维护了。下面,我们就来了解一下自定义标签、如何定义自己的标签,以及在JSP中如何引用自己定义的标签。

 

 一、自定义JSP标签概述

 

        自定义JSP标签就是程序员定义的一种JSP标签,这种标签把那些信息显示逻辑封装在一个单独的Java类中,通过一个XML文件来描述它的使用。当页面中需要使用类似的显示逻辑时,就可以在页面中插入这个标签,从而完成相应的功能。

 

       使用自定义标签,可以分离程序逻辑和表示逻辑,将Java代码从HTML中剥离,便于美工维护页面;自定义标签也提供了可重用的功能组件,能够提高工程的开发效率。

 

自定义标签主要用于移除Jsp页面中的java代码。

 

二、自定义JSP标签的执行过程

 

         当一个含有自定义标签的JSP页面被JSP引擎(Web容器)转译成Servlet时,JSP引擎遇到自定义的标签,会把这个自定义标签转化成对一个称为“标签处理类”的调用。之后,当这个JSP页面被执行时,JSP引擎就会调用这个“标签处理类”对象,并执行其内部定义的相应操作方法,从而完成相应的功能。

   

 
 

    三、自定义JSP标签的开发流程

 

           使用Java处理类来开发自定义JSP标签时,主要分为下几个步骤:

创建标签的处理类(Tag Handle Class)。这个类实现Tag接口,用来定义标签的行为,并在JSP引擎遇到自定义标签时调用执行。

 

     创建标签库描述(tld)文件(Tag Library Descriptor File),在tld文件中对标签处理器类进行描述。

 

       在JSP文件中用taglib指令引入标签库,然后使用标签库描述文件中指定的标签名来使用它。

 

四、创建标签的处理类、创建标签库描述文件、用taglib指令引入标签库

      

      1. 创建标签的处理类

  

         要想定义自己的标签,必须要定义一个实现了Tag接口或是继承实现了改接口的子类的类(这里,我们主要通过继承实现了Tag接口的TagSupport类来介绍),然后把相应的操作封在相应的方法中即可。

     例:

    import javax.servlet.jsp.JspException;

import javax.servlet.jsp.tagext.TagSupport;

publicclass CustomTagIP extends TagSupport {

}

2. 创建标签库描述文件

            定义标签库文件其实就是定义一个用于描述标签处理类和JSP文件之间关系的一个扩展名为”.tld”的文件。标签库描述符文件是一个以“.tld”结尾的标准XML文档,用来记录一个标签库内拥有哪些标签、每个标签包含哪些属性等。

 

注:这个 ”.tld”文件一定要放在WEB-INF文件夹下否则在JSP解析引擎将JSP文件解析成Servlet时会因所要解析的自定义标签找不到对应的标签处理类而导致该处理类无法被加载而产生错误。

 

 例:

<?xml version="1.0" encoding="UTF-8"?>

//XML声明

 

<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/j2eehttp://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"

version="2.0">

    //指明改文件中所使用的标签的名称空间以及其//约束文件所在的具体位置<taglib>为改文件的根标签

<description>A tag library exercising SimpleTag handlers.</description>

//这是<description>:标签库的一个文本描述

<tlib-version>1.0</tlib-version>

//<tlib-version>:指定标签库的版本为1.0

<short-name>lijizh</short-name>

//<short-name>:为标签定义简短的名字,在taglib

//指令中可作为首选的前缀名使用。

<uri>http://www.hbsi.com</uri>

//<uri>:定义一个URI,用于唯一的标识此标签库。(可根据需要自定义)

<tag>

//<tag>:用于指定自定义标签的相关信息。

 

   <description>OutputsHello, World</description>

        <name>H</name>

      //<name>紧跟在前缀明后的标签名<lijizh:H>

   <tag-class>www.hbsi.web.tag.CustomTagIP</tag-class>

//<tag-class>指明创建标签处理类的具体位置

 

   <body-content>empty</body-content>

//<body-content>指明自定义标签体的内容的类型具体可/

 

//为:EMPTY JSP  scriptless  tagdepentend

 

    </tag>//结束标签

  </taglib>

还有一些其他的标签的介绍:

 

<display-name>:为标签库指定一个简短的别名。

 

<small-icon>:为标签库指定大小为16×16的小图标(gif或jpeg格式),该图标可在图形界面工具中显示。

 

<large-icon>:为标签库指定大小为32×32的大图标(gif或jpeg格式),该图标可在图形界面工具中显示。

 

<validator>:为标签库提供一个验证器。

 

<listener>:为标签库提供一个监听器。

 

<tag-file>:用于描述标签文件。

 

<function>:用于指定在表达式语言中使用的函数

3. 用taglib指令引入标签库

     虽然在上面已经定义好了标签处理类和相应的库描述文件但是要想在JSP中使用自定义标签还需要使用JSP中的指令原素进行引用才可使用。

例:

<%@ page language="java"import="java.util.*" pageEncoding="UTF-8"%>

<%@ taglib uri="http://www.hbsi.com"prefix="lijizh" %>

<html> 

  <body>

    <lijizh:H>

    SKIP_PAGE

    This is my JSPpage. <br>

    </lijizh:H>

    aaaaaaaa<br/>

  </body>

</html>

再综合来看一个具体的实例:

  使用标签输出客户机IP

1、       标签处理类:

   package www.hbsi.web.tag;

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.JspWriter;

import javax.servlet.jsp.tagext.TagSupport;

 

publicclass CustomTagIP extends TagSupport {

 

   @Override

   publicint doStartTag() throwsJspException {

     HttpServletRequest request =(HttpServletRequest) this.pageContext.getRequest();

//同过this.pageContext获取一个PageContext类型的对象

//通过该对象可以调用其他八大隐式对象

        JspWriter out = this.pageContext.getOut();

     try {

        out.println(request.getRemoteAddr());

     } catch(IOException e) {

        thrownew RuntimeException(e);

     }

     returnthis.EVAL_BODY_INCLUDE;

// doStartTag()根据这个返回值来进一步确定是否显示

//标签体中的内容。其中,returnthis.SKIP_BODY;忽略标签体中的内容不执行;returnthis.EVAL_BODY_INCLUDE;显示标签体中的内容。

   }

}

2.定义标签描述库

  <?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/j2eehttp://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"

    version="2.0">

    <description>A taglibrary exercising SimpleTag handlers.</description>

    <tlib-version>1.0</tlib-version>

    <short-name>lijizh</short-name>

    <uri>http://www.hbsi.com</uri>

    <tag>

   <description>index.jsp</description>

        <name>H</name>

   <tag-class>www.hbsi.web.tag.CustomTagIP</tag-class>

   <body-content>empty</body-content>

    </tag>

  </taglib>

  3.JSP文件中引用自定义标签

   <%@ pagelanguage="java" import="java.util.*"pageEncoding="UTF-8"%>

<%@ taglib uri="http://www.hbsi.com"prefix="lijizh" %>

  <html>

  <body>

    您当前的IP地址是<br>

    <lijizh:H/>

  </body>

</html>

  效果如图:

  

         这样你就可以在JSP中使用自定义标签来封装自己的Java代码了。自己试一试吧!


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JSP(JavaServer Pages)是一种服务器端的动态网页开发技术,它可以将 Java 代码嵌入 HTML 页面,从而实现动态网页的生成。 JSP 的基本原理是将 JSP 页面翻译成 Servlet,在服务器端执行 Servlet 代码,再将执行结果返回给客户端。因此,我们在使用 JSP 开发网页时,需要先了解 Servlet 的相关知识。 JSP 的语法基本上就是 HTML 标签加上 Java 代码。以下是一些基本的 JSP 标签: 1. <% ... %>:嵌入 Java 代码,可以用于定义变量、写循环、判断语句等。 2. <%= ... %>:输出 Java 代码的执行结果。 3. <%-- ... --%>:注释,不会被翻译成 Servlet。 4. <jsp:include ... />:包含其他 JSP 页面或 HTML 页面。 5. <jsp:forward ... />:将请求转发到其他资源(JSP 页面、Servlet 或 HTML 页面)。 6. <jsp:useBean ... />:创建 JavaBean 对象。 7. <jsp:setProperty ... />:为 JavaBean 对象设置属性。 8. <jsp:getProperty ... />:取得 JavaBean 对象的属性值。 在 JSP 页面,我们还可以使用 EL 表达式和 JSTL 标签库来简化代码编写,提高开发效率。 EL(Expression Language)表达式是一种简化的表达式语言,可以用于取值、赋值、计算等操作。例如,${name} 表示取得名为 name 的变量的值。 JSTL(JavaServer Pages Standard Tag Library)是一套标签库,提供了循环、条件判断、格式化、国际化等常用功能的标签。例如,<c:forEach> 标签可以用于循环遍历集合,<c:if> 标签可以用于条件判断。 除了以上标签库,JSP 还支持自定义标签库。我们可以通过编写标签处理器来扩展 JSP 的功能。 JSP 的优点是可以将 Java 代码嵌入 HTML 页面,使得网页的开发更加灵活和方便。但是,由于 JSP 页面需要翻译成 Servlet,因此会增加服务器的负担和响应时间。此外,JSP 页面夹杂着 Java 代码,也不利于代码的维护和调试。因此,在开发大型网站时,建议使用 MVC 设计模式,将业务逻辑和视图分离,使得代码更加清晰和易于维护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值