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

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

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

    littleQ

    終于明白曾經(jīng)他們失落的目光,當(dāng)年的你們是否一樣;間有懈怠或有頹放,難知多久方能補(bǔ)上;今起,不再彷徨!

      BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
      33 Posts :: 0 Stories :: 60 Comments :: 0 Trackbacks
     Deploying the application

    在我們運(yùn)行Controller之前,必須對(duì)其進(jìn)行編譯。我們可以使用javac或者任何IDE去編譯Controller。接下來(lái),我們要讓Tomcat知道我們的web應(yīng)用程序。我們需要?jiǎng)?chuàng)建一個(gè)war包,然后部署到Tomcat中,這步只需要將war包拷貝到:/dev/Tomcat6/webapps目錄下。

    我們的.war文件中的/WEB-INF文件夾包含以下文件:

    web.xml
    induction-demoapp.xml

    以下.jar文件在WEB-INF/lib:

    acciente-induction-1.x.xb.jar
    acciente-commons-1.x.xb.jar

    最后,以下工具jar包也同樣在WEB-INF/lib:

    apache-bcel-5.2.jar
    apache-commons-collections-3.2.1.jar
    apache-commons-digester-1.8.jar
    apache-commons-fileupload-1.2.1.jar
    apache-commons-io-1.4.jar
    apache-commons-logging-1.1.1.jar
    apache-freemarker-2.3.12.jar

    這些.jar文件分別來(lái)自于這些工程:Apache Commons庫(kù)和Apache BCEL庫(kù)來(lái)自Apache Software Foundation. Freemarker庫(kù)源自Visigoth Software Society.

    我們主意到應(yīng)用程序類的代碼(在這里,就是單個(gè)Controller)沒(méi)有存儲(chǔ)在.war文件中,相反,我們會(huì)在應(yīng)用程序的配置文件induction-demoapp.xml中指明編譯后.class文件的位置.不管我們什么時(shí)候重新編譯一個(gè)應(yīng)用程序類,下一次訪問(wèn)這個(gè)類的時(shí)候,Induction會(huì)檢測(cè)出class文件發(fā)生了變化,然后"熱部署"JVM.因此,當(dāng)我們修改或者編譯應(yīng)用程序類的時(shí)候,沒(méi)有必要去重新創(chuàng)建或者重新部署war.

    Induction同樣也支持將應(yīng)用程序類放到.war/WEB-INF/classes,或者將.jar放到/WEB-INF/lib,或者Tomcat可以找到的classpath下的其他任何位置.不過(guò)在開(kāi)發(fā)中,我們推薦將應(yīng)用程序類放在war包外面,這樣可以通過(guò)class"熱重載"來(lái)提高生產(chǎn)率.如果有必要的話,應(yīng)用程序類可以重新打包成.war文件用于傳遞.接下來(lái),我們來(lái)看看war包里面的內(nèi)容.

    首先來(lái)看看web.xml.我們?cè)?/span>web.xml中所需要做的就是定義Inductiondispatcher servlet去處理對(duì)應(yīng)用程序的請(qǐng)求.

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
              http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
               version="2.5">
       <description>DemoApp</description>

       <servlet>
           <servlet-name>demoapp</servlet-name>
           <servlet-class>com.acciente.induction.dispatcher.HttpDispatcher</servlet-class>
           <load-on-startup>1</load-on-startup>
       </servlet>

       <servlet-mapping>
           <servlet-name>demoapp</servlet-name>
           <url-pattern>/*</url-pattern>
       </servlet-mapping>
    </web-app>

    我們?cè)賮?lái)看看induction-demoapp.xml的內(nèi)容.假設(shè)我們編譯后的應(yīng)用程序類是放在c:/project/demoapp/classes目錄下,induction-demoapp.xml的內(nèi)容就是:

    <!-- this file contains the configuration for the Induction dispatcher -->
    <config>
    <!-- The following section allows you to specify locations from which
    Induction will automatically reload a class if the file has changed -->
    <java-class-path>
    <compiled-directory>
    <directory>c:/project/demoapp/classes</directory>
    </compiled-directory>
    </java-class-path>
    </config>

    創(chuàng)建好上面所描述的war包后,部署到Tomcat.現(xiàn)在,我們可以開(kāi)始運(yùn)行我們的應(yīng)用程序了.

    Running the application

    假設(shè)Tomcat運(yùn)行在localhost:8080,war包的名字是induction-demo.war,在瀏覽器中輸入以下URL:

    http://localhost:8080/induction-demo/demoapp/helloworld1_app/HelloWorldController/

    你會(huì)在瀏覽器輸出界面看到字符串:

    Hello World, using a simple println()

    Controlling the URL resolution

    現(xiàn)在我們來(lái)進(jìn)一步的看下用來(lái)運(yùn)行ControllerURL:http://localhost:8080/induction-demo/demoapp/helloworld1_app/HelloWorldController/.第一部分http://localhost:8080/induction-demo通過(guò)Tomcat指向dispatcher servlet,也就是說(shuō)這一部分是與Induction無(wú)關(guān)的.通過(guò)Induction處理的URL部分是/demoapp/helloworld1_app/HelloWorldController/.

    InductionURL分解成完整的Controller類和方法名.URL轉(zhuǎn)換成Controller的類名和方法名,是通過(guò)InductionControllerResolver類口完成的.當(dāng)開(kāi)發(fā)者沒(méi)有指定一個(gè)定制的Controller resolver時(shí),Induction會(huì)默認(rèn)使用一個(gè)相當(dāng)簡(jiǎn)單的controller resolver.默認(rèn)的controller resolver是這么工作的:分析路徑/demoapp/helloworld1_app/HelloWorldController/,把第一個(gè)'/'到最后一個(gè)'/'之間的內(nèi)容作為完整的類名(/demoapp/helloworld1_app/HelloWorldController/就是對(duì)應(yīng)到demoapp.helloworld1_app.HelloWorldController).最后一個(gè)'/'后所有的內(nèi)容作為方法名.在我們的例子中,最后一個(gè)'/'后沒(méi)有任何字符串,因此默認(rèn)的resolver會(huì)使用一個(gè)隱性的方法名(默認(rèn)的resolver使用"handler"作為隱性的方法名,不過(guò)可以在Induction的配置文件中進(jìn)行修改).

    Dynamic reloading

    我們來(lái)找點(diǎn)樂(lè)子,修改一下controller中打印的字符串的值,編譯后重新刷新你的瀏覽器,你會(huì)發(fā)現(xiàn)修改起了作用.不必再經(jīng)過(guò)"創(chuàng)建war->重新部署->等待"的過(guò)程了.

    Conclusion

    總結(jié)一下我們的指南.在指南中,我們討論了一些關(guān)鍵的思想,在接下來(lái)的view Tutorial中會(huì)介紹在Induction中如何使用views.Modles會(huì)在Modles Tutorial中進(jìn)行介紹.

    posted on 2008-07-31 22:17 littleQ 閱讀(1108) 評(píng)論(4)  編輯  收藏 所屬分類: induction

    Feedback

    # re: Getting Started with Induction-翻譯(2) 2008-08-01 02:01 酒店咨詢
    hehe,辛苦你了  回復(fù)  更多評(píng)論
      

    # re: Getting Started with Induction-翻譯(2) 2008-08-01 15:57 殘夢(mèng)追月
    myeclispe的幫助文檔?  回復(fù)  更多評(píng)論
      

    # re: Getting Started with Induction-翻譯(2) 2008-08-01 15:57 殘夢(mèng)追月
    還是tomcat的幫助文檔?……  回復(fù)  更多評(píng)論
      

    # re: Getting Started with Induction-翻譯(2) 2008-08-01 16:35 littleQ
    @殘夢(mèng)追月
    恩?都不是……  回復(fù)  更多評(píng)論
      


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航: