`

编写自己的定制标记库(一)

阅读更多

我们都知道,通过使用JSP中的标记库可以减少展现层中的Java代码,使得修改、维护和阅读起来都比较方便。

<%
 String format ="yyyy-MM-dd HH:mm:ss";
 SimpleDateFormat sdf = new SimpleDateFormat(format);
 String date = sdf.format(new Date());
 out.println(date);
%>

 在未使用JSP标记库时,要书写大量的Java代码,使得页面凌乱难以维护、修改和阅读。如果使用JSP标记库,则可以简化为如下:

<util:date/>
 

显而易见,JSP标记库使Java代码书写量大大减少,功能也强大。

 

现在简单的介绍一下这个标记,“util”是标记的前缀,因为在一个JSP页面中可能会使用多个不同的标记,不同的标记库又可能

有同名的标记,为了解决标记重名的问题,所以在这里使用了“前缀标识法”,每个定制标记库都是用不同的前缀。“date”是这个标记的名称,当执行到JSP中的这行定制标记的时候,会调用对应的标记处理类中所对应的方法,输出日期信息。所以使用了定制标记库的JSP页面再转换成对应的servlet文件后,在生成的Servlet文件中会包括调用标记处理类对应的方法的Java代码。

 

下面编写一个自己定义的标记库:

学习目标:编写一个自己的标记库,了解编写定制标记库的基本步骤和方法。

1.编写标记处理类

 

/**
*计算代码段运行时间的Tag Handler类,会输出标记包含的代码段运行的时间
*/
public class TimerTag extends TagSupport {
	private static final long serialVersionUID = 1L;
	private long start;
	private long end;
	/**
         *执行到开始标记调用的方法,设定计时的起点
         */
	public int doStartTag(){
		start = System.currentTimeMillis();
		return EVAL_BODY_INCLUDE;
	}
       /**
         *执行到开始标记调用的方法,设定计时的起点
         */
	public int doEndTag()throws JspTagException{
		end = System.currentTimeMillis();
		long elapsed = end - start;
		try{
			JspWriter out = pageContext.getOut();
			out.println("running time : " + elapsed + "ms");
		}catch(IOException e){
			throw new JspTagException(e);
		}
		return EVAL_PAGE;
	}
}

 TimerTag类继承了javax.servlet.jsp.tagext.TagSupport类,重写了doStartTag()和doEndTag()方法。

  当JSP页面执行到timer标记的开始标记的时候,就会调用doStartTag()方法,给start变量赋给当前时间的数值。

 EVAL_BODY_INCLUDE,这个常量表示会运行定制标记所包含的JSP页面的内容。

 当JSP页面执行到timer标记的结束标记时,就会调用doEndTag()方法,给end变量赋表示当前时间的数值。在标记的处理类中不能像JSP页面一样直接使用JSP的out内置对象进行内容输出,而必须先通过pageContext对象的getOut()方法获得out内置对象,然后再调用out对象进行输出。同理,在标记处理类的内部,使用任何JSP内置对象,都要先通过调用pageContext()对象的对应的get方法。例如:如果要获得session对象,则可以通过getSession()方法获得。EVAL_PAGE表示这个标记之后的JSP页面内容可以继续运行。

2.编写util.tld文件

<?xml version="1.0" encoding="UTF-8"?>
<taglib 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/javaeeweb-jsptablibrary_2_1.xsd"
     version ="2.1" >
     <tlib-version>1.0</tlib-version>
     <short-name>util</short-name>
     <uri>http://crazy.com/taglib/util</uri>
     <display-name>utilitytags</display-name>
     <description>custom web utility tags</description>
     <tag>
     	<name>Timer</name>
     	<tag-class>practice.TimerTag</tag-class>
     	<body-content>JSP</body-content>
     </tag>
</taglib>

 在web项目中使用定制标记库,还需要编写定制标记的配置描述文件,该文件是一个XML文件,所以要遵守xml文件的规则。编写好了,保存到WebRoot/WEB_INF目录下。

util.tld文件时当前定制标记库的配置文件,标记库中所有的标记都要在这个文件中进行配置后才能被JSP页面中使用。

<short-name>util</short-name>

是设定这个标记库推荐使用的前缀名称。

<body-content>JSP</body-content>

设定对标记所包含的内容如何处理,可以使用JSP,empty,tagdependent和scriptlesss。设定为JSP表示所包含的内容如果是JSP内容,将会先执行JSP代码,再把执行后的结构传给标记处理类。而Scriptless表示标记所包含的内容部能是Scriptlet内容,但是可以是EL或 JSP动作等其他JSP元素;tagdependent表示对所包含的内容部做任何处理,直接将内容传给标记处理类,由标记处理类自行处理。empty表示标记不能包含内容。

3.编写一个JSP文件测试一下自己编写好的标记库。

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib prefix="util" uri="http://crazy.com/taglib/util"%>
<html>
  <head></head>
  <body>
	<util:Timer>
		<%
		for(int i =0;i<1000000;i++);
		 %>
	</util:Timer>	
  </body>
</html>
 

将其部署一下,然后运行一下看看结果。

 

1
0
分享到:
评论

相关推荐

    JSP定制标记使用手册

    2. **TILES定制标记库** TILES是一个流行的JSP标签库,它提供了一套用于构建可复用和模块化的页面布局的定制标记。TILES的核心概念是定义和插入“tiles”,即页面的各个部分。 - **INSERT标记**:INSERT标记用于...

    将定制标签库开发为标记文件

    这篇博客文章“将定制标签库开发为标记文件”深入探讨了如何创建自己的标签库,并将其转化为标记文件,以便在JSP页面中方便地使用。以下是对这一主题的详细阐述: 首先,我们来理解什么是自定义标签库。在Java Web...

    Struts标记库.chm

    在传统的JSP开发中,开发者通常需要编写大量的Java脚本来处理页面逻辑,而Struts标记库则通过提供一系列定制化的标签来实现这一目的,从而提高了代码的可读性和可维护性。 Struts标记库分为几个主要部分: 1. **...

    定制标签库

    在IT行业中,定制标签库是一种常见的实践,尤其是在Web开发领域,它允许开发者根据特定项目或应用的需求创建自定义的功能和行为。"定制标签库"这个标题暗示了我们将在讨论如何构建和使用这样的库,以便更好地控制和...

    java源码:增强现实标记跟踪软件库 AccuTag.zip

    6. **API接口**:作为一个软件库,AccuTag通常会提供API接口,让开发者能够轻松地将标记跟踪功能集成到自己的应用程序中,创建各种AR应用。 7. **多标记支持**:AccuTag可能支持同时跟踪多个不同的标记,这样用户就...

    基于Java的实例源码-增强现实标记跟踪软件库 AccuTag.zip

    【描述】描述中的“基于Java的实例源码”表明这个AccuTag库是一个可编程的工具,开发者可以下载并研究其源代码,理解其工作原理,甚至根据自己的需求进行定制和扩展。增强现实标记跟踪是AR技术的关键组成部分,通过...

    基于java的增强现实标记跟踪软件库 AccuTag.zip

    AccuTag是一款基于Java开发的增强现实(AR)标记跟踪软件库,专为开发者提供高效、精准的标记识别和跟踪功能。在AR技术中,标记是实现虚拟与现实世界交互的关键元素,它们可以是二维条形码、二维码或特定图案,通过...

    pytest定制自动化测试编写规范.pdf

    此外,测试用例可以使用装饰器来标记和定制,如`@pytest.mark.wpsplus`和`@allure.title`,分别用于添加自定义标记和测试用例标题。 在实际的测试用例编写中,如`test_getdeptusers01`,可以使用with语句和allure....

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

    - **扩展性**:通过添加新的标记库,可以轻松扩展JSP应用的功能。 通过学习和实践JSP自定义标记,开发者可以构建出更高效、更可维护的Web应用。同时,了解和掌握自定义标记也是成为熟练JSP开发者的必经之路。

    通达信公式编写教程.pdf

    条件选股公式的输出通常针对最新数据,指出当前满足条件的股票,而五彩K线公式则对历史数据进行全面扫描,通过不同颜色标记K线图中的特定形态,为投资者提供更直观的历史趋势分析。 #### 五彩K线公式编辑器探究 ...

    一个VB编写的PDF浏览器,支持中文,支持搜索、转到等简单功能,内付VB、VC++、HTMP等语言!

    标题中的“一个VB编写的PDF浏览器”指的是使用Visual Basic(VB)编程语言开发的一款应用程序,它的主要功能是浏览PDF(Portable Document Format)文件。PDF浏览器是用于查看、阅读和打印PDF文档的软件工具,通常...

    Python打造出适合自己的定制化Eclipse IDE

    Eclipse IDE是一个强大且可扩展的开发环境,而通过集成Python,我们可以创建适合自己需求的定制化版本。本文主要介绍如何利用Python和Eclipse的扩展框架EASE来实现这一目标,使得无需编写Java代码也能实现自定义功能...

    用python编写一个更好看好用的日志库(csdn)————程序.pdf

    总之,创建一个自定义的日志库不仅可以提高代码的可读性和调试效率,还可以根据项目需求进行定制化,满足特定的格式和功能要求。通过学习和理解`luckylog`的实现方式,开发者可以进一步提升自己的Python编程技巧,...

    extjs扩展标记

    3. **EXTTLD**:EXTTLD文件是EXTJS扩展标记库的描述文件,它定义了EXTJS JSP标签的属性、事件、默认值等。开发者可以通过EXTTLD文件定制EXTJS标签的行为,比如添加新的属性、扩展已有标签的功能。 4. **使用与集成*...

    Node.js-Raneto是一个开源的知识库平台它使用静态的Markdown文件来为知识库提供支持

    此外,Raneto还支持自定义主题,让你可以根据自己的品牌或喜好定制界面。 **四、Markdown的优点** 1. **简洁性**:Markdown语法简单直观,学习曲线低,使得任何人都能快速上手编写文档。 2. **可读性**:Markdown...

    用 Java 编写一个图片识别工具 在 Java 中,你可以使用开源的图像处理库例如 OpenCV 或者 JavaCV 来实现图

    要运行这个示例代码,你需要执行以下步骤: 确保已经安装了 OpenCV,并且将其库添加到 Java 项目的类路径中。...请注意,这只是一个简单的示例,你可以根据自己的需求和应用场景进行更多的定制和改进。

    一个UI简易的库

    这个库支持XML配置,意味着开发者无需编写大量代码就能实现界面的定制,降低了开发难度,提高了开发效率。 【标签】:“UI” “UI”标签表明了这个项目专注于用户界面的设计和实现,适用于那些需要快速搭建或优化...

    JavaScript_请随意使用FLASHMD,记得在分叉后标记Repo.zip

    "Flash-Md"可能是其中一个这样的库,可能提供了额外的功能,比如动画效果、交互性或者其他定制化选项,使得Markdown的渲染更加生动和吸引人。 在使用这个库之前,开发者首先需要解压"Flash-Md_main.zip",里面可能...

    lexgo:一个通用的帮助库,用于在 go 中编写自己的词法分析器

    通过研究这些内容,你可以更深入地了解库的内部实现,并根据自己的项目需求进行定制。记得查看 README 文件,它通常会提供安装、配置和使用库的说明。 总之,乐高(Lexgo)库为 Go 开发者提供了一个强大的工具,...

    Swift-MarkyMark是一个用Swift编写的Markdown解析器

    Markdown是一种轻量级的标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML(超文本标记语言)文档。在IT行业中,Markdown因其简洁和直观的语法,被广泛用于编写代码注释、文档、博客...

Global site tag (gtag.js) - Google Analytics