我们都知道,通过使用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>
将其部署一下,然后运行一下看看结果。
分享到:
相关推荐
2. **TILES定制标记库** TILES是一个流行的JSP标签库,它提供了一套用于构建可复用和模块化的页面布局的定制标记。TILES的核心概念是定义和插入“tiles”,即页面的各个部分。 - **INSERT标记**:INSERT标记用于...
这篇博客文章“将定制标签库开发为标记文件”深入探讨了如何创建自己的标签库,并将其转化为标记文件,以便在JSP页面中方便地使用。以下是对这一主题的详细阐述: 首先,我们来理解什么是自定义标签库。在Java Web...
在传统的JSP开发中,开发者通常需要编写大量的Java脚本来处理页面逻辑,而Struts标记库则通过提供一系列定制化的标签来实现这一目的,从而提高了代码的可读性和可维护性。 Struts标记库分为几个主要部分: 1. **...
在IT行业中,定制标签库是一种常见的实践,尤其是在Web开发领域,它允许开发者根据特定项目或应用的需求创建自定义的功能和行为。"定制标签库"这个标题暗示了我们将在讨论如何构建和使用这样的库,以便更好地控制和...
6. **API接口**:作为一个软件库,AccuTag通常会提供API接口,让开发者能够轻松地将标记跟踪功能集成到自己的应用程序中,创建各种AR应用。 7. **多标记支持**:AccuTag可能支持同时跟踪多个不同的标记,这样用户就...
【描述】描述中的“基于Java的实例源码”表明这个AccuTag库是一个可编程的工具,开发者可以下载并研究其源代码,理解其工作原理,甚至根据自己的需求进行定制和扩展。增强现实标记跟踪是AR技术的关键组成部分,通过...
AccuTag是一款基于Java开发的增强现实(AR)标记跟踪软件库,专为开发者提供高效、精准的标记识别和跟踪功能。在AR技术中,标记是实现虚拟与现实世界交互的关键元素,它们可以是二维条形码、二维码或特定图案,通过...
此外,测试用例可以使用装饰器来标记和定制,如`@pytest.mark.wpsplus`和`@allure.title`,分别用于添加自定义标记和测试用例标题。 在实际的测试用例编写中,如`test_getdeptusers01`,可以使用with语句和allure....
- **扩展性**:通过添加新的标记库,可以轻松扩展JSP应用的功能。 通过学习和实践JSP自定义标记,开发者可以构建出更高效、更可维护的Web应用。同时,了解和掌握自定义标记也是成为熟练JSP开发者的必经之路。
标题中的“一个VB编写的PDF浏览器”指的是使用Visual Basic(VB)编程语言开发的一款应用程序,它的主要功能是浏览PDF(Portable Document Format)文件。PDF浏览器是用于查看、阅读和打印PDF文档的软件工具,通常...
Eclipse IDE是一个强大且可扩展的开发环境,而通过集成Python,我们可以创建适合自己需求的定制化版本。本文主要介绍如何利用Python和Eclipse的扩展框架EASE来实现这一目标,使得无需编写Java代码也能实现自定义功能...
总之,创建一个自定义的日志库不仅可以提高代码的可读性和调试效率,还可以根据项目需求进行定制化,满足特定的格式和功能要求。通过学习和理解`luckylog`的实现方式,开发者可以进一步提升自己的Python编程技巧,...
3. **EXTTLD**:EXTTLD文件是EXTJS扩展标记库的描述文件,它定义了EXTJS JSP标签的属性、事件、默认值等。开发者可以通过EXTTLD文件定制EXTJS标签的行为,比如添加新的属性、扩展已有标签的功能。 4. **使用与集成*...
此外,Raneto还支持自定义主题,让你可以根据自己的品牌或喜好定制界面。 **四、Markdown的优点** 1. **简洁性**:Markdown语法简单直观,学习曲线低,使得任何人都能快速上手编写文档。 2. **可读性**:Markdown...
要运行这个示例代码,你需要执行以下步骤: 确保已经安装了 OpenCV,并且将其库添加到 Java 项目的类路径中。...请注意,这只是一个简单的示例,你可以根据自己的需求和应用场景进行更多的定制和改进。
这个库支持XML配置,意味着开发者无需编写大量代码就能实现界面的定制,降低了开发难度,提高了开发效率。 【标签】:“UI” “UI”标签表明了这个项目专注于用户界面的设计和实现,适用于那些需要快速搭建或优化...
"Flash-Md"可能是其中一个这样的库,可能提供了额外的功能,比如动画效果、交互性或者其他定制化选项,使得Markdown的渲染更加生动和吸引人。 在使用这个库之前,开发者首先需要解压"Flash-Md_main.zip",里面可能...
通过研究这些内容,你可以更深入地了解库的内部实现,并根据自己的项目需求进行定制。记得查看 README 文件,它通常会提供安装、配置和使用库的说明。 总之,乐高(Lexgo)库为 Go 开发者提供了一个强大的工具,...
Markdown是一种轻量级的标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML(超文本标记语言)文档。在IT行业中,Markdown因其简洁和直观的语法,被广泛用于编写代码注释、文档、博客...