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

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

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

    鐵手劍譜

    上善若水
    數據加載中……

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

    第2.1式. 用插件來進行應用初始化

    問題

    在應用啟動時需要裝入應用初始化數據到context 中。

    動作要領

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

     

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

      
    <set-property property="customData"

                       value
    ="Hello from the plugin"/>

    </plug-in>

     

    動作變化

    Struts提供了一個PlugIn接口,你可以用它來創建在應用啟動時初始化的定制服務。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;
    }

     

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

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

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

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

     

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

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

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

    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;
      }

    }

     

    創建一個PlugIn接口的實現,比如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( ) {
        }

    }

     

    現在你已經有了為plug-in 創建的類,你可以通過在struts-config.xml中加入plug-in元素來將其集成到Struts 應用中。

     

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

     

    plug-in 在servlet 上下文中存儲了time tracker對象。可以訪問TimeTracker來顯示關于應用啟動運行時間的信息,下面是相關的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之類的初始化數據。具有load-on-startup初始化參數的servlet,應將其設置為較低的數值,比如1, 一保證它們在應用啟動時載入。容器在實例化Servlet之后將調用servlet的init( )方法。但是Struts plug-in 方式由多個優點。首先,大多數Struts 應用在其初始化設置后不需要修改web.xml文件。必須在web.xml中聲明額外的Servlet意味著要維護額外的文件。其次,如果需要PlugIn接口提供對特定Struts信息的訪問。最后,因為plug-in 的生命周期緊隨ActionServlet的生命周期,所以可以保證在你的Struts應用所需時數據有效。

    相關招式

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

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

     

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

    第1段. 配置Struts應用

    介紹

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

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

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

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

    第1.8式. 使用XDoclet 產生Struts配置文件

    問題

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

    動作要領

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

    動作變化

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

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

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

    • action 元素
    • form-bean 元素

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

     

     

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

     

     

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

    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)調用webdoclet 定制Ant任務,它是由XDoclet提供的。此任務可以產生多個Web應用相關的工件,包括 web.xml 文件, struts-config.xml 文件,validation.xml 文件。對Struts 應用來說,你可能不需要產生web.xml 文件;因為對Struts 應用,該文件并不經常改變。在Example 1-9中,webdoclet 任務被用于產生struts-config.xml 文件。

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

    XDoclet 是通過讓你在位于特定的目錄中的文件中放置靜態配置來處理這些事情的。在構建時, XDoclet 將這些文件中代碼中產生的元素進行合并。你可以通過mergedir 屬性來指定這些靜態文件的位置。destdir 屬性則指定將創建的文件的存放目錄。通常,你需要為這些產生的文件創建一個單獨的目錄,然后在其成功創建后將它們拷貝到適當的目錄中一共打包或者部署。excludedtags 屬性指定排除在XDoclet 處理之外的JavaDoc 標簽。

     

    執行@author @version標簽是通用的。

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

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

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

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

     

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


    public final class SubscriptionForm extends ActionForm  {
      
    }

     

    在webdoclet target 被執行時,將在struts-config.xml 中產生下面的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 使用你在標簽中指定的名稱來產生form-bean 元素,并且使用ActionForm 的權限定類名來創建type 屬性。這一特征也是XDoclet最大的優點之一。你的類的屬性,比如類名、包名、方法名等,對XDoclet 都可使用,就像它們被用于產生Javadocs 一樣。XDoclet 將在產生的文件的適當位置使用這些值。

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

     

    你可以使用XDoclet 來從Action類中產生action 元素。XDoclet 使用@struts.action 標簽來指定action 元素。另外,@struts.action-forward 標簽則可以指定嵌套的forward 元素。同時@struts.action-exception標簽可以用于產生action特定的宣稱性例外處理。struts-example 中的LoginAction.java 類示于下方,其中還包括產生完整的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 {
      
    }

     

    標簽中的語法必須嚴格匹配對應的XML元素的語法。如果你已經有定義了的 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 對產生struts-config.xml 文件大有幫助,它也并不是萬能的。某些action 元素并不與任何你創建的Action 類相對應。例如,struts-example 應用中就包含下面的action mapping:

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

     

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

    Table 1-5. 可以合并到產生的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 元素

     

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

    相關招式

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

    關于XDoclet 的詳細信息訪問http://xdoclet.sourceforge.net.

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

     

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

    第1.7式. 使用Ant 進行構建和部署

    問題

    你希望能夠以一種能夠重復和可移動的情況下構建和部署Struts 應用。

    動作要領

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

    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>

     

    動作變化

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

    基于Ant的構建可以幫助你完成各種開發任務:

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

    通過使用構建腳本來創建WAR 文件,你可以根據你覺得合適的方式來對源代碼和Struts 奮發的物理文件位置進行結構化。然后你可以使用Ant 腳本將它們整合到一起。

    相關招式

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

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

    第1.6式. 管理Struts 配置文件

    問題

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

    動作要領

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

    動作變化

    Web應用中最常見的錯誤原因之一就是拼寫錯誤。總體而言,大多數現代軟件包括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 還使你對這些文件有一個直觀和總體的視圖。你將發現這些特征在你的配置文件開始變得龐大的時候簡直是妙不可言。

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

    Figure 1-2. Struts Console 中查看Struts 示例應用

    clip_image001_0008.gif

     

     

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

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

    2

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

     

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

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

    • 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 還可以插入到大多數Java IDE中,比如Eclipse, NetBeans, 和IntelliJ IDEA。

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

    相關動作

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

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

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

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

    另外,M7的Nitrox也是非常優秀個開發工具。www.M7.com

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

    posted @ 2005-04-30 11:04 鐵手 閱讀(2464) | 評論 (3)編輯 收藏
    僅列出標題
    共26頁: First 上一頁 18 19 20 21 22 23 24 25 26 下一頁 
    主站蜘蛛池模板: 亚洲AV无码1区2区久久| 日产乱码一卡二卡三免费| 窝窝影视午夜看片免费| 亚洲AV日韩AV天堂久久| 亚洲国产精品无码专区在线观看 | 免费人成在线观看69式小视频| 搜日本一区二区三区免费高清视频| 免费看AV毛片一区二区三区| 亚洲综合色区中文字幕| 无码中文在线二区免费| 亚洲日韩国产AV无码无码精品| 日韩成全视频观看免费观看高清| 校园亚洲春色另类小说合集| 四虎永久在线精品免费观看地址| 日韩一级片免费观看| 亚洲色精品vr一区二区三区| 香蕉免费一区二区三区| 亚洲人成网站日本片| 女人张开腿等男人桶免费视频| 亚洲色偷偷综合亚洲av78| 免费萌白酱国产一区二区| 一级成人a做片免费| 亚洲va在线va天堂va四虎| 五月婷婷综合免费| 三级毛片在线免费观看| 欧美亚洲国产SUV| 亚洲一区二区在线免费观看| 亚洲伦理一二三四| 日韩亚洲精品福利| 国产精品视频白浆免费视频| 亚洲AV无码乱码在线观看代蜜桃| 成人亚洲综合天堂| 精品无码AV无码免费专区 | 亚洲精品美女久久7777777| 免费人成视网站在线观看不卡| 中文无码成人免费视频在线观看| 亚洲天堂2017无码中文| 国产AV无码专区亚洲AV手机麻豆| 免费看男女下面日出水来| 人妻免费久久久久久久了| 亚洲最新中文字幕|