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

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

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

    posts - 297,  comments - 1618,  trackbacks - 0
      原文出處:http://tech.it168.com/j/2007-08-27/200708271256784.shtml
      本文不得轉載。

    一.AppFuse簡介

       Appfuse是一個開放源碼的項目和應用程序,它由Matt Raible 開發,它繼承了流行的SpringHibernateibatisstrutsXdcoletjunit等基礎框架,并提供了對TaperstryJSF等的支持。在用AppFuse開發時,用戶可以自由選擇StrutsSpring MVCWebworkTaperstryJSF這幾個MVC框架。它采用測試驅動(TDD)的開發方式,使用JUnit測試各層。

       它使用Ant來驅動測試、代碼生成、編譯和部署。在用AppFuse創建一個項目時,與大部分IDE提供的“new project”向導不同,它創建的項目最開始就包含很多的類和文件,這些文件用來實現特性。用AppFuse創建項目,減少了我們編寫繁瑣而枯燥的CRUD代碼所需的大部分時間,提高了我們的編碼效率。并且它提供了很多應用程序的一些特性:認證和授權、用戶管理、密碼提醒、登記和注冊、URL重寫、模塊化布局等功能,進一步提高了我們的效率。

    二.AppFuse安裝

    1. JDK的安裝

     下載并安裝JDK1.5,并設定如下環境變量:

    JAVA_HOMEjdk安裝的路徑,eg. C:\Program Files\Java\jdk1.5.0

    CLASSPATH.;%JAVA_HOME%\lib

    Path:在該變量中增加項:%JAVA_HOME%\bin

    測試安裝是否成功的方法:在命令行中輸入:java –version,將輸出JDK的版本信息。

    2. ANT的安裝

     下載Ant并將其解壓到某目錄,eg. E:\apache-ant-1.6.5,設置如下環境變量:

     ANT_HOMEAnt的安裝路徑,eg. E:\apache-ant-1.6.5

     Path:在該變量中增加項:%ANT_HOME%\bin

    測試安裝是否成功的方法:在命令行中輸入:ant –version,將輸出Ant的版本信息。

    注意:為了AppFuse的正常工作,還需要將junit.jar包拷貝到%ANT_HOME%/lib目錄下。

    3. Tomcat的安裝

     下載并安裝Tomcat5.0.28到某目錄,eg. E:\Tomcat5.0.28,設置如下的環境變量:

     CATALINA_HOMEE:\Tomcat5.0.28

     Path:在該變量中增加項:%CATALINA_HOME %\bin

     測試安裝是否成功的方法:啟動Tomcat后,在瀏覽器中輸入如下地址:http://localhost:8080,將顯示Tomcat頁面。

    4. mysql的安裝

     安裝MySQL Server 5.0,設置字符集為UTF-8,設置如下環境變量:

     MYSQL_HOMEMySQL的安裝路徑,eg. C:\Program Files\MySQL\MySQL Server 5.0

     Path:在該變量中增加項:%MYSQL_HOME %\bin

    5. AppFuse的安裝

     https://appfuse.dev.java.net/下載Appfuse。筆者下載的是1.9.4版本。將其解壓到某目錄,eg. E:\appfuse

    修改文件database.properties.referencedatabase.properties,并去掉你不用的數據庫的設置,保留你所使用的數據庫,并設置連接地址,用戶名和密碼等信息。

    三.用AppFuse構建項目

    1. 建立新的項目(ant new

     在命令行中進入appfuse所在目錄,輸入ant new命令,系統顯示如下信息:

    E:\appfuse>ant new

    Buildfile: build.xml

    Trying to override old definition of datatype resources

    ……

    [input] What would you like to name your application [myapp]? [myapp]

       命令行提示輸入應用程序的名稱,例如輸入testAppfuse要注意項目名稱不能使用"test"或者包含"appfuse"或者以數字開頭,命令行顯示如下語句提示輸入數據庫的名稱:

    [input] What would you like to name your database [mydb]? [mydb]

    輸入數據庫名appfuse,命令行顯示如下語句提示輸入包名:

    [input] What package name would you like to use [org.appfuse]? [org.appfuse]

    輸入包名org.amigo,命令行顯示選擇Web MVC框架:

    [input] What web framework would you like to use [webwork,tapestry,spring,jsf,struts]? [struts]

    輸入選擇的Web MVC框架struts,命令行顯示如下:

         [echo] Creating new application named 'testAppFuse'...

         [copy] Copying 358 files to E:\testAppFuse

         ……

    BUILD SUCCESSFUL

    Total time: 10 minutes 12 seconds

    在末尾可看到BUILD SUCCESSFUL字樣,顯示操作成功。在appfuse同級目錄E:下,可看到新建的項目testAppFuse,在該目錄下生成了項目源碼。

    2. 建立數據庫與編譯源碼(ant setup

       進入在1中建立的項目目錄E:\testAppFuse,運行ant setup這一命令將會在MySql中創建前面指定的名稱的數據庫,并編譯源碼,打包發布到Tomcat中。

    注意:AppFuse默認情況下認為數據庫的root帳號密碼為空,如果你給數據庫設置了密碼,需要修改根目錄下的properties.xml文件。搜索屬性名為database.admin.password的標簽,將value改寫為實際的數據庫密碼。

    輸入ant setup后,顯示操作信息,末尾顯示“BUILD SUCCESSFUL”表示操作成功。該操作成功后,將會看到數據庫中新增了數據庫appfuse,包含app_userroleuser_role三個表。在CATALINA_HOME\webapps下新增了一個項目:testAppFuse。啟動Tomcat后,在瀏覽器中輸入:http://localhost:8080/testAppFuse,可看到登錄頁面。

    3使用 AppGen生成CRUD相關代碼(install-detailed

    AppGen AppFuse 中提供的一個基于 Ant XDoclet 的代碼生成工具。默認情況下,常見的 DAO 和管理器都可以允許我們對任何普通老式 Java 對象(POJO)進行 CRUD 操作,但是在 Web 層上這樣做有些困難。

    下面讓我們看看AppGen是如何工作的。

    1)首先在第二步中創建的數據庫appfuse中創建friends表,建表語句如下:

    create table friends (
         
    friend_id int(8) auto_increment,
          name varchar(20) not null,
          gender varchar(20) not null,

    address varchar(100) null,
          created_date datetime not null,
          primary key (
    friend_id)
        ) type=InnoDB;

    2)進入E:\testAppFuse\extras\appgen 目錄,運行ant install-detailed,顯示如下

    E:\testAppFuse\extras\appgen>ant install-detailed

    Buildfile: build.xml

    clean:

    init:

        [mkdir] Created dir: E:\testAppFuse\extras\appgen\build

        ……

    [input] Would you like to generate code from a table or POJO? (table, pojo)

    3)提示是從table還是從POJO產生代碼,輸入table,選擇從table生成代碼,屏幕輸出如下:

    [input] What is the name of your table (i.e. person)?

    4)提示輸入表名,輸入剛才創建的表的名字friends,輸出如下:

    [input] What is the name, if any, of the module for your table (i.e. organiz

    ation)?

    5)提示輸入表的模塊的名字,若無,按Enter鍵,開始生成代碼。操作成功后可看到項目下已經生成對friends表的CRUD代碼。

    6)要查看頁面來觀察結果,還需做如下操作: Hibernate 添加 Friend.hbm.xml 映射文件。方法如下:

    Friend.hbm.xml 添加到E:\testAppFuse\src\dao\org\amigo\dao\hibernate下的applicationContext-hibernate.xml文件中,需修改sessionFactory bean

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
            
    <property name="dataSource" ref="dataSource"/>
            
    <property name="mappingResources">
                
    <list>
                          
    <value>org/amigo/model/Friend.hbm.xml</value>  <value>org/amigo/model/Role.hbm.xml</value>
    <value>org/amigo/model/User.hbm.xml</value>
                
    </list>
            
    </property>
            ……
        
    </bean>

    7運行 ant setup deploy 之后,我們可以在部署的應用程序中對 friends表執行 CRUD 操作,并且在friends表中,AppFuse已經為我們插入了測試數據。

    四.AppFuse中的xdoclet

    Xdoclet是一個自動生成代碼的工具。它的任務就是Ant的自定義任務。XdocletAnt緊密關聯。它有兩個重要的組件:即進行特殊標記的Java 源文件和預先定義的模板。

    Apache Ant 在運行的時候控制著 XDoclet 的配置和操作。XDoclet 解析輸入的 Java 源代碼,并在內存中生成結構模型。模板引擎通過處理一組模板和標簽處理器,生成輸出文件。

    1.進行特殊標記的Java源文件

    AppGen生成的文件缺少hbm.xmlAction Form Beanweb.xmlstruts-config.xmlvalidation.xml等文件,那這些文件是怎么生成的呢?

    原來,這些文件都是在我們執行ant setup命令時build.xml使用xdoclet自動生成的。 甚至連數據庫和表、表里的數據也可以自動生成。

    XDoclet 對包含嵌入式 XDoclet 標簽的輸入 Java 源代碼進行解析,并為代碼建立非常詳細的結構模型。結構模型中的每個元素都代表源代碼中的一個 Java 結構。
       
    查看User.javaRole.java以及Address.java發現,這些POJO文件中有很多注釋,有@hibernate開頭的,@struts開頭的,這些都是xdoctlet的標簽。AppFuse中主要用到的xdoclet標簽如下:
      1
    @struts.form:用來生成Form Bean

    include-all="true":表示該POJO中每一個屬性在Form Bean中都要有;

    extends="BaseForm":表示生成的Form Bean文件要繼承BaseForm@struts.form-field:表示該屬性要在FormBean中生成。如果我們要在FormBean中添加一些POJO沒有的屬性或方法怎么做呢?打開metadata\web文件夾,可以看到有一個xdoclet-UserForm.java文件,里面是User.java在生成Form Bean時新加入的代碼,我們同樣可以把我們自己在FormBean中增加的代碼新建到一個xdoclet-POJOFrom.java文件中就好了。

    2@struts.validator:用來生成validation.xml文件。

    type="required":表示該屬性在表單中需要有必填的驗證。validation還有一項配置是自定義的校驗規則,使用正則表達式表示。metadata\web中有一個文件validation-global.xml,里面就有郵編等規則的配置。

    3@hibernate:用來生成hbm.xml文件。內容與hbm.xml基本一致。
    4
    @struts.action/@struts.action-forwardPOJO不能生成struts-config.xml,這個標簽是要寫到Action中的。如果使用AppGen生成Action,你會看到@struts.action已經寫好了,這個標簽的作用就是生成當前Actionstruts-config.xml中的映射代碼,寫法與struts-config.xml中一致,其實就是把xml中的配置移植到Action中。還有一個問題,如果我們要在struts-config.xml中進行與Action無關的全局的配置,如global-forwards呢?瀏覽metadata\web文件夾你會發現里面有多個xml文件,其中以globalstruts開頭的文件就是寫這些配置的。build.xmlsetup時會自動將這些文件聯合Action中的注釋生成一個完整的struts-config.xml文件。
       
    接下來還有web.xml文件,它需要在metadata\web中配置。除了剛才提到的那些xml文件,剩下的基本都是用于配置web.xml的了。我們自定義的filterlistener是有具體類的,所以我們同樣可以在這些filterlistener類中添加注釋。
       
    進行了所有配置后,運行ant setupbuild.xml會生成對應的xml文件和form bean等,并在數據庫中創建相應的表。

    2.預先定義的模版

       XDoclet使用代碼模板來生成代碼。模板(template)是你想生成文件的原型。模板里使用一些XML標簽來指導模板引擎如何根據輸入類以及它們的元數據來調整代碼的生成。

    模板包含文件和XML標簽,生成輸出文件時XML標簽會被解析,然后生成文本并顯示在XML標簽所處的位置上。除了以xdt為命名空間打頭的XML標簽會被XDoclet引擎解析以外,其余的XML標簽XDoclet會忽略不管。

    AppFuse中用到很多預先定義的模版,例如AppFuse中生成Action類的XDoclet模板,部分內容如下所示:

    public final class <XDtClass:className/>Action extends BaseAction {
        
    public ActionForward delete(ActionMapping mapping, ActionForm form,                             HttpServletRequest request,                               HttpServletResponse response)
        
    throws Exception {
            
    if (log.isDebugEnabled()) {
                log.debug(
    "Entering 'delete' method");
            }

            ActionMessages messages 
    = new ActionMessages();
            
    <XDtClass:className/>Form <XDtForm:classNameLower/>Form = (<XDtClass:className/>Form) form;
            
    // Exceptions are caught by ActionExceptionHandler
            Manager mgr = (Manager) getBean("manager");
            mgr.removeObject(
    <XDtClass:className/>.classnew Long(<XDtForm:classNameLower/>Form.getId()));
            messages.add(ActionMessages.GLOBAL_MESSAGE,
                        
    new ActionMessage("<XDtForm:classNameLower/>.deleted"));
            
    // save messages in session, so they'll survive the redirect
            saveMessages(request.getSession(), messages);
            
    return search(mapping, form, request, response);
        }

    … …
    }


     在如上的模版中,可看到<XDtClass:className/><XDtForm:classNameLower/>等標簽,在生成代碼的時候,這些標簽會被解析,解析后在這些位置會填上對應的代碼。

    五.總結

    AppFuse是個大雜燴,在它里面有很多開源庫,主要分類如下:

    編譯相關:AntAnt Contrib TasksCheckstyleJava2HtmlPMD

    測試框架:DbUnitjMockJUnit

    數據庫驅動程序:MySQL PostgreSQL

    持久層框架:Hibernate iBATIS

    IoCAOP 框架:Spring

    Web MVC框架:JSFSpring MVCStrutsTapestry WebWork

    安全:Acegi Security

    除了這些庫之外,AppFuse 還使用 Log4j 來記錄日志,使用 Velocity 來構建 e-mail 和菜單模板等。

    另外,AppFuse 并不會將我們限定到任何特定的 API 上。它只是簡單地對可用的最佳開放源碼解決方案重新進行打包和預先集成。AppFuse 中的代碼可以處理這種集成,并實現了 AppFuse 的基本安全性和可用性特性。只要可能,就會減少代碼,以便向 AppFuse 的依賴框架添加一個特性。

       從本文可以看來,AppFuse通過減少編寫CRUD代碼的時間,大大提高了我們編碼的效率,是我們開發項目時的好幫手。

    posted on 2007-08-28 13:12 阿蜜果 閱讀(4142) 評論(11)  編輯  收藏 所屬分類: Auto Code


    FeedBack:
    # re: AppFuse學習進階
    2007-08-28 13:24 | paul
    springside功能上都差不多啊  回復  更多評論
      
    # re: AppFuse學習進階
    2007-08-28 13:36 | Thomas
    不錯,繼續努力!  回復  更多評論
      
    # re: AppFuse學習進階
    2007-08-28 18:41 | mortal
    姐姐好努力!  回復  更多評論
      
    # re: AppFuse學習進階[未登錄]
    2007-08-28 20:01 | -274°C
    姐姐好樣的!哈哈,以后你一發帖,后來回帖就一堆弟弟回帖。  回復  更多評論
      
    # re: AppFuse學習進階
    2007-08-29 16:55 | cresposhi
    springside比起它還是差遠了
    寫這么詳細,你都可以出書了!  回復  更多評論
      
    # re: AppFuse學習進階
    2007-08-29 16:57 | cresposhi
    你什么時候成了itpub的編輯?  回復  更多評論
      
    # re: AppFuse學習進階[未登錄]
    2007-08-30 08:56 | 阿蜜果
    @cresposhi
    不是編輯哦
    有空的時候幫他們寫了幾篇文章而已
    :)  回復  更多評論
      
    # re: AppFuse學習進階
    2007-08-30 12:45 | JAVA面試題
    好樣的  回復  更多評論
      
    # re: AppFuse學習進階
    2007-10-24 09:45 | 信鴿
    不錯。  回復  更多評論
      
    # re: AppFuse學習進階
    2007-11-01 15:31 | feihonggang
    太好了,我在這里說聲謝謝了  回復  更多評論
      
    # re: AppFuse學習進階
    2008-01-08 16:58 | sz(songze39@126.com)
    知道appfuse中hibernate session是怎么配置獲得的嗎?  回復  更多評論
      
    <2007年8月>
    2930311234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

          生活將我們磨圓,是為了讓我們滾得更遠——“圓”來如此。
          我的作品:
          玩轉Axure RP  (2015年12月出版)
          

          Power Designer系統分析與建模實戰  (2015年7月出版)
          
         Struts2+Hibernate3+Spring2   (2010年5月出版)
         

    留言簿(263)

    隨筆分類

    隨筆檔案

    文章分類

    相冊

    關注blog

    積分與排名

    • 積分 - 2294312
    • 排名 - 3

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日韩av无码久久精品免费| 边摸边吃奶边做爽免费视频99 | 久久国产精品亚洲一区二区| 亚洲国产成人手机在线观看| 91大神免费观看| 日本亚洲免费无线码| aaa毛片视频免费观看| 日韩a级毛片免费视频| 国产成+人+综合+亚洲专| 91精品啪在线观看国产线免费| 国产成人毛片亚洲精品| 麻豆一区二区三区蜜桃免费| 日韩a级毛片免费视频| 456亚洲人成影院在线观| 2019中文字幕在线电影免费 | 亚洲毛片免费观看| 亚洲成AV人片在WWW色猫咪| 一区视频免费观看| 亚洲午夜福利精品无码| 视频一区在线免费观看| 又大又黄又粗又爽的免费视频| 亚洲综合av一区二区三区不卡 | 在线播放免费人成视频网站| 国产精品无码一区二区三区免费| 中文字幕亚洲综合小综合在线| 波多野结衣在线免费观看| 亚洲人成在线播放| 国产免费AV片在线播放唯爱网 | 国产精品无码永久免费888| 最近免费字幕中文大全视频| 午夜亚洲AV日韩AV无码大全| 无码国产精品一区二区免费模式| 久久亚洲国产精品五月天| 蜜桃成人无码区免费视频网站 | 亚洲精品高清国产麻豆专区| 最刺激黄a大片免费网站| 亚洲精品中文字幕麻豆| 18禁成年无码免费网站无遮挡| 亚洲一区二区三区高清在线观看| 日韩中文字幕在线免费观看| 美女视频黄频a免费大全视频|