• JSTL自定义标签(三)


            上篇讲解的是JSTL常用的核心标签,本篇介绍JSTL自定义标签的使用。还记得在学js的时候,我们学习了JQuery框架,同时学习了构造自己的js库,再去调用自己的js库,这就如同根据自己的需要些一个内聚性强的函数一样,我们创建一个函数后,再去调用这个函数。在学习J2ee规范JSTL标签这一节的时候,同样我们可以根据自己的需要构造自己的标签库,再去使用自己定义的这个标签。

           JSTL自带的标签功能时非常强大的,但是不能完全满足我们的需要,开发标签首先是需要开发标签对应的功能类,就和写函数一样,这个函数是什么功能的呢?其次,编写描述标签的tld,并把这个文件放到web-inf/目录下,才能在jsp页面上调用自定义的标签。

           自定义标签示例:

           我们编写自定义标签需要三个步骤:

     

     

     

    1、标签的功能处理程序

           java源代码:

    1. package taglibs;  
    2.   
    3. import java.io.IOException;  
    4. import java.text.SimpleDateFormat;  
    5. import java.util.Date;  
    6.   
    7. import javax.servlet.jsp.JspException;  
    8. import javax.servlet.jsp.PageContext;  
    9. import javax.servlet.jsp.tagext.Tag;  
    10.   
    11. public class DateTag implements Tag {  
    12.       
    13.     private PageContext pageContext;  
    14.     private Tag tag;  
    15.   
    16.     /** 
    17.      * 标签初始化功能。 
    18.      */  
    19.     public int doEndTag() throws JspException {  
    20.         try  
    21.         {  
    22.             //定义日期。  
    23.             Date date = new Date();  
    24.             //日期格式  
    25.             SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy年MM月dd日");  
    26.             pageContext.getOut().print(dateFormater.format(date));  
    27.               
    28.         }catch(IOException e)  
    29.         {  
    30.             e.printStackTrace();  
    31.         }  
    32.           
    33.         return Tag.EVAL_PAGE;  
    34.     }  
    35.   
    36.     /** 
    37.      * 标签开始 
    38.      */  
    39.     public int doStartTag() throws JspException {  
    40.         return Tag.SKIP_BODY;  
    41.     }  
    42.   
    43.     public Tag getParent() {  
    44.           
    45.         return null;  
    46.     }  
    47.   
    48.     public void release() {  
    49.           
    50.   
    51.     }  
    52.   
    53.     public void setPageContext(PageContext arg0) {  
    54.         this.pageContext = arg0;  
    55.   
    56.     }  
    57.   
    58.     public void setParent(Tag arg0) {  
    59.         this.tag = arg0;  
    60.   
    61.     }  
    62.   
    63. }  

           上述程序段说明:

           我们自己定义的DateTag标签实现了Tag接口,如果需要处理正文的内容,即需要处理开始标签和结束标签之间的内容的时候,需要实现BodyTag接口,我们在这里不需要处理正文内容,所以选择实现Tag接口即可。

    因为这里要实现的标签不对正文内容处理,所以只需要实现doEndTag方法即可,在这个方法中取出当前系统时间,并指定格式输出。

    2 、标签描述文件tld文件

           标签处理功能开发完成之后,需要对标签库进行配置,也就是配置对标签功能实现类的引用,JSP引擎会根据页面中的标签引用找到对应的标签配置文件,然后根据配置文件找到实现标签功能的java类,从而调用其中的功能。

           在eclipse中选择新建文件,选择新建tld类型的文件,会有如下如所示:

     

     

           其中包括我们.tld文件名 Name:datetag,文件的版本号 version:1.2,标签库的版本 Tlibversion:1.0,标签库要求的JSP版本为1.2,理解标签库描述性名字ShortName,URI唯一标识该标签库的URI为/mytags。我们代码如下所示:

     

     

    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"  
    3.                         "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">  
    4. <taglib>  
    5.  <tlib-version>1.0</tlib-version>  
    6.  <jsp-version>1.2</jsp-version>  
    7.  <short-name>dateTagExample</short-name>  
    8.  <uri>/mytags</uri>  
    9.    
    10.  <tag>  
    11.     <name>date</name>  
    12.     <tag-class>taglibs.DateTag</tag-class>  
    13.     <body-content>empty</body-content>  
    14.  </tag>  
    15. </taglib>  


     

           <tag></tag> 描述了标签库中的一个标签,其中标签的名字是date,也就是在JSP页面上访问的名字为date;这个标签的功能处理类为taglibs.DateTag,<body-content></body-content>表明这个标签没有正文内容,即在开始标签和结束标签不能包含其他内容。

     

           在一个标签库中,可以包括一组标签,也可以只描述一个标签,一般情况下,都是把一组功能类似标签放置在一个标签库中,可以包括一组标签也可以只描述一个标签,一般情况下都是一组功能类似的标签放置在一个标签库中,用一个描述文件,只要增加<tag></tag>节点就可以了。

     

    3、在JSP中调用这个标签

     

     

           首先把这个描述文件. tld 放到web-inf文件夹下,然后在JSP页面中使用这个标签库:

           <%@  taglib   uri="/web-inf/datetag.tld"       prefix="mytags"          %>

           代码如下所示:

    1. <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>  
    2. <%@ taglib uri="/WEB-INF/datetag.tld" prefix="mytags" %>  
    3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
    4. <html>  
    5.   <head>  
    6.     自定义标签示例<br>  
    7.   </head>  
    8.     
    9.   <body>  
    10.     <font size="3">  
    11.     使用自定义标签输出日期:  
    12.     <mytags:date/>  
    13.     </font>  
    14.   </body>  
    15. </html>  


     

           调用结果显示图:

     

     

     

    4、JSP页面不使用标签和使用标签的执行过程

           如下图所示:

     

     

     

     


            这样终于理解了JSTL,就是把JSP页面上嵌入的java代码穿上一层外衣,但这个“外衣”不用进行编译就可以直接在浏览器上运行,更加接近于界面制作显示的要求,原来J2EE的这个JSTL规范是在解耦,如此让系统的扩展性和可维护性更强了。

     

     

  • 相关阅读:
    Introduction to Machine Learning
    IEEE 802.3 Ethernet
    Introduction to Computer Networks(网络架构与七层参考模式)
    Integral类型的跨平台使用
    Aggregate类型以及值初始化
    合成的默认构造函数定义为delete的一种情况(针对C++11标准)
    版本控制工具Git
    编程实现计算器
    Linux客户/服务器程序设计范式2——并发服务器(进程池)
    Linux客户/服务器程序设计范式1——并发服务器(多进程)
  • 原文地址:https://www.cnblogs.com/lingyi1111/p/4461654.html
Copyright © 2020-2023  润新知