不要使用标签库,而要使用标签文件!

从J2EE 1.3开始,Taglib是很棒的组件。 它们使您成为开发人员:

  • 避免在Java服务器页面中使用过多的脚本(自由格式的Java代码),
  • 拥有可重用组件的库,这些库可分发到您的所有项目。

到目前为止,两者在企业中都非常重要。 例如,作为一名架构师,您可以完全禁止使用脚本,然后提供标记库来限制可以在页面上完成的操作。 此类策略并不罕见,可以由质量代码检查人员实施。 它阻止了刚毕业的开发人员在JSP中调用JDBC代码,从而破坏了精确的Model View Controller模型。

但是,Taglib有一个很大的缺点:它们是继承正确类的标准Java类( javax.servlet.jsp.tagext.Tagjavax.servlet.jsp.tagext.SimpleTag )。 因此,必须将其内容写入JspWriter。 在这方面,它们与Servlet非常相似:它们不能由绘图员设计,并且您必须提供Servlet引擎以查看其输出。 Servlet具有JSP作为视图,taglib具有tagfile!

标记文件是什么? 只需将一个带有* .tag扩展名的文件放在/WEB-INF/tags目录中,然后使用bingo,便有了一个tagfile。 为了测试标记文件的创建,请创建具有以下内容的hello.tag:“ Hello world”。 然后创建一个JSP并粘贴以下代码段:

<%@pagelanguage="java"contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<%@taglibprefix="tag"tagdir="/WEB-INF/tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html; charset=ISO-8859-1">
<title> Tag files example </title>
</head>
<body>
<tag:hello/>
</body>
</html>

您已经可以猜测输出了。 引用标记文件有点神奇。 我们不使用taglib指令的uri属性,而是使用tagdir属性来告诉应用程序服务器我们在何处存储了标记文件。 要调用标记文件,请照常使用前缀,然后使用文件名。 无需使用TLD 。 很简单,不是吗?

容易...实际上,使用标记文件并不能实现重用。 它是在单个Web应用程序的上下文中完成的,与使用JSP include相比没有很多优点。 要打包标记文件以重复使用,您必须将文件从/WEB-INF/tags移至/META-INF/tags /META-INF下创建完整的TLD:

<?xml version="1.0" encoding="UTF-8"?>
<taglibversion="2.0"xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xml="http://www.w3.org/XML/1998/namespace"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd ">
    <tlib-version> 1.0 </tlib-version>
    <short-name> tf </short-name>
    <uri> http://blog.frankel.ch/examples/tagfiles </uri>
    <!-- don't use tagclass -->
    <tag-file>
        <name> hello </name>
        <path> /META-INF/tags/hello.tag </path>
    </tag-file>
</taglib>

现在,在JSP中使用taglib(不要忘记现在使用uri属性)。 结果应该是相同的,但是现在您拥有了一个可重用的组件。 当然,在输出中写入字符串不是很有用。 像标记库一样,标记文件可以接受变量。 这很容易做到,因为在TLD下使用标签库找到的许多属性都在标签文件本身中找到。 让我们写一个标记文件,用开发人员给定的格式写今天的日期:

<%@tagbody-content="empty"%>
<%@attributename="format"required="true"%>
<%@taglibprefix="fmt"uri="http://java.sun.com/jsp/jstl/fmt"%>
<jsp:useBeanid="date"class="java.util.Date"/>
<fmt:formatDatevalue="${date}"pattern="${format}"/>

注意attribute语法。

这些示例的Eclipse项目可以在这里找到。

翻译自: https://blog.frankel.ch/do-not-use-taglibs-use-tagfiles/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值