鐵手劍譜

          上善若水
          數據加載中……

          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 鐵手 閱讀(2152) | 評論 (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 鐵手 閱讀(1445) | 評論 (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 鐵手 閱讀(3632) | 評論 (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 鐵手 閱讀(2666) | 評論 (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 鐵手 閱讀(2484) | 評論 (1)編輯 收藏
          僅列出標題
          共26頁: First 上一頁 18 19 20 21 22 23 24 25 26 下一頁 
          主站蜘蛛池模板: 辛集市| 江口县| 兴安盟| 蓬莱市| 务川| 高陵县| 新乡县| 柳河县| 来凤县| 苗栗县| 密云县| 都昌县| 博爱县| 蓬溪县| 九龙城区| 虹口区| 樟树市| 上饶县| 和顺县| 东宁县| 庄浪县| 东方市| 团风县| 唐河县| 平度市| 广河县| 永善县| 广州市| 崇明县| 榆社县| 张家川| 营山县| 本溪| 枝江市| 乐业县| 唐海县| 夏津县| 长白| 宁武县| 香河县| 肥西县|