铁手剑谱

上善若水
数据加载中……

Struts秘籍之第1段:第2.6式. 使用多个资源束

第2.6式. 使用多个资源束

问题

你可能想要将你的应用资源分解到多个文件中,以改善应用的组织和维护性,特别是在团队开发的环境中。

动作要领

创建单独的属性文件并且在struts-config.xml中为每一个文件声明一个message-resources元素。

<message-resources
  
parameter="com.oreilly.strutsckbk.MessageResources"/>
<message-resources 
  
parameter="com.oreilly.strutsckbk.LabelResources"
  key
="labels">
</message-resources>
<message-resources 
  
parameter="com.oreilly.strutsckbk.HeaderResources"
  key
="headers">
</message-resources>

 

动作变化

Struts 使用消息资源来提供对错误消息、字段标注、以及其他静态文本的存储机制。对于默认的Struts 实现,你可以将消息存储为属性文件(.properties文件)中的名称(关键字)/值对。消息资源集基本上相当于Java ResourceBundle(资源束)。

你可以将你的消息资源束性文件通过message-resources元素来配置。元素的parameter属性指示了属性文件的相对于classpath的名称。你可以通过将文件路径中的分隔符替换为点号,以及删除文件名中的.properties扩展名来产生这个属性的值。比如,如果你的属性文件位于/WEB-INF/classes/com/oreilly/strutsckbk/MessageResources.properties,你可以将消息资源元素设置为:

<message-resources
  
parameter="com.oreilly.strutsckbk.MessageResources"/>

在应用启动时, Struts将创建消息资源的运行时表达(一个对象实例),然后将其保存在servlet context中。

你并不限于只使用一个消息资源。然而,和使用多Struts配置文件不同,如果你使用多个消息资源文件,它们并不时合并成一个文件。相反,你需要定义消息资源的不同的集合。每一个集合使用一个key属性指定的唯一的值来标识。如果这个属性没被使用,那么该消息资源就会被设置为默认的消息集。只有一个默认消息集存在。同时,只有一个消息资源集对应于同一模块中的每一个唯一关键字。如果你使用同一关键字定义了多个消息资源束,则最后一个指定的将被使用。

key属性的值是作为servlet context 属性的名称,从属性文件创建的消息资源束就保存在它之下。key值被用在Struts标签之中,比如bean:message,来标识消息资源集,并引用到来自于属性文件的资源束。下面是你可以如何从labels消息资源来访问一个消息的方法:


<bean:message bundle="labels" key="label.url"/>

bundle属性的值对应于struts-config.xml文件中的message-resources元素的key属性。bean:message标签也有一个key属性,但它和message-resources元素的key属性的含义完全不同。它指定一个特定的属性来访问消息资源中的消息。

