zoukankan      html  css  js  c++  java
  • JSTL学习(二)自定义标签库

    JSTL自带的标签功能非常强大,但是仅仅有这些标签并不能完全满足实际开发中的需要,必要的时候我们可以自己动手写自己的标签,甚至于构建自己的标签库。

    开发自定义标签,首先需要开发标签所对应的类,其次要编写标签的描述文件tld,并把这个文件放在WEB-INFO目录下(其实可以放在别的目录下,只不过需要在Web.xml中配置而已,为了方便使用我们一般默认放在WEB-INF目录下)。最后在JSP页面上标记tld文件的位置,根据tld文件中的描述进而找到处理标签的类。

    一幅图胜过千言万语

    下面的这个例子就是使用自定义的标签实现在页面上输出当前时间。具体实现代码如下

    标签处理类:

    package taglibs;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.PageContext;
    import javax.servlet.jsp.tagext.Tag;
    
    public class DateTag implements Tag {
    	
    	private PageContext pageContext;
    	private Tag tag;
    	
    	@Override
    	public int doEndTag() throws JspException {
    		try{
    			Date date=new Date();
    			SimpleDateFormat dateFormater=new SimpleDateFormat("yyyy年MM月dd日");
    			pageContext.getOut().print(dateFormater.format(date));
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    		return Tag.EVAL_PAGE;
    	}
    
    	@Override
    	public int doStartTag() throws JspException {
    		return Tag.SKIP_BODY;
    	}
    
    	@Override
    	public Tag getParent() {
    		return null;
    	}
    
    	@Override
    	public void release() {
    
    	}
    
    	@Override
    	public void setPageContext(PageContext pageContext) {
    		this.pageContext=pageContext;
    	}
    
    	@Override
    	public void setParent(Tag parent) {
    		this.tag=parent;
    	}
    }

    代码解析:

    上面的这个DateTag类实现了Tag接口,如果需要处理正文内容,即要处理开始标签和结束标签之间的内容的时候,需要实现BodyTag接口。在这个例子中我们仅仅是输出当前的时间没有处理正文内容,所以选择实现Tag接口。

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

    标签库描述文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd" >
    <taglib>
      <tlib-version>1.0</tlib-version>
      <jsp-version>1.2</jsp-version>
      <short-name>dateTagExample</short-name>
      <uri>/mytags</uri>
      <tag>
        <name>date</name>
        <tag-class>taglibs.DateTag</tag-class>
        <body-content>empty</body-content>
      </tag>
    </taglib>
    


    代码解析:

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

    第4行指明了标签库的版本为1.0

    第5行指明了这个标签库要求的JSP版本为1.2

    第6行为这个标签起了一个描述性的名字(后面调用的时候不需要)。

    第7行定义了唯一标识这个标签库的URI/mytags

    第8~12行描述了这个标签库中的一个标签,其中标签的名字是date,也就是在JSP页面上的访问名称为date;这个标签的功能处理类为taglibs.DateTag,而且在这里规定这个标签没有正文内容,即在开始标签和结束标签中间不能包含其他内容。这里仅仅是描述了一个标签,如果要描述多个标签可以增加<tag>结点即可。

    测试页面:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="mytags" uri="/WEB-INF/datetag.tld" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>自定义标签示例</title>
    </head>
    <body>
    	<font size="2">
    		下面是使用自定义标签输出的内容:<br>
    		<mytags:date/>
    	</font>
    </body>
    </html>

    代码解析:

    上面这个标签库的描述文件需要放置在当前应用项目的WEB-INF文件夹下,然后就可以通过上面第行代码使用这个标签库。在第行中指明了对标签库的引用,其中uri指明了标签库描述文件的位置为/WEB-INF/datetag.tldprefix指明了访问这个标签库的前缀。

    第3行中<mytags:date/>引用了标签库中date标签,运行效果如下图

    显示效果:

    原创文章,转载请注明出处:http://www.cnblogs.com/beijiguangyong/
  • 相关阅读:
    启动控制面板命令大全
    C#下载网页为mht文件
    基于C#语言的可编程表达式计算器设计
    FileSystemWatcher监视文件变动
    C#梁朝伟变刘德华之山寨实现
    Json之语法,格式
    Regex类
    C# 索引器
    优化正则表达式的诀窍
    正则表达式(二) 零宽断言与懒惰匹配以及平衡组
  • 原文地址:https://www.cnblogs.com/beijiguangyong/p/2847141.html
Copyright © 2011-2022 走看看