自定义标签的整理(新手教程)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在J2EE项目中,JSP页面常常通过在静态页面模板中嵌入scriptlets来插入动态的内容。

然而,随着复杂程序的增加,JSP页面也变得难于管理。虽然用这种方法开发小形项目唾手可得,

但是scriptlets仍然要面对下面的不利情况:

Scriptlet难于阅读和修改。带有Scriptlets的JSP 页面混合了两种语言,这使得阅读和维护变得很困难。

Scriptlets鼓励了将数据表现和逻辑处理的混合。JSP 页面主要功能是数据表现而不是逻辑处理。逻辑处理属于Java类的工作,他们应该由程序员维护并能够重用。

Scriptlets不能够被重用。当scriptlets被重用时,常常是鼓励拷贝-粘贴来达到重用的效果,这是一种危险的维护方法。每一次你拷贝-粘贴scriptlets时,将有更多行多余的代码需要维护。

Scriptlets的参数很难进行确定传递. 无论如何,绝大数人简单的拷贝,粘贴、编辑或者类似的增加,使得大部份的多余的代码需要更多的维护。

与其创建充满了scriptlets的巨大的JSP页面,不如考虑使用用户自定义标签。用户自定义标签允许你创建、在JSP中使用你自己定义的类HTML标签。每当JSP引擎遇到用户自定义标签时,就会自动查找标签处理类,并自动调用他。页面中的自定义标签将会被票签处理类的输出所代替。这就

使得JSP页面不用直接在页面写Java代码,就可以指定生成动态的内容的。

用户自定义标签为你的网页设计提供了N种好处:他提高了页面代码的可读性。页面设计人员而不是程序员,能够使用很比使用Scriptlets更容易的使用标签。维护代码的程序员也只需个性标签库面不是JSP页面,这样他就不要再冒着破坏页面美观的风险。在使用标签的每一处,增强或者固定的标签改变了标签了的表现。标签比Scriptlets更容易确定参数,因为他会被作为一种属性或者在标签体内被传达。最后,标签比Scriptlets高度的可重用性,因为你可以创建共享的、可重用的自定义标签库。 JSTL提供的就是这种标准的自定义标签集。

让我们通过看一个简单的JSP页面例子,来看看如何使用自定义标签。下面这个页面使用scriptlet来得到数据: <%@ page import="java.text.SimpleDateFormat" %>

<%@ page import="java.util.Date" %>

Sample JSP

The date and time at the server are:

<%

String sformat = "EEEE, d MMMM yyyy 'at' kk:mm:ss z";

SimpleDateFormat format = new SimpleDateFormat(sformat);

Date date = new Date();

String sdate = format.format(date);

out.print(sdate);

%>

这个页面非常的简单直接,尽管这个简单的函数看上去好像有许多东东。如果你想要在每一个页面上显示日期,那么你只能拷贝粘贴这段代码到项目中的每一个页面。如果你这么做,那么你要维护的不仅仅是这段代码的原始拷贝,而是你粘贴的每一个拷贝。如果这段代码出现在多个页面,那么改变一下时间格式将会占用你的很多时间。

下面这段是一个非常清洁的JSP页面。在这里,Java 代码被从scriptlet中移出放到了自定义标签中:<%@ taglib uri="/WEB-INF/taglib.tld" prefix="mytags" %>

Sample JSP using a custom tag

The date and time at the server are:

在这个例子中,<@% taglib %>用来指出自定义标签描述符文件路径(标签库中的描述符或者TLD文件),并且为这个标签名定义一个名字空间(“mytags”,可是你喜欢的任何字符)。JSP引擎认可作为一个用户定义标签的符号,他会调用这个标签的标签处理器,并用处理结果替换标签和内容。

创建一个用户定义标签处理器

创建一个用户定义标签处理器需要比定scriptlet多一

定量的工作,因为这一个Java类,并且你不得不为他写一

个TLD格式(在下一节介绍)的描述符文件。

下面这个类DataTag实现了一个标签处理器:

public class DateTag extends TagSupport

{

protected PageContext _pageContext;

protected String _sFormat;

static final String _sFormatDefault ="EEEE, d MMMM

yyyy 'at' kk:mm:ss z";

public void setPageContext(PageContext pageContext) {

_pageContext = pageContext;

_sFormat = _sFormatDefault;

}

// Handle the tag

public int doStartTag() throws JspException

{

SimpleDateFormat format =

new SimpleDateFormat(getFormat());

JspWriter out = _pageContext.getOut();

Date date = new Date();

String sdate = format.format(date);

try

{

out.print(sdate);

}

catch (IOException ex)

{

throw new JspException(

"DateTag: can't write: " +ex.getMessage());

}

return SKIP_BODY;

}

// Handlers for "format" attribute

public void setFormat(String sFormat)

{

_sFormat = sFormat;

相关文档
最新文档