不幸的是,这种在XML元素和JSP标签中使用同一个属性名的方法在Struts中很普遍。所以必须仔细研究和注意Struts taglib文档 (http://jakarta.apache.org/struts/userGuide/index.html) 以及Struts 的配置文档(http://jakarta.apache.org/struts/userGuide/configuration.html#struts-config) ,免得搞混淆了。

Struts 并不关心你如何分解你的消息资源属性文件。一种办法是按照消息类型分解。比如,你可以将你的消息资源分解为下面的几组:

  • 错误消息
  • 提示性消息
  • 字段标注
  • 表头单元个文本

虽然这样分解消息资源是合乎逻辑和合理的,但在团队环境中则倾向于按照功能进行分解。比如,考虑一个人力资源应用,它有薪酬、福利和管理功能区。你可以为每一个功能区创建一个消息资源属性文件。每一个属性文件都包含该功能区域所特定的错误消息、提示消息、字段标注和其他信息。如果你的开发团队是按照这些业务功能区进行分组的,按照相同的分组原则对消息资源进行分组则更加合理。相同的方法和原则也适用于Struts 配置文件的分解。

如果你熟悉Struts module,上述的每一个功能区都是一个很好的Struts module的候选。如果你使用module,那么你在struts-config文件中为某一个模块所定义的消息资源就仅适用于该模块。事实上,你可以在不同的模块中定义具有相同key属性的message-resource元素。回想一下, Struts 是使用key值将MessageResources保存在servlet context中。更准确地说,实际的值将用于模块名称(通常引用为模块的前缀),以及消息资源的key属性值的串联。

相关招式

第2.4式提供了关于分解应用组件的技术。Struts 用户指南提供了定义消息资源的文档,其地址为:http://jakarta.apache.org/struts/userGuide/configuration.html#resources_config.

Struts MessageResources的JavaDoc API可以在http://jakarta.apache.org/struts/api/org/apache/struts/util/MessageResources.html处找到。

Struts 文档中关于bean:message标签的文档可以在http://jakarta.apache.org/struts/userGuide/struts-bean.html#message处找到。

posted @ 2005-05-17 17:38 铁手 阅读(2136) | 评论 (1)编辑 收藏
Struts秘籍之第1段:第2.5式. 将应用重构为模块

第2.5式. 将应用重构为模块

问题

你想要将你的应用隔离为多个相对不同的子应用、或者模块,每一个都有其自己的单独的配置。

动作要领

除了默认模块的Struts 配置文件之外,为每一个模块创建一个单独的Struts 配置文件。然后使用ActionServlet的初始化参数在web.xml中声明每一个模块,如Example 2-11.

Example 2-11. ActionServlet 的多模块配置

 

<!-- Action Servlet Configuration -->
<servlet>
  
<servlet-name>action</servlet-name>
  
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
  
<init-param>
    
<param-name>config</param-name>
    
<param-value>/WEB-INF/struts-config.xml</param-value>
  
</init-param>
  
<init-param>
    
<param-name>config/module1</param-name>
    
<param-value>/WEB-INF/struts-config-module1.xml</param-value>
  
</init-param>
  
<init-param>
    
<param-name>config/module2</param-name>
    
<param-value>/WEB-INF/struts-config-module2.xml</param-value>
  
</init-param>
  
<load-on-startup>1</load-on-startup>
</servlet>

 

动作变化

Struts 1.1 引入了定义单独配置的子应用的能力,那就是模块(module)。Modules 引入到Struts 之中是为了解决将web应用分解为相对不同的,可管理的部分的问题。每一个module 都通过其自己的配置文件进行定义。每一个Struts 应用都隐含的具有一个默认module。默认module 没有名字。

附加的模块通过指定一个模块前缀来定义。前缀是Struts的ActionServlet的初始化参数中的config/后面紧跟的值。在Example 2-11中,定义了3个模块。第一个init-param元素定义了默认模块。第二个和第三个init-param元素分别建立了module1和module2。

Struts 预先为每一个通过在struts-config.xm文件中为每一个模块定义的声明来访问的URL准备模块前缀。这项规则也适用于全局转发,全局异常,action mapping,局部转发和局部以外中的path 属性。然而,module的 Struts 配置文件则不需要知道也不应该使用module 前缀。

通过Struts标签所产生的URL,比如通过html:link和html:rewrite,将包含module名称。这意味着包含模块前缀在你想要引用全局共享的Web资源比如图像和CSS时会很令人头痛。很多Web 应用通常都将所有图片放置在站点的顶层/images文件夹中。如果使用modules 并且使用html:img标签来显示这些图片,你必须为每一个模块创建一个单独的/images文件夹户或者设置html:img标签的module属性为空字符串("") 以指示默认的模块。

假定你想要为struts示例的MailReader应用创建一个管理的UI接口。需要在应用中加入一个管理模块,如下面的方式修改web.xml文件,其中第2个init-param元素就定义了admin模块:

  <!-- Action Servlet Configuration -->
  
<servlet>
    
<servlet-name>action</servlet-name>
    
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    
<init-param>
      
<param-name>config</param-name>
      
<param-value>
        /WEB-INF/struts-config.xml,
        /WEB-INF/struts-config-registration.xml
      
</param-value>
    
</init-param>
    
<init-param>
      
<param-name>config/admin</param-name>
      
<param-value>/WEB-INF/struts-config-admin.xml</param-value>
    
</init-param>
    
<load-on-startup>1</load-on-startup>
  
</servlet>

使用module常犯的一个错误就是在你导航到包含模块前缀的URL的时候, Struts 将认为你是在模块之中。例如,你可能在应用的主页面提供了一个标准的HTML 链接(比如<a href . . . >) 到管理模块的index页面。如果用户选择该链接,它们会看到正确的页面。然而, Struts 所关心的是,用户仍然在默认模块中。为了在Struts 1.1 应用的模块之间切换,你必须通过一个特殊的action,SwitchAction来转发用户。在Struts 1.2中,产生链接和URL的Struts html标签已经支持module属性,这样你就可以显式地指定目标模块。

使用Struts 1.1 的模块机制有其缺点。注意不是所有的Struts 1.1标签都支持模块。所以,你可能会发现模块中的JSP页面并不能完全与它们属于的模块无关的情况下便写出来。使用模块的这些缺点都在Struts 1.2中被弥补了。因此,我推荐你只有在Struts1.2中才考虑使用模块。如果你必须使用Struts 1.1 并且你的应用仅仅是稍微有些复杂,你可以向要避免使用模块的矛盾,而使用子目录的方式来组织你的应用,并且使用第2.4中所讲的技术来将struts-config.xml文件进行分解。

相关招式

第2.4 将struts-config.xml文件分解为多个配置的技术。

第6.7 展示了在运行的Struts 应用的模块之间进行切换的技术。

posted @ 2005-05-17 16:44 铁手 阅读(1428) | 评论 (1)编辑 收藏
Struts秘籍之第1段:第2.4式:多配置文件

第2.4式. 使用多个Struts配置

问题

你想要将一个大型的struts-config.xml文件分为多个小文件,以便改善组织和更易维护,特别是在团队开发的过程中。

动作要领

将一个struts-config.xml分解为多个配置文件。每一个都必须是良构的,并且能过通过struts-config XML DTD的校验。将这些文件作为ActionServlet在web.xml中的初始化参数config的参数值引用,如Example 2-9。

Example 2-9. 多配置文件 (单模块)

 

<servlet>
  
<servlet-name>action</servlet-name>
  
<servlet-class>
    org.apache.struts.action.ActionServlet
  
</servlet-class>
  
<init-param>
    
<param-name>config</param-name>
    
<param-value>
      /WEB-INF/struts-config.xml,
      /WEB-INF/struts-config-2.xml
    
</param-value>
  
</init-param>
  
<load-on-startup>1</load-on-startup>
</servlet>

当ActionServlet被载入时, Struts 将多个文件在内存中合并成一个单一的文件。

动作变化

对那些不是最细微的应用而言,struts-config.xml文件会趋于变得大而笨重。许多应用可能具有数以百计的action。将这个文件结合CVS使用,那么团队中的开发人员就会访问相同的文件。

Struts 1.1 引入了对多配置文件的支持。每一个配置文件都必须是一个有效的XML 文件并且必须符合struts-config XML DTD。在可以在web.xml中将这些文件声明为ActionServlet的初始化参数config的值。你可以将这些文件指定为逗号分隔的路径列表。运行时,这些文件会在内存中合并成一个文件。如果出现重复元素,比如具有相同的name属性的两个不同的form bean 声明,则最后一个读入的配置优先。

因为只是使用多配置文件并不意味着必须要使用Struts modules。事实上,你对一个模块也可以使用多配置文件。在上面的方案中,config元素的param-name子元素的值对ActionServlet规定了默认模块的Struts 配置文件的路径。附加模块是通过config/module-name的param-name值规定的。Example 2-10 展示了一个Struts ActionServlet声明,其中具有一个默认模块和两个附加模块。默认模块是用两个配置文件,module1只使用一个配置文件,而module2使用3个配置文件。

Example 2-10. 多配置文件(多模块)

 

<servlet>
  
<servlet-name>action</servlet-name>
  
<servlet-class>
    org.apache.struts.action.ActionServlet
  
</servlet-class>
  
<init-param>
    
<param-name>config</param-name>
    
<param-value>
      /WEB-INF/struts-default-config.xml,
      /WEB-INF/struts-default-config-2.xml
    
</param-value>
  
</init-param>
  
<init-param>
    
<param-name>config/module1</param-name>
    
<param-value>
      /WEB-INF/struts-module1-config.xml
    
</param-value>
  
</init-param>
  
<init-param>
    
<param-name>config/module2</param-name>
    
<param-value>
      /WEB-INF/struts-module2-config.xml,
      /WEB-INF/struts-module2-config-2.xml,
      /WEB-INF/struts-module2-config-3.xml
    
</param-value>
  
</init-param>
  
<load-on-startup>1</load-on-startup>
</servlet>

 

如果你是团队开发,可以考虑基于功能区域、用例、或者使用场景分解配置文件。每一个团对称员都可以集中于他们的职责领域而不用关心其他部分。

相关招式

第2.5式会详细讲解使用Struts module的细微之处。

第1.8式如何自动产生struts 配置文件。

posted @ 2005-05-13 10:53 铁手 阅读(3585) | 评论 (6)编辑 收藏
Struts秘籍之第1段:第2.3式:在JSP中使用常数

第2.3式. 在JSP中使用常数

问题

不通过scriptlets, 你想要在JSP中使用Java类中定义的应用常数public static字段。

动作要领

使用Jakarta Taglibs的unstandard标签库提供的bind标签来创建包含常数字段的JSTL变量:

<%@ taglib uri="http://jakarta.apache.org/taglibs/unstandard-1.0" prefix="un" %>
<un:bind var="constantValue"
        type
="com.foo.MyClass"
       field
="SOME_CONSTANT"/>
<bean:write name="constantValue"/>


<%@ taglib uri="http://jakarta.apache.org/taglibs/unstandard-1.0" prefix="un" %><un:bind var="constantValue"type="com.foo.MyClass"field="SOME_CONSTANT"/><bean:write name="constantValue"/>

 

动作变化

大多数团队都费力地通过使用publicstatic字段(常数)来避免在Java类中使用硬编码的字符串。不幸的是,不过是 Struts 还是 JSP都没有提供相应的手段来在JSP中不借助scriptlet 而使用这些常数,如:

<%= com.foo.MyClass.SOME_CONSTANT %>


但是有许多开发团队禁止,或者至少不赞成在JSP中使用scriptlet 。

Scriptlets (<% . . . %>) 和运行时表达式(<%= . . . %>) 都直接在JSP中置入Java代码。它们不是与生俱来的恶人,但是它们因为使得你的页面中混合HTML,JSP和Java代码变得纷繁复杂,从而使开发效率大大降低。需要找到一种方法来避免使用scriptlets你将发现JSTL的引入就是为了解决这个可怕的scriptlet的问题。

这种方法通过使用定制JSP标签来提供一种方式来解决这个窘境,即使用un:bind标签。该标签是unstandard标签库的一部分,unstandard标签库则是Jakarta Taglibs中的一个组件。unstandard标签库包含已经用于或者正在考虑用于标准标签库的标签。标准标签库是JSTL 规范的Jakarta Taglibs 的实现。

unstandard标签库可以从下面的地方下载:http://cvs.apache.org/builds/jakarta-taglibs-sandbox/nightly/projects/unstandard/. 为了使用这个库,你需要将unstandard.jar和unstandard.tld文件拷贝到应用的WEB-INF/lib目录。

un:bind标签提供了一种方法来创建JSP页面上下文变量,它一般引用java类中的一个字段。字段可以是实例变量或者静态变量。良好设计的Java 类一般都不会将实例变量暴露为公共字段,而大多数都将静态变量暴露为公共字段。

你可以创建一个使用Struts提供的静态字段的简单JSP页面来看看这种方法是否可行。从Struts 1.1开始, Struts 所用的常数都放在org.apache.struts.Globals类中。这些常数的值指定了各种存储在请求、会话、应用上下文中的Struts相关实体的关键字值。Example 2-5 中的JSP页面使用了un:bind标签来显示这些值:

Example 2-5. 使用bind 标签来访问Struts全局常数

 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://jakarta.apache.org/taglibs/unstandard-1.0" prefix="un" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<html>
<head>
  
<title>Struts Cookbook - Chapter 4 : Using Bind</title>
</head>
<body>
  
<un:bind var="servletKey"
          type
="org.apache.struts.Globals"
         field
="SERVLET_KEY"/>
  
<p>
  Field name: SERVLET_KEY
<br />
  Field value: 
<bean:write name="servletKey"/>< br />
  Attribute Value: 
<c:out value="${applicationScope[servletKey]}"/>< br />
  
</p>
</body>
</html>

此页面使用un:bind来从Struts Globals类中获取SERVLET_KEY字段的值。SERVLET_KEY字段的值被用于servlet 上下文属性关键字,在其下存储了为Struts controller servlet 定义的映射(如. /action/*或*.do)。

在你需要以一种特殊的方式访问常数时,un:bind标签是一个不错的选择。但是它还是有些麻烦,因为你需要首先使用un:bind标签来创建变量,然后使用bean:write或者c:out标签来显示值。假定JSP显示Globals类中的所有常数,而这足有17 个之多。许多应用严重依赖于常数并且可能有很多类,每一个类都包含很多字段。对每一个字段都使用一个单独的标签是多么的麻烦。

你可以使用一种替代方法,虽然需要一些额外的Java 代码,它可以将常数绑定到一个JavaBean 的一个Map属性之中。你可以将这个bean 存储在servlet 上下文中。然后就可以通过bean:write和c:out标签直接访问这些值了。Example 2-6中的Constants类定义了一个包含Struts Globals类中的常数的map属性的JavaBean 。Example 2-7 中的ConstantsPlugin则将Constants的一个实例载入到servlet context中。

Example 2-6. 包含Struts全局常数的JavaBean

 

package com.oreilly.strutsckbk.ch04;

import java.util.HashMap;
import java.util.Map;

import org.apache.struts.Globals;

public class Constants {
    
private Map strutsGlobals;
    
    
public Constants( ) {
        strutsGlobals 
= new HashMap( );
        strutsGlobals.put( 
"ACTION_SERVLET_KEY"
                           Globals.ACTION_SERVLET_KEY );
        strutsGlobals.put( 
"SERVLET_KEY", Globals.SERVLET_KEY );
    }

    
    
public Map getStrutsGlobals( ) {
        
return strutsGlobals;
    }

    
public void setStrutsGlobals(Map strutsGlobals) {
        
this.strutsGlobals = strutsGlobals;
    }

}

 

Example 2-7. 将常数载入到servlet context中的插件

 

package com.oreilly.strutsckbk.ch04;

import javax.servlet.ServletException;

import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.config.ModuleConfig;

public class ConstantsPlugin implements PlugIn {
    
public void destroy( ) {
    }

    
public void init(ActionServlet servlet, ModuleConfig module)
            throws ServletException 
{
        Constants constants 
= new Constants( );
        servlet.getServletContext( ).setAttribute(
"Constants", constants);
    }

}

Example 2-8 (globals_test.jsp) 则展示了一个访问和显示ConstantsPlugin载入的常数的JSP页面。第一个常数使用Struts bean:write标签,第二个则使用JSTL c:out标签。

Example 2-8. 使用Struts 和JSTL访问常数

 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<html>
<head>
  
<title>Struts Cookbook - Chapter 4 : Accessing Constants</title>
</head>
<body>
  
<p>
  Field name: ACTION_SERVLET_KEY
<br />
  Field value: 
<bean:write name="Constants" 
                       property
="strutsGlobals(ACTION_SERVLET_KEY)"/><br />
  
</p>
  
<p>
  Field name: SERVLET_KEY
<br />
  Field value: 
<c:out value="${Constants.strutsGlobals.SERVLET_KEY}"/><br />
  
</p>
</body>
</html>

这种方式的最大缺点是你必须手动创建持有常数值的map。如果类中添加了新的常数,你必须修改Constants类的源代码以便能够获取它。

相关招式

关于Jakarta Taglibs 项目的详细信息可以访问http://jakarta.apache.org/taglibs.

第5.4式提供了如何从Struts 和JSTL访问map的方法。

Struts plug-ins 我们在第2.1式讨论过。

Kris Schneider 建立了一个类似于Example 2-6中的Constants类,使用反射来访问特定类的公开静态字段。源代码可以从归档的struts-user mailing list 中找到:http://marc.theaimsgroup.com/?l=struts-user&m=108929374300664&w=2.

 

posted @ 2005-05-12 11:01 铁手 阅读(2650) | 评论 (1)编辑 收藏
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 @ 2005-05-11 10:04 铁手 阅读(2471) | 评论 (1)编辑 收藏
仅列出标题
共26页: First 上一页 18 19 20 21 22 23 24 25 26 下一页