铁手剑谱

上善若水
数据加载中……
Struts秘籍之第1段:第2.1式:关于标签库声明

第2.2式. 标签库声明

问题

在每次你需要使用一个新的标签库时,想要避免非要在web.xml中加入taglib元素。

动作要领

创建一个JSP 文件包含引用到你所使用的标签库描述符的绝对路径的taglib指令。Example 2-4 (taglibs.inc.jsp) 就展示了一个包含对Struts bean, html, 和logic标签库声明以及JSTL的core 和formatting 标签库的taglib声明的JSP 文件。

Example 2-4. 通用标签库声明

 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>

然后在JSP使用下面的指令包含这个文件:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<!-- start taglib -->
<%@ include file="/includes/taglibs.inc.jsp" %>
<!-- end taglib -->

<html:html>
  
<body>
    

因为你在taglib中使用的是绝对路径,你将不需要在web.xml文件中输入对应的taglib元素。

动作变化

如果你使用的是符合JSP 1.2/Servlet 2.3 的容器,比如Tomcat 4.x 或者更高,你就可以在JSP页面的taglib指令中使用绝对路径而不必在web.xml中指定taglib元素。

对于早于Servlet 2.3 规范的情况,你仍然需要在web.xml中声明所有你所使用的JSP 标签。下面摘自web.xml部署描述符中的代码片断展示了用于Struts应用的典型taglib声明:

<!-- Struts Tag Library Descriptors -->
<taglib>
  
<taglib-uri>/tags/struts-bean</taglib-uri>
  
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>
<taglib>
  
<taglib-uri>/tags/struts-html</taglib-uri>
  
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
<taglib>
  
<taglib-uri>/tags/struts-logic</taglib-uri>
  
<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
</taglib>
<taglib>
  
<taglib-uri>/tags/struts-nested</taglib-uri>
  
<taglib-location>/WEB-INF/struts-nested.tld</taglib-location>
</taglib>

从Servlet 2.3 之后,标签库的绝对URI 在该库的标签库描述符 (TLD) 文件中指定。比如,下面就是struts-bean.tld文件中的相应声明:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag 
Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"
>
<taglib>
  
<tlibversion>1.0</tlibversion>
  
<jspversion>1.1</jspversion>
  
<shortname>bean</shortname>
  
<uri>http://jakarta.apache.org/struts/tags-bean</uri>

任何需要使用这个标签库的页面都可以通过下面的页面级指令来引用它。标签库不需要再在web.xml文件中引用:

<%@ taglib
        
uri="http://jakarta.apache.org/struts/tags-bean"
        prefix
="bean" %>

如果你在整个应用中使用相同的标签库,你可以使用基本动作中所述的方法,即创建一个包含通用标签库声明指令的包含JSP文件。如果你引用了不需要的标签库,其实也不会有太大的性能损失,所以你可以在每个JSP页面中安全的包含这个文件。如果URI 改变,你将只需要修改一个地方而不是每一个JSP文件。

Table 2-1 展示了版本1.1 和1.2 的Struts中的标签库绝对URI的完整列表。

Table 2-1. Struts 标签库URI

Tag library

Struts 1.1 URI

Struts 1.2 URI

struts-bean

http://jakarta.apache.org/struts/tags-bean

http://struts.apache.org/tags-bean

struts-html

http://jakarta.apache.org/struts/tags-html

http://struts.apache.org/tags-html

struts-logic

http://jakarta.apache.org/struts/tags-logic

http://struts.apache.org/tags-logic

struts-nested

http://jakarta.apache.org/struts/tags-nested

http://struts.apache.org/tags-nested

struts-template

http://jakarta.apache.org/struts/tags-template

不再包括,被Tiles代替

struts-tiles

http://jakarta.apache.org/struts/tags-tiles

http://struts.apache.org/tags-tiles

struts-bean-el

http://jakarta.apache.org/struts/tags-bean-el

http://struts.apache.org/tags-bean-el

struts-html-el

http://jakarta.apache.org/struts/tags-html-el

http://struts.apache.org/tags-html-el

struts-logic-el

http://jakarta.apache.org/struts/tags-logic-el

http://struts.apache.org/tags-logic-el

 

有些开发人员喜欢使用绝对URI,而有些仍然喜欢使用web.xml的声明。需要指出的是,后一种方式可以将你的应用代码和下层的标签库改变隔离开来。如果URI 改变,你只需要修改web.xml文件中的相关声明。你并不需要修改每个JSP页面,包括被包含的JSP片断。这种方式也是有效的,也有可取之处。最后,采用那种方式完全取决于个人喜好。

相关招式

JSP规范有一些稍微有点复杂的规则来解析标签库的URI。详细的信息可以参考JSP的规范,它可以在http://java.sun.com/jsp处下载。

第3.1式将向你展示在Struts应用中使用JSP 标准标签库(JSTL) 。

 

posted on 2005-05-11 10:04 铁手 阅读(2478) 评论(1)  编辑  收藏 所属分类: JavaStruts系列

评论

# Struts 秘籍(CookBook)[TrackBack] 2005-11-12 18:29 阿泠

本系列源改编自O'Reily的Strus Cookbook
[引用提示]阿泠引用了该文章, 地址: http://blog.donews.com/inclear/archive/2005/11/12/624363.aspx
  回复  更多评论    

只有注册用户登录后才能发表评论。


网站导航: