2007年11月17日 星期六

Head First Java 讀後整理(14) - Release Your Code

1、部署的選擇:
(1) 本機:整支程式都在使用者的電腦上以獨立、可攜的方式執行,並以可執行的 Jar 來部署
(2) 遠端:整個應用程式都在 server 端執行,client 可能透過 browser 等非 Java 型式來存取
(3) 兩者之間組合:應用程式被分散程在用戶本地系統跑的 client 端,連接到執行應用程式服務的 server 端

2、一般專案中會有 source(存放原始碼) 目錄以及 classes(存放 compiler 產生的 .class 檔) 目錄

3、將原始碼與 class 檔案分離,可簡化管理工作
#進入原始碼目錄
shell> cd MyProject/source

#使用「-d」參數指定 .class 檔案要存放的地方
shell> javac -d ../classes MyApp.java

# 編譯目錄中所有的 .java 檔
shell> javac -d ../classes *.java

#執行程式
shell> cd ../classes
shell> java MyApp

4、JAR 即為 Java Archive,是個 pkzip 格式的檔案,會把一堆 class 檔案包裝起來,只要用一個檔案就可以交差了

5、產生 JAR 的過程,需要建構 manifest 檔案,其帶有 JAR 的資訊,告知 JVM main() method 的所在位置

6、建構與執行 executable JAR 的步驟:
#確定所有的 class 檔案都在同一個目錄下
shell> cd MyProject

#建立 manifest 檔案來描述 main() method 的位置
# 內容如下:
# Main-Class: MyApp
shell> vi manifest.info

#執行 jar 工具來建構帶有所有 class 以及 manifest 資訊的 JAR 檔
shell> jar -cvmf manifest.info app1.jar *.class

# 執行 JAR
shell> java -jar app1.jar

7、JVM 必須要能找到 JAR,所以必須放在 classpath 下,或是目前工作所在目錄下

8、大部分完全在本機的 Java 應用程式都是以 executable JAR 來部署

9、package 可以預防名稱衝突,最好的方式是在前面加上反過來的 domain name
package net.twcic.myPackage;	//若有 import 則必須放在 import 之前

public class Hello {
public static void main(String[] args) {
System.out.println("Hello World");
} //close main
} //close Hello

10、使用 compiler 中的「-d」參數,cpmpiler 就會在 classes 目錄中產生相對應於 package 名稱的目錄結構

shell> javac -d ../classes Hello.java

11、一旦 class 被包進 package 中,就不能使用"簡寫"的名稱來呼叫它,必須指定 main() class 的完整名稱
shell> java net.twcic.myPackage.Hello

12、以 package 建構與執行 executable JAR 的步驟:
# 確定所有的 class 檔都放在 classes 目錄下正確對應的 package 結構中
shell> cd MyProject/classes

#建立 manifest 檔案來描述 main() method 的位置
# 內容如下:
# Main-Class: net.twcic.MyPackage.Hello
shell> vi manifest.info

#執行 jar 工具來建構帶有所有 class 以及 manifest 資訊的 JAR 檔
#最後只要指定 package 結構的最上層目錄即可
shell> jar -cvmf manifest.info packEx.jar net

13、使用 jar 中的「-tf」參數檢視 jar 檔案中的內容
#檢視 jar 檔案中的內容
shell> jar -tf packEx.jar
#以下為產生出來的內容
META-INF/ #META-INF 代表 META Information,jar 會自動建立此檔案與上面的目錄
META-INF/MANIFEST.MF # jar 不會直接將原本的 manifest 檔案加入,僅會使用其內容資訊
net/
net/twcic/
net/twcic/myPackage/
net/twcic/myPackage/Hello.class

14、若要解開 jar 檔案中的內容,可使用 jar 中的「-xf」參數

15、使用者能夠過點選某個連結來啟動 Java Web Start 的應用程式,一旦程式下載後,就可獨立於 browser 之外來執行(就跟網路下載的 executable JAR 一樣)

16、Java Web Start 的運作方式
(1) client 端點選某個網頁上得 JWS 應用程式的 link( .jnlp 檔)
(2) web server 收到 request 送出 .jnlp 檔案(not JAR)給 client 端的 browser
(3) browser 啟動 Java Web Start,接著 JWS 的 helper app 讀取 .jnlp 檔案,再向 server 要求 MyApp.jar
(4) web server 送出 .jar 檔
(5) JWS 取得 JAR 並呼叫指定的 main() 來起凍應用程式

17、jnlp 是個 XML 文件,裡面包含了許多應用程式相關的使用資訊
<?xml version="1.0" encoding="utf-8"?>
<!-- codebase 用來指定相關檔案的起始目錄 -->
<jnlp spec="0.2.1.0"
codebase="http://127.0.0.1/~test"
href="MyApp.jnlp">
<!-- 相對於 codebase 的路徑 -->

<information>
<!-- 以下這些 tag 都必須加入,不然程式可能會有問題 -->
<title>Test App</title>
<vender>godleon</vender>
<homepage href="index.html" />
<description>Head First Website demo</description>
<icon href="test.gif" />
<offline-allowed /> <!--設定成離線也可以執行-->
</information>

<resource>
<j2se version="1.3+" /> <!-- 指定需要 1.3 或之後版本的 Java -->
<jar href="MyApp.jar" /> <!-- executable JAR 名稱 -->
</resource>
</jnlp>

18、建構與部屬 Java Web Start 的步驟:
(1) 將程式製作成 executable JAR
(2) 撰寫 .jnlp 檔案
(3) 將 .jnlp 與 JAR 檔案放到網站上,並設定 MIME type 為「application/x-java-jnlp-file」
(4) 設定網頁連結到 .jnlp 檔案

19、applet 是網頁的一部分,不是單獨下載的;而 JWS 從網站下載後就可以不用 browser 離線執行

沒有留言:

張貼留言