<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    鐵手劍譜

    上善若水
    數(shù)據(jù)加載中……

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

    第2.6式. 使用多個資源束

    問題

    你可能想要將你的應(yīng)用資源分解到多個文件中,以改善應(yīng)用的組織和維護(hù)性,特別是在團(tuán)隊開發(fā)的環(huán)境中。

    動作要領(lǐng)

    創(chuàng)建單獨(dú)的屬性文件并且在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 使用消息資源來提供對錯誤消息、字段標(biāo)注、以及其他靜態(tài)文本的存儲機(jī)制。對于默認(rèn)的Struts 實(shí)現(xiàn),你可以將消息存儲為屬性文件(.properties文件)中的名稱(關(guān)鍵字)/值對。消息資源集基本上相當(dāng)于Java ResourceBundle(資源束)。

    你可以將你的消息資源束性文件通過message-resources元素來配置。元素的parameter屬性指示了屬性文件的相對于classpath的名稱。你可以通過將文件路徑中的分隔符替換為點(diǎn)號,以及刪除文件名中的.properties擴(kuò)展名來產(chǎn)生這個屬性的值。比如,如果你的屬性文件位于/WEB-INF/classes/com/oreilly/strutsckbk/MessageResources.properties,你可以將消息資源元素設(shè)置為:

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

    在應(yīng)用啟動時, Struts將創(chuàng)建消息資源的運(yùn)行時表達(dá)(一個對象實(shí)例),然后將其保存在servlet context中。

    你并不限于只使用一個消息資源。然而,和使用多Struts配置文件不同,如果你使用多個消息資源文件,它們并不時合并成一個文件。相反,你需要定義消息資源的不同的集合。每一個集合使用一個key屬性指定的唯一的值來標(biāo)識。如果這個屬性沒被使用,那么該消息資源就會被設(shè)置為默認(rèn)的消息集。只有一個默認(rèn)消息集存在。同時,只有一個消息資源集對應(yīng)于同一模塊中的每一個唯一關(guān)鍵字。如果你使用同一關(guān)鍵字定義了多個消息資源束,則最后一個指定的將被使用。

    key屬性的值是作為servlet context 屬性的名稱,從屬性文件創(chuàng)建的消息資源束就保存在它之下。key值被用在Struts標(biāo)簽之中,比如bean:message,來標(biāo)識消息資源集,并引用到來自于屬性文件的資源束。下面是你可以如何從labels消息資源來訪問一個消息的方法:


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

    bundle屬性的值對應(yīng)于struts-config.xml文件中的message-resources元素的key屬性。bean:message標(biāo)簽也有一個key屬性,但它和message-resources元素的key屬性的含義完全不同。它指定一個特定的屬性來訪問消息資源中的消息。

    不幸的是,這種在XML元素和JSP標(biāo)簽中使用同一個屬性名的方法在Struts中很普遍。所以必須仔細(xì)研究和注意Struts taglib文檔 (http://jakarta.apache.org/struts/userGuide/index.html) 以及Struts 的配置文檔(http://jakarta.apache.org/struts/userGuide/configuration.html#struts-config) ,免得搞混淆了。

    Struts 并不關(guān)心你如何分解你的消息資源屬性文件。一種辦法是按照消息類型分解。比如,你可以將你的消息資源分解為下面的幾組:

    • 錯誤消息
    • 提示性消息
    • 字段標(biāo)注
    • 表頭單元個文本

    雖然這樣分解消息資源是合乎邏輯和合理的,但在團(tuán)隊環(huán)境中則傾向于按照功能進(jìn)行分解。比如,考慮一個人力資源應(yīng)用,它有薪酬、福利和管理功能區(qū)。你可以為每一個功能區(qū)創(chuàng)建一個消息資源屬性文件。每一個屬性文件都包含該功能區(qū)域所特定的錯誤消息、提示消息、字段標(biāo)注和其他信息。如果你的開發(fā)團(tuán)隊是按照這些業(yè)務(wù)功能區(qū)進(jìn)行分組的,按照相同的分組原則對消息資源進(jìn)行分組則更加合理。相同的方法和原則也適用于Struts 配置文件的分解。

    如果你熟悉Struts module,上述的每一個功能區(qū)都是一個很好的Struts module的候選。如果你使用module,那么你在struts-config文件中為某一個模塊所定義的消息資源就僅適用于該模塊。事實(shí)上,你可以在不同的模塊中定義具有相同key屬性的message-resource元素?;叵胍幌?, Struts 是使用key值將MessageResources保存在servlet context中。更準(zhǔn)確地說,實(shí)際的值將用于模塊名稱(通常引用為模塊的前綴),以及消息資源的key屬性值的串聯(lián)。

    相關(guān)招式

    第2.4式提供了關(guān)于分解應(yīng)用組件的技術(shù)。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 文檔中關(guān)于bean:message標(biāo)簽的文檔可以在http://jakarta.apache.org/struts/userGuide/struts-bean.html#message處找到。

    posted @ 2005-05-17 17:38 鐵手 閱讀(2149) | 評論 (1)編輯 收藏
    Struts秘籍之第1段:第2.5式. 將應(yīng)用重構(gòu)為模塊

    第2.5式. 將應(yīng)用重構(gòu)為模塊

    問題

    你想要將你的應(yīng)用隔離為多個相對不同的子應(yīng)用、或者模塊,每一個都有其自己的單獨(dú)的配置。

    動作要領(lǐng)

    除了默認(rèn)模塊的Struts 配置文件之外,為每一個模塊創(chuàng)建一個單獨(dú)的Struts 配置文件。然后使用ActionServlet的初始化參數(shù)在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 引入了定義單獨(dú)配置的子應(yīng)用的能力,那就是模塊(module)。Modules 引入到Struts 之中是為了解決將web應(yīng)用分解為相對不同的,可管理的部分的問題。每一個module 都通過其自己的配置文件進(jìn)行定義。每一個Struts 應(yīng)用都隱含的具有一個默認(rèn)module。默認(rèn)module 沒有名字。

    附加的模塊通過指定一個模塊前綴來定義。前綴是Struts的ActionServlet的初始化參數(shù)中的config/后面緊跟的值。在Example 2-11中,定義了3個模塊。第一個init-param元素定義了默認(rèn)模塊。第二個和第三個init-param元素分別建立了module1和module2。

    Struts 預(yù)先為每一個通過在struts-config.xm文件中為每一個模塊定義的聲明來訪問的URL準(zhǔn)備模塊前綴。這項規(guī)則也適用于全局轉(zhuǎn)發(fā),全局異常,action mapping,局部轉(zhuǎn)發(fā)和局部以外中的path 屬性。然而,module的 Struts 配置文件則不需要知道也不應(yīng)該使用module 前綴。

    通過Struts標(biāo)簽所產(chǎn)生的URL,比如通過html:link和html:rewrite,將包含module名稱。這意味著包含模塊前綴在你想要引用全局共享的Web資源比如圖像和CSS時會很令人頭痛。很多Web 應(yīng)用通常都將所有圖片放置在站點(diǎn)的頂層/images文件夾中。如果使用modules 并且使用html:img標(biāo)簽來顯示這些圖片,你必須為每一個模塊創(chuàng)建一個單獨(dú)的/images文件夾戶或者設(shè)置html:img標(biāo)簽的module屬性為空字符串("") 以指示默認(rèn)的模塊。

    假定你想要為struts示例的MailReader應(yīng)用創(chuàng)建一個管理的UI接口。需要在應(yīng)用中加入一個管理模塊,如下面的方式修改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常犯的一個錯誤就是在你導(dǎo)航到包含模塊前綴的URL的時候, Struts 將認(rèn)為你是在模塊之中。例如,你可能在應(yīng)用的主頁面提供了一個標(biāo)準(zhǔn)的HTML 鏈接(比如<a href . . . >) 到管理模塊的index頁面。如果用戶選擇該鏈接,它們會看到正確的頁面。然而, Struts 所關(guān)心的是,用戶仍然在默認(rèn)模塊中。為了在Struts 1.1 應(yīng)用的模塊之間切換,你必須通過一個特殊的action,SwitchAction來轉(zhuǎn)發(fā)用戶。在Struts 1.2中,產(chǎn)生鏈接和URL的Struts html標(biāo)簽已經(jīng)支持module屬性,這樣你就可以顯式地指定目標(biāo)模塊。

    使用Struts 1.1 的模塊機(jī)制有其缺點(diǎn)。注意不是所有的Struts 1.1標(biāo)簽都支持模塊。所以,你可能會發(fā)現(xiàn)模塊中的JSP頁面并不能完全與它們屬于的模塊無關(guān)的情況下便寫出來。使用模塊的這些缺點(diǎn)都在Struts 1.2中被彌補(bǔ)了。因此,我推薦你只有在Struts1.2中才考慮使用模塊。如果你必須使用Struts 1.1 并且你的應(yīng)用僅僅是稍微有些復(fù)雜,你可以向要避免使用模塊的矛盾,而使用子目錄的方式來組織你的應(yīng)用,并且使用第2.4中所講的技術(shù)來將struts-config.xml文件進(jìn)行分解。

    相關(guān)招式

    第2.4 將struts-config.xml文件分解為多個配置的技術(shù)。

    第6.7 展示了在運(yùn)行的Struts 應(yīng)用的模塊之間進(jìn)行切換的技術(shù)。

    posted @ 2005-05-17 16:44 鐵手 閱讀(1442) | 評論 (1)編輯 收藏
    Struts秘籍之第1段:第2.4式:多配置文件

    第2.4式. 使用多個Struts配置

    問題

    你想要將一個大型的struts-config.xml文件分為多個小文件,以便改善組織和更易維護(hù),特別是在團(tuán)隊開發(fā)的過程中。

    動作要領(lǐng)

    將一個struts-config.xml分解為多個配置文件。每一個都必須是良構(gòu)的,并且能過通過struts-config XML DTD的校驗(yàn)。將這些文件作為ActionServlet在web.xml中的初始化參數(shù)config的參數(shù)值引用,如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>

    當(dāng)ActionServlet被載入時, Struts 將多個文件在內(nèi)存中合并成一個單一的文件。

    動作變化

    對那些不是最細(xì)微的應(yīng)用而言,struts-config.xml文件會趨于變得大而笨重。許多應(yīng)用可能具有數(shù)以百計的action。將這個文件結(jié)合CVS使用,那么團(tuán)隊中的開發(fā)人員就會訪問相同的文件。

    Struts 1.1 引入了對多配置文件的支持。每一個配置文件都必須是一個有效的XML 文件并且必須符合struts-config XML DTD。在可以在web.xml中將這些文件聲明為ActionServlet的初始化參數(shù)config的值。你可以將這些文件指定為逗號分隔的路徑列表。運(yùn)行時,這些文件會在內(nèi)存中合并成一個文件。如果出現(xiàn)重復(fù)元素,比如具有相同的name屬性的兩個不同的form bean 聲明,則最后一個讀入的配置優(yōu)先。

    因?yàn)橹皇鞘褂枚嗯渲梦募⒉灰馕吨仨氁褂肧truts modules。事實(shí)上,你對一個模塊也可以使用多配置文件。在上面的方案中,config元素的param-name子元素的值對ActionServlet規(guī)定了默認(rèn)模塊的Struts 配置文件的路徑。附加模塊是通過config/module-name的param-name值規(guī)定的。Example 2-10 展示了一個Struts ActionServlet聲明,其中具有一個默認(rèn)模塊和兩個附加模塊。默認(rèn)模塊是用兩個配置文件,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>

     

    如果你是團(tuán)隊開發(fā),可以考慮基于功能區(qū)域、用例、或者使用場景分解配置文件。每一個團(tuán)對稱員都可以集中于他們的職責(zé)領(lǐng)域而不用關(guān)心其他部分。

    相關(guān)招式

    第2.5式會詳細(xì)講解使用Struts module的細(xì)微之處。

    第1.8式如何自動產(chǎn)生struts 配置文件。

    posted @ 2005-05-13 10:53 鐵手 閱讀(3627) | 評論 (6)編輯 收藏
    Struts秘籍之第1段:第2.3式:在JSP中使用常數(shù)

    第2.3式. 在JSP中使用常數(shù)

    問題

    不通過scriptlets, 你想要在JSP中使用Java類中定義的應(yīng)用常數(shù)public static字段。

    動作要領(lǐng)

    使用Jakarta Taglibs的unstandard標(biāo)簽庫提供的bind標(biāo)簽來創(chuàng)建包含常數(shù)字段的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"/>

     

    動作變化

    大多數(shù)團(tuán)隊都費(fèi)力地通過使用publicstatic字段(常數(shù))來避免在Java類中使用硬編碼的字符串。不幸的是,不過是 Struts 還是 JSP都沒有提供相應(yīng)的手段來在JSP中不借助scriptlet 而使用這些常數(shù),如:

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


    但是有許多開發(fā)團(tuán)隊禁止,或者至少不贊成在JSP中使用scriptlet 。

    Scriptlets (<% . . . %>) 和運(yùn)行時表達(dá)式(<%= . . . %>) 都直接在JSP中置入Java代碼。它們不是與生俱來的惡人,但是它們因?yàn)槭沟媚愕捻撁嬷谢旌螲TML,JSP和Java代碼變得紛繁復(fù)雜,從而使開發(fā)效率大大降低。需要找到一種方法來避免使用scriptlets你將發(fā)現(xiàn)JSTL的引入就是為了解決這個可怕的scriptlet的問題。

    這種方法通過使用定制JSP標(biāo)簽來提供一種方式來解決這個窘境,即使用un:bind標(biāo)簽。該標(biāo)簽是unstandard標(biāo)簽庫的一部分,unstandard標(biāo)簽庫則是Jakarta Taglibs中的一個組件。unstandard標(biāo)簽庫包含已經(jīng)用于或者正在考慮用于標(biāo)準(zhǔn)標(biāo)簽庫的標(biāo)簽。標(biāo)準(zhǔn)標(biāo)簽庫是JSTL 規(guī)范的Jakarta Taglibs 的實(shí)現(xiàn)。

    unstandard標(biāo)簽庫可以從下面的地方下載:http://cvs.apache.org/builds/jakarta-taglibs-sandbox/nightly/projects/unstandard/. 為了使用這個庫,你需要將unstandard.jar和unstandard.tld文件拷貝到應(yīng)用的WEB-INF/lib目錄。

    un:bind標(biāo)簽提供了一種方法來創(chuàng)建JSP頁面上下文變量,它一般引用java類中的一個字段。字段可以是實(shí)例變量或者靜態(tài)變量。良好設(shè)計的Java 類一般都不會將實(shí)例變量暴露為公共字段,而大多數(shù)都將靜態(tài)變量暴露為公共字段。

    你可以創(chuàng)建一個使用Struts提供的靜態(tài)字段的簡單JSP頁面來看看這種方法是否可行。從Struts 1.1開始, Struts 所用的常數(shù)都放在org.apache.struts.Globals類中。這些常數(shù)的值指定了各種存儲在請求、會話、應(yīng)用上下文中的Struts相關(guān)實(shí)體的關(guān)鍵字值。Example 2-5 中的JSP頁面使用了un:bind標(biāo)簽來顯示這些值:

    Example 2-5. 使用bind 標(biāo)簽來訪問Struts全局常數(shù)

     

    <%@ 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 上下文屬性關(guān)鍵字,在其下存儲了為Struts controller servlet 定義的映射(如. /action/*或*.do)。

    在你需要以一種特殊的方式訪問常數(shù)時,un:bind標(biāo)簽是一個不錯的選擇。但是它還是有些麻煩,因?yàn)槟阈枰紫仁褂胾n:bind標(biāo)簽來創(chuàng)建變量,然后使用bean:write或者c:out標(biāo)簽來顯示值。假定JSP顯示Globals類中的所有常數(shù),而這足有17 個之多。許多應(yīng)用嚴(yán)重依賴于常數(shù)并且可能有很多類,每一個類都包含很多字段。對每一個字段都使用一個單獨(dú)的標(biāo)簽是多么的麻煩。

    你可以使用一種替代方法,雖然需要一些額外的Java 代碼,它可以將常數(shù)綁定到一個JavaBean 的一個Map屬性之中。你可以將這個bean 存儲在servlet 上下文中。然后就可以通過bean:write和c:out標(biāo)簽直接訪問這些值了。Example 2-6中的Constants類定義了一個包含Struts Globals類中的常數(shù)的map屬性的JavaBean 。Example 2-7 中的ConstantsPlugin則將Constants的一個實(shí)例載入到servlet context中。

    Example 2-6. 包含Struts全局常數(shù)的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. 將常數(shù)載入到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載入的常數(shù)的JSP頁面。第一個常數(shù)使用Struts bean:write標(biāo)簽,第二個則使用JSTL c:out標(biāo)簽。

    Example 2-8. 使用Struts 和JSTL訪問常數(shù)

     

    <%@ 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>

    這種方式的最大缺點(diǎn)是你必須手動創(chuàng)建持有常數(shù)值的map。如果類中添加了新的常數(shù),你必須修改Constants類的源代碼以便能夠獲取它。

    相關(guān)招式

    關(guān)于Jakarta Taglibs 項目的詳細(xì)信息可以訪問http://jakarta.apache.org/taglibs.

    第5.4式提供了如何從Struts 和JSTL訪問map的方法。

    Struts plug-ins 我們在第2.1式討論過。

    Kris Schneider 建立了一個類似于Example 2-6中的Constants類,使用反射來訪問特定類的公開靜態(tài)字段。源代碼可以從歸檔的struts-user mailing list 中找到:http://marc.theaimsgroup.com/?l=struts-user&m=108929374300664&w=2.

     

    posted @ 2005-05-12 11:01 鐵手 閱讀(2665) | 評論 (1)編輯 收藏
    Struts秘籍之第1段:第2.1式:關(guān)于標(biāo)簽庫聲明

    第2.2式. 標(biāo)簽庫聲明

    問題

    在每次你需要使用一個新的標(biāo)簽庫時,想要避免非要在web.xml中加入taglib元素。

    動作要領(lǐng)

    創(chuàng)建一個JSP 文件包含引用到你所使用的標(biāo)簽庫描述符的絕對路徑的taglib指令。Example 2-4 (taglibs.inc.jsp) 就展示了一個包含對Struts bean, html, 和logic標(biāo)簽庫聲明以及JSTL的core 和formatting 標(biāo)簽庫的taglib聲明的JSP 文件。

    Example 2-4. 通用標(biāo)簽庫聲明

     

    <%@ 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>
        

    因?yàn)槟阍趖aglib中使用的是絕對路徑,你將不需要在web.xml文件中輸入對應(yīng)的taglib元素。

    動作變化

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

    對于早于Servlet 2.3 規(guī)范的情況,你仍然需要在web.xml中聲明所有你所使用的JSP 標(biāo)簽。下面摘自web.xml部署描述符中的代碼片斷展示了用于Struts應(yīng)用的典型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 之后,標(biāo)簽庫的絕對URI 在該庫的標(biāo)簽庫描述符 (TLD) 文件中指定。比如,下面就是struts-bean.tld文件中的相應(yīng)聲明:

    <?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>

    任何需要使用這個標(biāo)簽庫的頁面都可以通過下面的頁面級指令來引用它。標(biāo)簽庫不需要再在web.xml文件中引用:

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

    如果你在整個應(yīng)用中使用相同的標(biāo)簽庫,你可以使用基本動作中所述的方法,即創(chuàng)建一個包含通用標(biāo)簽庫聲明指令的包含JSP文件。如果你引用了不需要的標(biāo)簽庫,其實(shí)也不會有太大的性能損失,所以你可以在每個JSP頁面中安全的包含這個文件。如果URI 改變,你將只需要修改一個地方而不是每一個JSP文件。

    Table 2-1 展示了版本1.1 和1.2 的Struts中的標(biāo)簽庫絕對URI的完整列表。

    Table 2-1. Struts 標(biāo)簽庫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

     

    有些開發(fā)人員喜歡使用絕對URI,而有些仍然喜歡使用web.xml的聲明。需要指出的是,后一種方式可以將你的應(yīng)用代碼和下層的標(biāo)簽庫改變隔離開來。如果URI 改變,你只需要修改web.xml文件中的相關(guān)聲明。你并不需要修改每個JSP頁面,包括被包含的JSP片斷。這種方式也是有效的,也有可取之處。最后,采用那種方式完全取決于個人喜好。

    相關(guān)招式

    JSP規(guī)范有一些稍微有點(diǎn)復(fù)雜的規(guī)則來解析標(biāo)簽庫的URI。詳細(xì)的信息可以參考JSP的規(guī)范,它可以在http://java.sun.com/jsp處下載。

    第3.1式將向你展示在Struts應(yīng)用中使用JSP 標(biāo)準(zhǔn)標(biāo)簽庫(JSTL) 。

     

    posted @ 2005-05-11 10:04 鐵手 閱讀(2482) | 評論 (1)編輯 收藏
    僅列出標(biāo)題
    共26頁: First 上一頁 18 19 20 21 22 23 24 25 26 下一頁 
    主站蜘蛛池模板: 国产精品玖玖美女张开腿让男人桶爽免费看 | 182tv免费视频在线观看| A片在线免费观看| 在线观看www日本免费网站| 久久久久国色AV免费观看性色| 国产美女精品视频免费观看| 亚洲熟伦熟女新五十路熟妇| 久久青青草原亚洲AV无码麻豆| 亚洲综合色7777情网站777| 美美女高清毛片视频黄的一免费 | 亚洲成av人片在www鸭子| 一级黄色免费毛片| 99久久精品免费视频| 久久综合AV免费观看| 亚洲性久久久影院| 亚洲男人天堂av| 亚洲欧美熟妇综合久久久久 | 国产免费牲交视频免费播放| 亚洲精品在线免费观看视频 | 久久久www成人免费毛片| 亚洲 自拍 另类小说综合图区| 亚洲第一中文字幕| 亚洲乱码无人区卡1卡2卡3| 成人一区二区免费视频| 亚洲人成免费电影| 深夜国产福利99亚洲视频| 日韩精品亚洲人成在线观看| 在线亚洲v日韩v| 99久久久国产精品免费蜜臀| 国产成人一区二区三区免费视频| 亚洲国产精品无码久久久不卡| 亚洲乱码中文字幕在线| 青青青国产手机频在线免费观看| 日本免费v片一二三区| 亚洲产国偷V产偷V自拍色戒| 香蕉大伊亚洲人在线观看| 国产成人免费AV在线播放| 国产精品免费综合一区视频| 久久亚洲精品无码aⅴ大香| 理论秋霞在线看免费| 91免费国产在线观看|