鐵手劍譜

          上善若水

          公告

          天下皆知美之為美,斯惡已;皆知善之為善,斯不善已。 故有無相生,難易相成,長短相形,高下相傾,音聲相和,前后相隨,恒也。
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          統(tǒng)計

          • 隨筆 - 127
          • 文章 - 1
          • 評論 - 952
          • 引用 - 26

          常用鏈接

          留言簿(49)

          隨筆分類(201)

          隨筆檔案(127)

          文章分類(1)

          文章檔案(1)

          DotNET

          Java站點

          我的其他空間

          朋友

          著名牛人

          搜索

          •  

          積分與排名

          • 積分 - 401271
          • 排名 - 141

          最新隨筆

          最新評論

          閱讀排行榜

          評論排行榜

          Struts秘籍之第1段:第2.1式:用插件來進行應(yīng)用初始化

          第2.1式. 用插件來進行應(yīng)用初始化

          問題

          在應(yīng)用啟動時需要裝入應(yīng)用初始化數(shù)據(jù)到context 中。

          動作要領(lǐng)

          創(chuàng)建一個類,實現(xiàn)org.apache.struts.action.PlugIn接口,并且在struts-config.xml文件中指定plug-in元素。下面的XML 片斷展示了一個plug-in 聲明以及一個嵌套的set-property元素來設(shè)置定制屬性:

           

          <plug-in className="com.oreilly.strutsckbk.CustomPlugin" >

            
          <set-property property="customData"

                             value
          ="Hello from the plugin"/>

          </plug-in>

           

          動作變化

          Struts提供了一個PlugIn接口,你可以用它來創(chuàng)建在應(yīng)用啟動時初始化的定制服務(wù)。PlugIn接口的Java源代碼示于Example 2-1. (為了清晰起見,去除了JavaDoc 文檔)

          Example 2-1. Struts PlugIn 接口

           

          package org.apache.struts.action;

          import javax.servlet.ServletException;
          import org.apache.struts.config.ModuleConfig;

          public interface PlugIn {

              
          public void destroy( );

              
          public void init(ActionServlet servlet, ModuleConfig config)
                  throws ServletException;
          }

           

          為了實現(xiàn)一個plug-in,只需要實現(xiàn)這個接口并且在struts-config.xml文件中聲明這個plug-in 實現(xiàn)。有兩個方法必須被實現(xiàn):即init()和destroy( ), 它們在插件的生命周期中被調(diào)用。Struts 在啟動ActionServlet時實例化plug-in 之后調(diào)用init( )。Struts則在ActionServlet被銷毀時調(diào)用destroy()方法,通常是在一個用服務(wù)器停止時。首先,這個 plug-in 特征似乎是很單純和有限的。然而,通過使用Struts的另外一個特征,即set-property元素,你可以將特殊的信息傳遞到plug-in中。這種能力增強了這些類的靈活性。

          set-property元素被幾乎所有定義Struts實體的元素所支持,比如form-bean, action-mapping, action, 以及plug-in。set-property元素有兩個屬性:namevalueStruts調(diào)用name屬性的值指定的property的setter方法,將property設(shè)置為value屬性的字符串值。

          對給定plug-in的所有set-property元素都將在調(diào)用plug-in的init( )方法之前進行處理。這允許plug-in 在init( )方法中使用屬性的值。

          如果對一個plug-in使用多個set-property元素, Struts不能保證它們被調(diào)用的順序。每個setter方法都應(yīng)該獨立于其他任何方法。

           

          Struts 將對ActionServlet和plug-in的ModuleConfig的引用作為引數(shù)傳遞給init( )方法。ActionServlet允許訪問ServletContext來進行應(yīng)用范圍的對象存儲。ActionServlet還可以允許你訪問更多高級的容器管理的J2EE 組件,比如數(shù)據(jù)源和消息隊列。ModuleConfig允許你訪問定義plug-in 的模塊的Struts配置。

          每個Struts 應(yīng)用至少有一個模塊:默認模塊。如果你不熟悉模塊,我們將在第2.5式中講解之。

          為了更具體一些,請考慮一個簡單的,但仍然相關(guān)的例子。你需要定義一個plug-in,它可以使你決定應(yīng)用何時啟動,以及它啟動和運行了多長時間。你可以使用下面所示的類跟蹤和報告你的應(yīng)用的運行時間。

          Example 2-2. Application uptime tracker 對象

           

          package com.oreilly.strutsckbk;

          import java.util.Date;

          public class TimeTracker {

            
          private long startUpTimeMillis;
            
          private Date startedOn;

            
          public TimeTracker( ) {
               startUpTimeMillis 
          = System.currentTimeMillis( );
               startedOn 
          = new Date( );
             }


            
          public long getUptime( ) {
              
          return System.currentTimeMillis( ) - startUpTimeMillis;
            }


            
          public Date getStartedOn( ) {
              
          return startedOn;
            }

          }

           

          創(chuàng)建一個PlugIn接口的實現(xiàn),比如Example 2-3所示,它實例化了TimeTracker。plug-in 通過plug-in 屬性的值將TimeTracker實例保存在ServletContext中。你可以使用這個值來從Servlet上下文中獲取TimeTracker實例。雖然這個值是硬編碼的,使用屬性也提供了更大的靈活性。

          Example 2-3. Time tracker plugin

           

          package com.oreilly.strutsckbk;

          import javax.servlet.ServletException;

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

          public class TimeTrackerPlugin implements PlugIn {

              
          private String contextKey;
             
             
          public void setContextKey(String key) {
                 
          this.contextKey = key;
             }

             
             
          public void init(ActionServlet servlet, ModuleConfig conf)
                   throws ServletException 
          {
                servlet.getServletContext( ).setAttribute(contextKey, 
          new TimeTracker( ));
             }


             
          public void destroy( ) {
              }

          }

           

          現(xiàn)在你已經(jīng)有了為plug-in 創(chuàng)建的類,你可以通過在struts-config.xml中加入plug-in元素來將其集成到Struts 應(yīng)用中。

           

          <plug-in className="com.oreilly.strutsckbk.TimeTrackerPlugin">
              
          <set-property property="contextKey" value="timeTracker"/>
          </plug-in>

           

          plug-in 在servlet 上下文中存儲了time tracker對象。可以訪問TimeTracker來顯示關(guān)于應(yīng)用啟動運行時間的信息,下面是相關(guān)的JSP 片斷:

           

          <h4>Continuously running since 
              
          <bean:write name="timeTracker" 
                      property
          ="startedOn" 
                        format
          ="MM/dd/yyyy HH:mm"/> for
              
          <bean:write name="timeTracker" 
                      property
          ="uptime"/> milliseconds!
          </h4>

           

          你可以使用一個servlet 來載入像Struts plug-in之類的初始化數(shù)據(jù)。具有l(wèi)oad-on-startup初始化參數(shù)的servlet,應(yīng)將其設(shè)置為較低的數(shù)值,比如1, 一保證它們在應(yīng)用啟動時載入。容器在實例化Servlet之后將調(diào)用servlet的init( )方法。但是Struts plug-in 方式由多個優(yōu)點。首先,大多數(shù)Struts 應(yīng)用在其初始化設(shè)置后不需要修改web.xml文件。必須在web.xml中聲明額外的Servlet意味著要維護額外的文件。其次,如果需要PlugIn接口提供對特定Struts信息的訪問。最后,因為plug-in 的生命周期緊隨ActionServlet的生命周期,所以可以保證在你的Struts應(yīng)用所需時數(shù)據(jù)有效。

          相關(guān)招式

          第2.8式展示了set-property元素的另一種用法。Struts 文檔中關(guān)于plug-in 的信息可以訪問http://jakarta.apache.org/struts/userGuide/building_controller.html#plugin_classes.

          你也可以使用一個Servlet 上下文listener 來載入初始化數(shù)據(jù)。

           

          posted @ 2005-05-10 11:50 鐵手 閱讀(3285) | 評論 (2)編輯 收藏
          Struts秘籍之第1段:配置Struts應(yīng)用

          第1段. 配置Struts應(yīng)用

          介紹

          Struts 為我們提供了一個靈活的框架。它可以以很多不同的方式進行使用,并且可以在多種不同的層面進行定制和擴展。這種靈活性的結(jié)果是,許多開發(fā)人員不知道如何配置Struts 來適應(yīng)他們的應(yīng)用。Struts 應(yīng)用可以通過web 應(yīng)用部署描述符web.xml文件和一個或者多個Struts 配置文件 (struts-config.xml)來進行配置。另外,Struts Validator 則通過另外的XML 文件來進行配置。

          這一段動作是關(guān)于處理Struts配置中的一些通用或者不怎么通用的情景。其中包括創(chuàng)建plug-in 以及一種簡單的有效的機制來解決大多數(shù)問題。我們還會討論多個配置文件的使用,以適應(yīng)團隊開發(fā)和結(jié)果化和分塊Web應(yīng)用本身。最后,我們會討論Struts內(nèi)建的擴展支持和定制配置屬性的使用。

          本段動作是“Struts秘籍”的第一段動作。

          posted @ 2005-05-10 10:45 鐵手 閱讀(3404) | 評論 (2)編輯 收藏
          Struts秘籍之起式:第1.8式:用XDoclet 產(chǎn)生Struts配置文件

          第1.8式. 使用XDoclet 產(chǎn)生Struts配置文件

          問題

          當你修改或者新建一個Action 或ActionForm時,你需要修改對應(yīng)的Struts 配置文件。

          動作要領(lǐng)

          使用XDoclet 工具,配合Ant,來處理Java代碼中可以自動產(chǎn)生truts-config.xml文件的注解。

          動作變化

          現(xiàn)在的大多數(shù)應(yīng)用軟件系統(tǒng)都有可執(zhí)行代碼文件文本配置文件組成。這種方式可以使你更容易的在各種不同的環(huán)境之間移植,并且減少必須針對各種不同部署而修改的代碼量。但是它帶來了另外一個負擔,那就是保持代碼和配置文件之間的一致性。

          XDoclet 工具,原本開發(fā)來是針對EJB的開發(fā),它就可以解決這個問題。通過XDoclet,開發(fā)者能夠在代碼中放置能夠描述與代碼相關(guān)的配置屬性的注解,這些注解非常類似于JavaDoc 標簽。在構(gòu)建時,你可以使用定制的Ant 任務(wù),由它來使用XDoclet 從而處理這些標簽并產(chǎn)生對應(yīng)的XML 配置文件。

          對Struts來說,XDoclet 可以產(chǎn)生struts-config.xml文件中的下列元素:

          • action 元素
          • form-bean 元素

          另外, XDoclet 還可以創(chuàng)建字段級的Struts Validator 配置,通常是位于validation.xml 文件之中。最后,如果你要映射EJB 實體Bean的屬性到Struts ActionForms, XDoclet 可以不產(chǎn)生ActionForm 的Java 源代碼。

           

           

          XDoclet可以從http://xdoclet.sourceforge.net處下載。請根據(jù)相關(guān)的安裝指導進行安裝。你還需要安裝Ant

           

           

          首先,你需要添加一個任務(wù)到你的Ant 的build 腳本文件中,該任務(wù)可稱為XDoclet 任務(wù)。Example 1-9展示了一個為struts-example 應(yīng)用產(chǎn)生struts-config.xml 文件的Ant任務(wù)。

          Example 1-9. Webdoclet Ant target

           

          <target name="webdoclet" depends="init">
            
          <taskdef 
                
          name="webdoclet"
                classname
          ="xdoclet.modules.web.WebDocletTask"
                classpathref
          ="project.class.path"/>
            
          <webdoclet
                
          mergedir="${merge.dir}"
                destdir
          ="${generated.xml.dir}"
                excludedtags
          ="@version,@author"
                force
          ="${xdoclet.force}">
              
          <fileset dir="${src.dir}">
                
          <exclude name="**/*Registration*.java"/>
                
          <include name="**/*.java"/>
              
          </fileset>
              
          <strutsconfigxml
                      
          version="1.1"/>
            
          </webdoclet>
          </target>

           

          這個目標(target)調(diào)用webdoclet 定制Ant任務(wù),它是由XDoclet提供的。此任務(wù)可以產(chǎn)生多個Web應(yīng)用相關(guān)的工件,包括 web.xml 文件, struts-config.xml 文件,validation.xml 文件。對Struts 應(yīng)用來說,你可能不需要產(chǎn)生web.xml 文件;因為對Struts 應(yīng)用,該文件并不經(jīng)常改變。在Example 1-9中,webdoclet 任務(wù)被用于產(chǎn)生struts-config.xml 文件。

          并不是所有的struts-config.xml 文件中的元素都可以或者應(yīng)該從注解的代碼中產(chǎn)生。像全局forward, 全局例外處理,消息資源,插件等都并不和特定的Action 或ActionForm 類相關(guān)。

          XDoclet 是通過讓你在位于特定的目錄中的文件中放置靜態(tài)配置來處理這些事情的。在構(gòu)建時, XDoclet 將這些文件中代碼中產(chǎn)生的元素進行合并。你可以通過mergedir 屬性來指定這些靜態(tài)文件的位置。destdir 屬性則指定將創(chuàng)建的文件的存放目錄。通常,你需要為這些產(chǎn)生的文件創(chuàng)建一個單獨的目錄,然后在其成功創(chuàng)建后將它們拷貝到適當?shù)哪夸浿幸还泊虬蛘卟渴稹xcludedtags 屬性指定排除在XDoclet 處理之外的JavaDoc 標簽。

           

          執(zhí)行@author @version標簽是通用的。

          最后, force 屬性強制XDoclet 產(chǎn)生一個新的配置文件。如果這個屬性為false, 新文件只有在對應(yīng)的注解Java代碼發(fā)生改變時才會產(chǎn)生。

          fileset 元素告訴XDoclet 要處理哪些Java 源文件。你可以使用該元素來指示那個源文件包含XDoclet 注解。例如,struts-example 應(yīng)用使用了兩個Struts 配置文件:struts-config.xml 和 struts-config-registration.xml。如Example 1-9所示,你可以通過設(shè)置fileset元素來排除包含名稱"Registration"的類從而排除放入struts-config-registration.xml 文件中的元素。

          strutsconfigxml 元素指示XDoclet 產(chǎn)生struts-config.xml 文件。XDoclet 默認情況下將產(chǎn)生Struts 1.0兼容的配置文件。因此,如果你用Struts1.1你必須指定版本為"1.1"。XDoclet 也使用該屬性提供對Struts 1.2 的支持。

          一旦你在構(gòu)建文件中創(chuàng)建了這個target,你就可以添加注解到Action 和ActionForm 類的代碼中。對ActionForm, XDoclet 提供了@struts.form 標簽來產(chǎn)生form-bean 元素。下面的代碼展示了如何在struts-example 應(yīng)用的SubscriptionForm中使用這個類一級的標簽:

           

          /**
           * 用于用戶概要頁面的
           *
           * @struts.form 
           *    name="subscriptionForm"
           
          */


          public final class SubscriptionForm extends ActionForm  {
            
          }

           

          在webdoclet target 被執(zhí)行時,將在struts-config.xml 中產(chǎn)生下面的form-beans 元素:

           <!-- ========== Form Bean Definitions =================================== -->
            
          <form-beans>
              
          <form-bean
                
          name="subscriptionForm"
                type
          ="org.apache.struts.webapp.example.SubscriptionForm"
              
          />

              
          <!--
                   If you have non XDoclet forms, define them in a file called
                   struts-forms.xml and place it in your merge directory.
              
          -->
            
          </form-beans>

          XDoclet 使用你在標簽中指定的名稱來產(chǎn)生form-bean 元素,并且使用ActionForm 的權(quán)限定類名來創(chuàng)建type 屬性。這一特征也是XDoclet最大的優(yōu)點之一。你的類的屬性,比如類名、包名、方法名等,對XDoclet 都可使用,就像它們被用于產(chǎn)生Javadocs 一樣。XDoclet 將在產(chǎn)生的文件的適當位置使用這些值。

          如果你修改了一個類的類名或者包名, XDoclet產(chǎn)生正確的配置元素而不會混淆。雖然IDE 的重構(gòu)工具也可以處理這種類型的改變,但是使用XDoclet這是另外一種可以集成到現(xiàn)有的Ant構(gòu)建過程中的解決方案。

           

          你可以使用XDoclet 來從Action類中產(chǎn)生action 元素。XDoclet 使用@struts.action 標簽來指定action 元素。另外,@struts.action-forward 標簽則可以指定嵌套的forward 元素。同時@struts.action-exception標簽可以用于產(chǎn)生action特定的宣稱性例外處理。struts-example 中的LoginAction.java 類示于下方,其中還包括產(chǎn)生完整的action元素所需的注解:

           

          /**
           * Implementation of <strong>Action</strong> that validates a user logon.
           * 
           * @struts.action
           *    path="/logon"
           *    name="logonForm"
           *    scope="session"
           *    input="logon"
           * 
           * @struts.action-exception
           *    key="expired.password"
           *    type="org.apache.struts.webapp.example.ExpiredPasswordException"
           *    path="/changePassword.jsp"
           
          */

          public final class LogonAction extends Action {
            
          }

           

          標簽中的語法必須嚴格匹配對應(yīng)的XML元素的語法。如果你已經(jīng)有定義了的 struts-config.xml 文件,一個好辦法是將struts-config.xml中的XML元素剪切粘貼到Action 類中。使 XDoclet 能夠認可這些標簽作必要的修改。下面位于LogoffAction.java 文件中的注解展示了如何使用@struts.action-forward 標簽:

          /**
           * Implementation of <strong>Action</strong> that processes a
           * user logoff.
           *
           * @struts.action
           *    path="/logoff"
           * 
           * @struts.action-forward
           *    name="success"
           *    path="/index.jsp"
           
          */


          public final class LogoffAction extends Action {
            
          }



          雖然XDoclet 對產(chǎn)生struts-config.xml 文件大有幫助,它也并不是萬能的。某些action 元素并不與任何你創(chuàng)建的Action 類相對應(yīng)。例如,struts-example 應(yīng)用中就包含下面的action mapping:

          <action path="/tour"
               forward
          ="/tour.htm">
          </action>

           

          struts-config.xml 文件可以包含全局forwards, 全局例外, controller 元素,消息資源元素以及plug-in 元素。XDoclet 不能產(chǎn)生這些元素。但是它可以和飽含這些配置元素的文件進行合并以產(chǎn)生完整的struts-config.xml 文件。Table 1-5列出了在創(chuàng)建struts-config.xm文件時XDoclet希望在mergedir屬性指定的目錄中找到的文件清單。

          Table 1-5. 可以合并到產(chǎn)生的struts-config.xml文件中的配置文件

          合并文件

          用途

          struts-data-sources.xml

          一個XML 文檔,包含可選的data-sources元素

          struts-forms.xml

          一個XML 未解析的實體,包含form-bean 元素,作為非XDoclet forms的補充

          global-exceptions.xml

          一個XML 文檔,包含可選的global-exceptions 元素

          global-forwards.xml

          一個XML 文檔,包含可選的global-forwards 元素

          struts-actions.xml

          一個可選的XML 未解析實體,包含action 元素,作為非XDoclet actions的補充

          struts-controller.xml

          一個XML 文檔,包含可選的controller 元素

          struts-message-resources.xml

          一個可選的XML 未解析實體,包含message-resources元素

          struts-plugins.xml

          一個可選的XML 未解析實體,包含 plug-in 元素

           

          大多數(shù)開發(fā)者都認為, XDoclet 對Struts 開發(fā)并不像他用在EJB 開發(fā)那么能干。比如,如果你在struts-config.xml中主要使用動態(tài)action forms ,那么從ActionForm 中產(chǎn)生form-bean 元素并不會為你帶來任何好處。但是,如果你開發(fā)一個具有大量action元素的大型應(yīng)用,并使用Ant, 那么 XDoclet 則是值得考慮的。XDoclet 也支持其它類型的配置文檔,比如Hibernate mappings的生成。

          相關(guān)招式

          第1.7式提供了一個模版Ant build 腳本,你可以在其中添加XDoclet target。

          關(guān)于XDoclet 的詳細信息訪問http://xdoclet.sourceforge.net.

          你也可以閱讀Manning 出版Craig Walls和Norman Richards所著的Xdoclet in Action 其中包括Xdoclet在Struts, Webwork, JDO, EJB,JMX, SOAP,Web Service 等方面開發(fā)的應(yīng)用。http://www.manning.com/walls

           

          posted @ 2005-05-09 11:07 鐵手 閱讀(2760) | 評論 (1)編輯 收藏
          Struts秘籍之起式:第1.7式:使用Ant進行構(gòu)建和部署

          第1.7式. 使用Ant 進行構(gòu)建和部署

          問題

          你希望能夠以一種能夠重復和可移動的情況下構(gòu)建和部署Struts 應(yīng)用。

          動作要領(lǐng)

          可以創(chuàng)建一個Ant (http://ant.apache.org) 構(gòu)建腳本并使用Ant (或者你的 IDE集成的Ant ) 來編譯、測試、打包和部署你的應(yīng)用。Example 1-8是一個樣板的Ant build 文件,可以編譯、構(gòu)建和部署Struts 應(yīng)用

          Example 1-8. 樣板Ant build 文件

           

           

          <project name="jsc-ch01-r02" default="dist" basedir=".">
            
          <description>
                Jakarta Struts Cookbook - Ant Template
            
          </description>

            
          <!-- Enable access to environment variables -->
            
          <property environment="env"/>

            
          <!-- Set to use JDK 1.4 -->
            
          <property name="build.compiler" value="javac1.4"/>

            
          <!-- set global properties for this build -->
            
          <property name="src.dir" location="src"/>
            
          <property name="build.dir" location="build"/>
            
          <property name="dist.dir"  location="dist"/>
            
          <property name="server.dir" location="${env.CATALINA_HOME}"/>
            
          <property name="servlet.jar" 
               location
          ="${server.dir}/common/lib/servlet-api.jar"/>
            
          <property name="jsp.jar" location="${server.dir}/common/lib/jsp-api.jar"/>
            
          <property name="struts.dist.dir" location="c:/jakarta-struts-1.1/lib"/>

            
          <!-- Struts -->
            
          <fileset id="struts.lib.files" dir="${struts.dist.dir}">
                 
          <include name="**/*.jar"/>
            
          </fileset>
            
          <path id="struts.classpath">
                 
          <fileset refid="struts.lib.files"/>
            
          </path>

            
          <path id="project.class.path">
              
          <pathelement location="${servlet.jar}"/>
              
          <pathelement location="${jsp.jar}"/>
              
          <path refid="struts.classpath"/>
            
          </path>

            
          <!-- Deployment Properties -->
            
          <property name="deploy.dir" location="${server.dir}/webapps"/>

            
          <target name="clean"
                  description
          ="clean up" >
              
          <!-- Delete the ${build.dir} and ${dist.dir} directory trees -->
              
          <delete dir="${build.dir}"/>
              
          <delete dir="${dist.dir}"/>
            
          </target>

            
          <target name="init">
              
          <!-- Create the build directory structure used by compile -->
              
          <mkdir dir="${build.dir}"/>
            
          </target>

            
          <target name="compile" depends="init"
                  description
          ="compile the source " >
              
          <!-- Compile the java code from ${src.dir} into ${build.dir} -->
              
          <javac srcdir="${src.dir}" destdir="${build.dir}" debug="on">
                
          <classpath>
                    
          <path refid="project.class.path"/>
                
          </classpath>
              
          </javac>

              
          <copy todir="${build.dir}">
                
          <fileset dir="${src.dir}">
                  
          <include name="**/*.properties"/>
                
          </fileset>
              
          </copy>
            
          </target>

            
          <target name="dist" depends="compile"
                  description
          ="generate the distribution" >

              
          <!-- Create the distribution directory -->
              
          <mkdir dir="${dist.dir}"/>

              
          <!-- Copy the build dir to WEB-INF/classes -->
              
          <mkdir dir="web/WEB-INF/classes"/>
                
              
          <copy todir="web/WEB-INF/classes">
                  
          <fileset dir="${build.dir}"/>
              
          </copy>

              
          <!-- Put everything in ${build} into the war file -->
              
          <war destfile="${dist.dir}/${ant.project.name}.war" 
                   webxml
          ="web/WEB-INF/web.xml">
                
          <fileset dir="web" excludes="**/web.xml"/>
                  
          <webinf dir="web/WEB-INF">
                    
          <include name="*.xml"/>
                    
          <exclude name="web.xml"/>
                  
          </webinf>
                
          <lib dir="web/WEB-INF/lib">
                  
          <include name="${struts.dist.dir}/**/*.jar"/>
                  
          <include name="${struts.dist.dir}/**/*.tld"/>
                
          </lib>
                
          <classes dir="build"/>
              
          </war>
            
          </target>

            
          <!-- Deploy the application by copying it to the deployment directory -->
            
          <target name="deploy" depends="dist"
                     description
          ="deploy to server" >
                
          <unjar src="${dist.dir}/${ant.project.name}.war"
                    dest
          ="${deploy.dir}/${ant.project.name}"/>
            
          </target>

          </project>

           

          動作變化

          上面展示的構(gòu)建文件可以知進行一些最小的修改就可以用于大部分的Struts web 應(yīng)用。你應(yīng)該將project元素的name屬性的值修改為你的應(yīng)用的名稱。項目名稱將用于創(chuàng)建WAR 是所用的名稱,以及應(yīng)用部署時的文件夾名稱。此外,你應(yīng)該將struts.dist.dir屬性的值設(shè)置為Struts 分發(fā)包所安裝的特定的lib目錄。

          基于Ant的構(gòu)建可以幫助你完成各種開發(fā)任務(wù):

          • 從源代碼控制系統(tǒng)(即, CVS)中獲取最新的源代碼
          • 將Struts 應(yīng)用打包為WAR 文件
          • 運行單元測試
          • 使用XDoclet 來從Ant中產(chǎn)生代碼和配置文件
          • 部署Struts應(yīng)用到應(yīng)用服務(wù)器中
          • 預(yù)編譯JSP 文件以檢測轉(zhuǎn)換錯誤

          通過使用構(gòu)建腳本來創(chuàng)建WAR 文件,你可以根據(jù)你覺得合適的方式來對源代碼和Struts 奮發(fā)的物理文件位置進行結(jié)構(gòu)化。然后你可以使用Ant 腳本將它們整合到一起。

          相關(guān)招式

          你可以訪問Ant 的站點獲取更多詳細的信息http://ant.apache.org。另外,Jesse E. Tilly 和Eric M. Burke (O'Reilly)所著的《Ant: The Definitive Guide》也是使用Ant的一個非常棒的參考。第1.8式將展示使用XDoclet 工具來產(chǎn)生Struts-的相關(guān)文件。

          posted @ 2005-05-08 09:49 鐵手 閱讀(1752) | 評論 (1)編輯 收藏
          Struts秘籍之起式:第1.6式:管理Struts配置文件

          第1.6式. 管理Struts 配置文件

          問題

          你需要在Struts配置文件中避免拼寫和其他低級錯誤,以及使得編輯和管理它們更容易些。

          動作要領(lǐng)

          使用Struts Console,或者其他IDE工具來查看、編輯和管理Struts 配置文件。

          動作變化

          Web應(yīng)用中最常見的錯誤原因之一就是拼寫錯誤。總體而言,大多數(shù)現(xiàn)代軟件包括Struts 都依賴于某種ASCII文本格式的配置文件和部署描述符,通常是XML。使用能夠進行校驗的XML 編輯器能夠有助于減少錯誤,但是,它卻不能消除路徑、form-bean名稱、類名等的拼寫和鍵入錯誤。

          你可以從http://www.jamesholmes.com下載Stuts Console,它提供了對Struts (struts-config.xml), Validator (validation.xml a和validator-rules.xml), 和Tiles (tiles-defs.xml) 配置文件的圖形化編輯。不需要進行手工編輯,你可以使用Struts Console 提供的基于Swing的編輯器進行。除了減少了輸入錯誤, Struts Console 還使你對這些文件有一個直觀和總體的視圖。你將發(fā)現(xiàn)這些特征在你的配置文件開始變得龐大的時候簡直是妙不可言。

          Struts Console 提供了一個聰明的圖形編輯器來處理Struts開發(fā)中所用的各種XML配置文件。Figure 1-2是struts-example應(yīng)用的struts-config.xml文件的視圖。

          Figure 1-2. Struts Console 中查看Struts 示例應(yīng)用

          clip_image001_0008.gif

           

           

          Editor tab 表現(xiàn)為兩個面板。左邊pane 包含一個組成配置文件的元素的樹形視圖。右邊則是圖形化編輯窗口。不同的編輯器將取決于所選擇的元素。在Figure 1-2中,在視圖中選擇了/saveSubscription action mapping ,右邊則顯示了特的配置細節(jié),并可以編輯它。

          配置文件的XML源代碼可以在一個只讀的窗口中顯示,可以通過選擇Source tab 來打開它。你在圖形環(huán)境中所作的修改,都可以同步反映在源代碼中。當然,除非你保存文件,它不會提交進行保存。

          2

          因為Struts Console解析和管理實際的XML 數(shù)據(jù),當重新保存文件時,它不會在原始文件中包含任何定制格式化和注釋信息。

           

          Struts Console 不同于常規(guī)的XML editor 之處是Struts console 能夠理解元素之間如何關(guān)聯(lián)。例如,在Figure 1-2, 有效可用的Form Beans 可以使用下拉列表來顯示。點擊Form Bean 下拉列表右邊的View 按鈕將顯示選定的Forms 定義。Form Bean 編輯器將顯示出來,而左邊pane的樹形視圖將被更新以反映正在查看的Form Bean。

          目前, Struts Console Version 4.4.1支持下列文件的編輯和創(chuàng)建:

          • Struts 配置文件( Struts 1.2, 1.1, 和 1.0); 即, struts-config.xml
          • Tiles 配置文件;即tiles-defs.xml
          • Validator 配置文件( Struts 1.1, 和 1.0);即, validator-rules.xml, validation.xml
          • JSP Tag Library Descriptor (TLD) (JSP Version 1.2, 1.1);即, struts-html.tld

          除了將它用作一個標準的程序之外,Struts Console 還可以插入到大多數(shù)Java IDE中,比如Eclipse, NetBeans, 和IntelliJ IDEA。

          使用任何圖形編輯器之前,最好是要熟悉和理解Struts 配置文件中的結(jié)構(gòu)和元素的含義。只有這樣,你才可以使用工具來隱藏具體的結(jié)構(gòu)而作你想做的事情。這有點類似于你心學習一種編程語言的時候,在依賴于IDE之前,還是最好使用簡單的文本編輯器和命令行工具。最然圖形化工具能夠減少你調(diào)試的精力和時間,你也需要理解文件的基本結(jié)構(gòu),以便能夠發(fā)生錯誤是找出具體原因。

          相關(guān)動作

          James Holmes的站點可以下載Struts Console。這個站點還提供其他Struts Console的詳細資料。James 還開發(fā)其他工具,比如Spring Console。http://www.jamesholmes.com.

          Struts 1.2 包括了一個plug-in, 即ModuleConfigVerifier,它用來捕捉應(yīng)用初始化時發(fā)生的配置錯誤。關(guān)于此插件的詳細信息,參見http://struts.apache.org/api/org/apache/struts/plugins/ModuleConfigVerifier.html.

          MyEclipse 是Eclipse IDE的一個定制化版本。這個漂亮的IDE提供了一個精心裁減的J2EE 應(yīng)用開發(fā)環(huán)境。目前,最新的 MyEclipse 已經(jīng)支持Eclipse 3.0。但是MyEclipse 不是免費的,年訂閱費大概是不到$50 。如果你想要一個一站式的IDE,它還是值得的。可訪問http://www.myeclipse.com.

          Struts Studio 也是一個非常雄心勃勃的開發(fā)工具,視圖提供商業(yè)級的Struts開發(fā)工具。可訪問,http://www.exadel.com/products_strutsstudio.htm.

          另外,M7的Nitrox也是非常優(yōu)秀個開發(fā)工具。www.M7.com

          商業(yè)IDE幾乎全部提供Struts的開發(fā)工具和環(huán)境,包括:IBM的WebSphere Application Developer Studio, WebSphere Site Developer Studio, Oracle 的JDeveloper , Borland JBuilder, BEA Weblogic Workshop。其中, oracle 和 Bean本身對Struts作了一些擴展和定制化。可以訪問個公司的網(wǎng)站獲得詳細信息。

          posted @ 2005-04-30 11:04 鐵手 閱讀(2462) | 評論 (3)編輯 收藏
          僅列出標題
          共26頁: First 上一頁 18 19 20 21 22 23 24 25 26 下一頁 
          主站蜘蛛池模板: 苍南县| 盖州市| 白玉县| 韩城市| 邹平县| 惠安县| 福清市| 马龙县| 交城县| 镇康县| 苏尼特右旗| 五大连池市| 高邮市| 无为县| 即墨市| 保靖县| 哈巴河县| 苍梧县| 长寿区| 永福县| 桐梓县| 平度市| 武清区| 英超| 澜沧| 乌兰县| 富源县| 景德镇市| 客服| 安多县| 宜阳县| 瑞安市| 昭平县| 行唐县| 抚州市| 天全县| 朝阳市| 天峨县| 临湘市| 黄陵县| 赤城县|