每當(dāng)我們要學(xué)習(xí)一種新的技術(shù),首先要搞明白他是干什么的,對(duì)自己有什么用處,把相關(guān)情況弄清楚以后,才能決定去不去學(xué)習(xí)他。在學(xué)習(xí)JavaFX之前,下面幾個(gè)問(wèn)題我覺(jué)得應(yīng)該先搞清楚:
一、什么是 Rich Internet Applications ?
Rich Internet Applications ,縮寫(xiě)RIAs,翻譯過(guò)來(lái)是富客戶(hù)端應(yīng)用程序,或者富互聯(lián)網(wǎng)應(yīng)用程序。他是從網(wǎng)絡(luò)下載到本機(jī),可以在瀏覽器中運(yùn)行的一種應(yīng)用程序。當(dāng)然也可以脫離瀏覽器,直接在操作系統(tǒng)下運(yùn)行。相對(duì)于傳統(tǒng)的的Web應(yīng)用,富客戶(hù)端應(yīng)用程序主要特點(diǎn)是豐富的界面效果。
說(shuō)白了,RIAs就是把原來(lái)在桌面上跑的應(yīng)用程序放到瀏覽器中去跑。
二、富客戶(hù)端是不是為了取代傳統(tǒng) Web 應(yīng)用的界面?
目前來(lái)說(shuō)我覺(jué)得他們互為補(bǔ)充,傳統(tǒng) Web 應(yīng)用,特別是企業(yè)級(jí)應(yīng)用,主要突出數(shù)據(jù)的存儲(chǔ)、檢索和管理,重點(diǎn)在業(yè)務(wù)和邏輯,而不在界面。而RIAs主要突出用戶(hù)的體驗(yàn)和交互性。二者如何結(jié)合應(yīng)該根據(jù)實(shí)際情況來(lái),你要在瀏覽器中玩掃雷游戲,當(dāng)然得富客戶(hù)端,如果是個(gè)搜索引擎,傳統(tǒng)的 Web 界面足以。如果是個(gè)銀行賬戶(hù)查詢(xún)界面,可能可以把二者結(jié)合起來(lái)。
三、富客戶(hù)端出現(xiàn)的目的到底是什么?
可能有人問(wèn):說(shuō)了半天,富客戶(hù)端即不是取代傳統(tǒng) Web 界面,也可以在桌面上直接運(yùn)行,那還用得著費(fèi)那么大的勁把它放到瀏覽器里面嗎?
回答是很用得著,目的有兩個(gè):1、跨平臺(tái);2、易于發(fā)布。
想想,不管是電腦還是手機(jī),不管是Windows、Linux、Windows Mobile、塞班或者 Google 的手機(jī)操作系統(tǒng),哪個(gè)里面沒(méi)有瀏覽器?只要有瀏覽器,你寫(xiě)的程序就可以在任何物理平臺(tái)、任何操作系統(tǒng)下運(yùn)行,這是多么棒的一件事情啊!
四、當(dāng)前主流的富客戶(hù)端技術(shù)有哪些?他們的優(yōu)缺點(diǎn)是什么?
1、基于 AJAX 技術(shù)的富客戶(hù)端,比如 ExtJS.
優(yōu)點(diǎn):純基于瀏覽器,不需要安裝插件。
缺點(diǎn):個(gè)人觀(guān)點(diǎn),畢竟中間多了一層瀏覽器,速度和功能可能稍差一點(diǎn)。
2、微軟的 SilverLight.
優(yōu)點(diǎn):(1)他是微軟的技術(shù)。
(2)基于。Net 框架和 WPF,功能強(qiáng)大。
(3)最重要的一點(diǎn),。Net 框架和 SilverLight 插件必定會(huì)成為微軟新的操作系統(tǒng)的一部分。在新操作系統(tǒng)中,你的 SilverLight 程序不用安裝插件就可以直接運(yùn)行了。
缺點(diǎn):(1)還是這一條:他是微軟的技術(shù)。
3、Adobe 的 Flex
優(yōu)點(diǎn):底層基于 Flash,以 Flash 的形式發(fā)布。想一下,我們重新裝完系統(tǒng),打開(kāi)瀏覽器,進(jìn)入一個(gè)門(mén)戶(hù)網(wǎng)站,一般會(huì)做什么事?當(dāng)然是安裝 Flash 插件了,只要聯(lián)了因特網(wǎng)的機(jī)器,還有幾臺(tái)沒(méi)裝 Flash插件的呢?這就為 Flex 程序的發(fā)布掃清了一個(gè)很大的障礙。只要程序能滿(mǎn)足需求,用什么平臺(tái)開(kāi)發(fā)用戶(hù)一般不會(huì)很介意,但是動(dòng)不動(dòng)就安裝插件那可真的很煩。而 Flash 已經(jīng)被廣泛接受了。
缺點(diǎn):又要重新學(xué)習(xí)一套新的語(yǔ)言規(guī)則,一套新的 Framework,真的很累啊。
4、Sun 的 JavaFX
優(yōu)點(diǎn):
(1)對(duì)傳統(tǒng) Java 的繼承。JavaFX 主要突出的是界面和交互性這一塊,剩下的功能依然調(diào)用傳統(tǒng)的 Java 包。這種既有創(chuàng)新又有繼承的思路,降低了學(xué)習(xí)難度。這樣,我們可以用以前熟悉的 Java 方式開(kāi)發(fā)程序的模型層,然后用 JavaFX 設(shè)計(jì)視圖層。
(2)同一個(gè)程序 Build 以后會(huì)產(chǎn)生兩個(gè)包,一個(gè)是在瀏覽器中運(yùn)行的,一個(gè)是在桌面直接運(yùn)行的。當(dāng)然,F(xiàn)lex 也可以,Silverlight 則可以直接變成 WPF 再變成 exe.所以這點(diǎn)可能算不上什么優(yōu)點(diǎn)。但是話(huà)說(shuō)回來(lái),對(duì)于桌面 Java,僅僅一個(gè)發(fā)布問(wèn)題,當(dāng)初就曾經(jīng)嚇退多少想入門(mén)的新手?不信你 Google 一下 "java 打包"!
缺點(diǎn):
(1)雖然 JRE 現(xiàn)在以插件的形式發(fā)布了,但是除了 Java 開(kāi)發(fā)人員,普通用戶(hù)安裝的畢竟還是少數(shù)。大型的 Java 程序很多都自帶 JRE 也可以反映出這個(gè)問(wèn)題。
(2)瀏覽器中,程序的啟動(dòng)速度要比 Flash 和 SilverLight 慢許多??赡苁且獜?Sun 下載很多 JS 腳本文件,這么多客戶(hù)同時(shí)訪(fǎng)問(wèn),能不慢嗎?應(yīng)該想辦法改進(jìn)一下。
(3)設(shè)為首頁(yè)桌面運(yùn)行包的擴(kuò)展名是 .jnlp,只要你安裝了 JRE 插件,運(yùn)行它就像運(yùn)行 .exe 程序一樣,雙擊就可以了。這本來(lái)是一種很綠色的發(fā)布方式,但實(shí)際上不是這樣,每當(dāng)你運(yùn)行一個(gè)新的桌面版 .jnlp 程序以后,再打開(kāi)控制面板的添加刪除程序看看,都給你安裝進(jìn)去了!如果你直接刪除了這個(gè) .jnlp 程序,控制面板里的信息就留在里面刪不掉了。這種發(fā)布細(xì)節(jié)問(wèn)題,應(yīng)該可以改進(jìn)。
五、RIAs 可以和服務(wù)器通信嗎?
傳統(tǒng)的 CS 客戶(hù)端都可以,RIAs當(dāng)然更沒(méi)問(wèn)題了。不但可以通信,而且 Silverlight 支持 Asp.Net, Flex 支持 PHP、ASP、JSP等常見(jiàn)的服務(wù)器技術(shù),比如在服務(wù)器端有個(gè) Login.php 文件,你可以用 Flex 把用戶(hù)名和密碼 Post 給它里面對(duì)應(yīng)的處理函數(shù),然后由 PHP 腳本完成數(shù)據(jù)庫(kù)查詢(xún)和登錄等邏輯,再返回相應(yīng)的數(shù)據(jù)用來(lái)刷新界面。
注意:這里用到了刷新,而不是跳轉(zhuǎn),這就是富客戶(hù)端和傳統(tǒng) Web 界面的重要區(qū)別。整個(gè)過(guò)程傳統(tǒng)的 Web 程序區(qū)別不是很大,當(dāng)然,數(shù)據(jù)在傳輸中的格式一般都是基于 XML 的。
至于 JavaFX 還沒(méi)有看到相關(guān)資料,至少會(huì)支持 JSP 吧。
六、到底選哪一個(gè)
如果你是一個(gè)年輕人,精力充沛,學(xué)習(xí)勁頭足,那么套用一句老話(huà),全面撒網(wǎng),重點(diǎn)釣魚(yú)。如果你像我一樣是個(gè)老人家了,腦子越來(lái)越不好使,那么選一個(gè)對(duì)你來(lái)說(shuō)能最快上手的吧。附帶說(shuō)一句,F(xiàn)lex 和 JavaFX 都是開(kāi)源的。
七、一個(gè)小例子
下面一個(gè)簡(jiǎn)單的 Java 類(lèi),功能是返回程序運(yùn)行時(shí)刻的時(shí)間,這個(gè)類(lèi)用 JavaFX 調(diào)用,然后打包并通過(guò)互聯(lián)網(wǎng)發(fā)布出去,可以在瀏覽器或者桌面里面運(yùn)行。
第一步:用 Netbeans 創(chuàng)建一個(gè) JavaFX 空項(xiàng)目,然后項(xiàng)目中添加一個(gè) Java 類(lèi):
package javafxapplication8;
import java.util.Date;
public class Hello {
public String getTime(){
Date d = new Date();
return d.toString();
}
}
第二步:在項(xiàng)目中添加一個(gè) JavaFX Stage 文件,并在 Scene 中加入一個(gè) Text,看代碼吧:
package javafxapplication8;
import javafx.scene.Scene;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafxapplication8.Hello;
var d = new Hello();
var str :String=d.getTime();
Stage {
title: "Application title"
width: 250
height: 80
scene: Scene {
content: Text {
font : Font {
size : 16
}
x: 10,
y: 30
content: bind str
}
}
};
Build 以后就可以在桌面運(yùn)行了。
下面是我把它發(fā)布到服務(wù)器上,當(dāng)你瀏覽這個(gè)頁(yè)面的時(shí)候,程序就在你的瀏覽器中運(yùn)行了。
如果沒(méi)有安裝 JRE 運(yùn)行時(shí),系統(tǒng)會(huì)提示你安裝,瀏覽器彈出的對(duì)話(huà)框都點(diǎn)確定或者允許就可以,測(cè)試完了以后如果不喜歡可以將 Jre 從控制面板卸載。如果你一直從開(kāi)始看下來(lái),沒(méi)注意到這里的程序是怎么加載的,可以刷新一下。
一、什么是 Rich Internet Applications ?
Rich Internet Applications ,縮寫(xiě)RIAs,翻譯過(guò)來(lái)是富客戶(hù)端應(yīng)用程序,或者富互聯(lián)網(wǎng)應(yīng)用程序。他是從網(wǎng)絡(luò)下載到本機(jī),可以在瀏覽器中運(yùn)行的一種應(yīng)用程序。當(dāng)然也可以脫離瀏覽器,直接在操作系統(tǒng)下運(yùn)行。相對(duì)于傳統(tǒng)的的Web應(yīng)用,富客戶(hù)端應(yīng)用程序主要特點(diǎn)是豐富的界面效果。
說(shuō)白了,RIAs就是把原來(lái)在桌面上跑的應(yīng)用程序放到瀏覽器中去跑。
二、富客戶(hù)端是不是為了取代傳統(tǒng) Web 應(yīng)用的界面?
目前來(lái)說(shuō)我覺(jué)得他們互為補(bǔ)充,傳統(tǒng) Web 應(yīng)用,特別是企業(yè)級(jí)應(yīng)用,主要突出數(shù)據(jù)的存儲(chǔ)、檢索和管理,重點(diǎn)在業(yè)務(wù)和邏輯,而不在界面。而RIAs主要突出用戶(hù)的體驗(yàn)和交互性。二者如何結(jié)合應(yīng)該根據(jù)實(shí)際情況來(lái),你要在瀏覽器中玩掃雷游戲,當(dāng)然得富客戶(hù)端,如果是個(gè)搜索引擎,傳統(tǒng)的 Web 界面足以。如果是個(gè)銀行賬戶(hù)查詢(xún)界面,可能可以把二者結(jié)合起來(lái)。
三、富客戶(hù)端出現(xiàn)的目的到底是什么?
可能有人問(wèn):說(shuō)了半天,富客戶(hù)端即不是取代傳統(tǒng) Web 界面,也可以在桌面上直接運(yùn)行,那還用得著費(fèi)那么大的勁把它放到瀏覽器里面嗎?
回答是很用得著,目的有兩個(gè):1、跨平臺(tái);2、易于發(fā)布。
想想,不管是電腦還是手機(jī),不管是Windows、Linux、Windows Mobile、塞班或者 Google 的手機(jī)操作系統(tǒng),哪個(gè)里面沒(méi)有瀏覽器?只要有瀏覽器,你寫(xiě)的程序就可以在任何物理平臺(tái)、任何操作系統(tǒng)下運(yùn)行,這是多么棒的一件事情啊!
四、當(dāng)前主流的富客戶(hù)端技術(shù)有哪些?他們的優(yōu)缺點(diǎn)是什么?
1、基于 AJAX 技術(shù)的富客戶(hù)端,比如 ExtJS.
優(yōu)點(diǎn):純基于瀏覽器,不需要安裝插件。
缺點(diǎn):個(gè)人觀(guān)點(diǎn),畢竟中間多了一層瀏覽器,速度和功能可能稍差一點(diǎn)。
2、微軟的 SilverLight.
優(yōu)點(diǎn):(1)他是微軟的技術(shù)。
(2)基于。Net 框架和 WPF,功能強(qiáng)大。
(3)最重要的一點(diǎn),。Net 框架和 SilverLight 插件必定會(huì)成為微軟新的操作系統(tǒng)的一部分。在新操作系統(tǒng)中,你的 SilverLight 程序不用安裝插件就可以直接運(yùn)行了。
缺點(diǎn):(1)還是這一條:他是微軟的技術(shù)。
3、Adobe 的 Flex
優(yōu)點(diǎn):底層基于 Flash,以 Flash 的形式發(fā)布。想一下,我們重新裝完系統(tǒng),打開(kāi)瀏覽器,進(jìn)入一個(gè)門(mén)戶(hù)網(wǎng)站,一般會(huì)做什么事?當(dāng)然是安裝 Flash 插件了,只要聯(lián)了因特網(wǎng)的機(jī)器,還有幾臺(tái)沒(méi)裝 Flash插件的呢?這就為 Flex 程序的發(fā)布掃清了一個(gè)很大的障礙。只要程序能滿(mǎn)足需求,用什么平臺(tái)開(kāi)發(fā)用戶(hù)一般不會(huì)很介意,但是動(dòng)不動(dòng)就安裝插件那可真的很煩。而 Flash 已經(jīng)被廣泛接受了。
缺點(diǎn):又要重新學(xué)習(xí)一套新的語(yǔ)言規(guī)則,一套新的 Framework,真的很累啊。
4、Sun 的 JavaFX
優(yōu)點(diǎn):
(1)對(duì)傳統(tǒng) Java 的繼承。JavaFX 主要突出的是界面和交互性這一塊,剩下的功能依然調(diào)用傳統(tǒng)的 Java 包。這種既有創(chuàng)新又有繼承的思路,降低了學(xué)習(xí)難度。這樣,我們可以用以前熟悉的 Java 方式開(kāi)發(fā)程序的模型層,然后用 JavaFX 設(shè)計(jì)視圖層。
(2)同一個(gè)程序 Build 以后會(huì)產(chǎn)生兩個(gè)包,一個(gè)是在瀏覽器中運(yùn)行的,一個(gè)是在桌面直接運(yùn)行的。當(dāng)然,F(xiàn)lex 也可以,Silverlight 則可以直接變成 WPF 再變成 exe.所以這點(diǎn)可能算不上什么優(yōu)點(diǎn)。但是話(huà)說(shuō)回來(lái),對(duì)于桌面 Java,僅僅一個(gè)發(fā)布問(wèn)題,當(dāng)初就曾經(jīng)嚇退多少想入門(mén)的新手?不信你 Google 一下 "java 打包"!
缺點(diǎn):
(1)雖然 JRE 現(xiàn)在以插件的形式發(fā)布了,但是除了 Java 開(kāi)發(fā)人員,普通用戶(hù)安裝的畢竟還是少數(shù)。大型的 Java 程序很多都自帶 JRE 也可以反映出這個(gè)問(wèn)題。
(2)瀏覽器中,程序的啟動(dòng)速度要比 Flash 和 SilverLight 慢許多??赡苁且獜?Sun 下載很多 JS 腳本文件,這么多客戶(hù)同時(shí)訪(fǎng)問(wèn),能不慢嗎?應(yīng)該想辦法改進(jìn)一下。
(3)設(shè)為首頁(yè)桌面運(yùn)行包的擴(kuò)展名是 .jnlp,只要你安裝了 JRE 插件,運(yùn)行它就像運(yùn)行 .exe 程序一樣,雙擊就可以了。這本來(lái)是一種很綠色的發(fā)布方式,但實(shí)際上不是這樣,每當(dāng)你運(yùn)行一個(gè)新的桌面版 .jnlp 程序以后,再打開(kāi)控制面板的添加刪除程序看看,都給你安裝進(jìn)去了!如果你直接刪除了這個(gè) .jnlp 程序,控制面板里的信息就留在里面刪不掉了。這種發(fā)布細(xì)節(jié)問(wèn)題,應(yīng)該可以改進(jìn)。
五、RIAs 可以和服務(wù)器通信嗎?
傳統(tǒng)的 CS 客戶(hù)端都可以,RIAs當(dāng)然更沒(méi)問(wèn)題了。不但可以通信,而且 Silverlight 支持 Asp.Net, Flex 支持 PHP、ASP、JSP等常見(jiàn)的服務(wù)器技術(shù),比如在服務(wù)器端有個(gè) Login.php 文件,你可以用 Flex 把用戶(hù)名和密碼 Post 給它里面對(duì)應(yīng)的處理函數(shù),然后由 PHP 腳本完成數(shù)據(jù)庫(kù)查詢(xún)和登錄等邏輯,再返回相應(yīng)的數(shù)據(jù)用來(lái)刷新界面。
注意:這里用到了刷新,而不是跳轉(zhuǎn),這就是富客戶(hù)端和傳統(tǒng) Web 界面的重要區(qū)別。整個(gè)過(guò)程傳統(tǒng)的 Web 程序區(qū)別不是很大,當(dāng)然,數(shù)據(jù)在傳輸中的格式一般都是基于 XML 的。
至于 JavaFX 還沒(méi)有看到相關(guān)資料,至少會(huì)支持 JSP 吧。
六、到底選哪一個(gè)
如果你是一個(gè)年輕人,精力充沛,學(xué)習(xí)勁頭足,那么套用一句老話(huà),全面撒網(wǎng),重點(diǎn)釣魚(yú)。如果你像我一樣是個(gè)老人家了,腦子越來(lái)越不好使,那么選一個(gè)對(duì)你來(lái)說(shuō)能最快上手的吧。附帶說(shuō)一句,F(xiàn)lex 和 JavaFX 都是開(kāi)源的。
七、一個(gè)小例子
下面一個(gè)簡(jiǎn)單的 Java 類(lèi),功能是返回程序運(yùn)行時(shí)刻的時(shí)間,這個(gè)類(lèi)用 JavaFX 調(diào)用,然后打包并通過(guò)互聯(lián)網(wǎng)發(fā)布出去,可以在瀏覽器或者桌面里面運(yùn)行。
第一步:用 Netbeans 創(chuàng)建一個(gè) JavaFX 空項(xiàng)目,然后項(xiàng)目中添加一個(gè) Java 類(lèi):
package javafxapplication8;
import java.util.Date;
public class Hello {
public String getTime(){
Date d = new Date();
return d.toString();
}
}
第二步:在項(xiàng)目中添加一個(gè) JavaFX Stage 文件,并在 Scene 中加入一個(gè) Text,看代碼吧:
package javafxapplication8;
import javafx.scene.Scene;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafxapplication8.Hello;
var d = new Hello();
var str :String=d.getTime();
Stage {
title: "Application title"
width: 250
height: 80
scene: Scene {
content: Text {
font : Font {
size : 16
}
x: 10,
y: 30
content: bind str
}
}
};
Build 以后就可以在桌面運(yùn)行了。
下面是我把它發(fā)布到服務(wù)器上,當(dāng)你瀏覽這個(gè)頁(yè)面的時(shí)候,程序就在你的瀏覽器中運(yùn)行了。
如果沒(méi)有安裝 JRE 運(yùn)行時(shí),系統(tǒng)會(huì)提示你安裝,瀏覽器彈出的對(duì)話(huà)框都點(diǎn)確定或者允許就可以,測(cè)試完了以后如果不喜歡可以將 Jre 從控制面板卸載。如果你一直從開(kāi)始看下來(lái),沒(méi)注意到這里的程序是怎么加載的,可以刷新一下。