Java核心程式設計十四:Applet與Web
阿新 • • 發佈:2019-02-02
1 Applet基礎
1.1 Applet簡介
Applet是一種將Java程式,通常為UI程式載入進web瀏覽器,在使用者的瀏覽器中執行的一套轉換機制。因而HTML頁面中必須支援相關的標籤,告訴瀏覽器下載哪些類檔案,以及如何在網頁上進行顯示的資訊。如果一切就緒,則由瀏覽器中的java-plugin來執行。
將java類封裝成applet比較簡單,只需要繼承自JApplet,然後將我們UI元件add到其中即可。
java.applet.Applet void init() 第一次載入applet時呼叫的方法,進行初始化操作 void start() 開始執行 void stop() 停止執行 void destory() 釋放資源 1.2 安全相關 Applet提供了安全機制,以防止未授權的applet訪問本地環境。通常它可以在沙箱中下載伺服器上的資料,顯示圖片、播放音樂、取得使用者的輸入並返回給伺服器。 當在沙箱中執行時,它不能訪問本地可執行程式和資源;只能與當前伺服器通訊;只能極少數的系統資訊如OS名稱與版本等;如果希望獲得更大的能力,則需要通過證書認證,以可以像本地應用一樣訪問系統。 1.3 HTML標記
<applet code="com.aaa.bbb.TestApplet.class",weight="300",height="300"></applet>
除了上面的標記與屬性外,還支援以下的屬性:
align 用於處理與周圍文字的位置關係
archive 用於指定程式碼依賴的儲存檔案位置
object 用於指定序列化的物件的檔案位置
name 起個名字,方便用js訪問
alt 如果不支援applet,則瀏覽器應顯示的內容
如果希望向applet傳遞引數,則可以在apple標記中,增加<param name="",value="">標記來進行。如果需要傳遞多個引數,則增加多個標記即可。引數可以通過getParameter(key)來獲取。
1.4 處理多媒體
如今的瀏覽器已經支援img和audio等標籤,用applet來處理已無必要。
AudioClip getAudioClip(URL u) 從指定位置獲取音訊,URL最好是伺服器本地路徑
Image getImage(URL u) 獲取圖片
void play(URL u)
1.5 與瀏覽器通訊
通過applet的getAppletContext()方法可以獲得瀏覽器環境的一個控制代碼。
通過AppletContext可以和瀏覽器進行通訊。
Applet getApplet(String name) 獲取當前網頁指定名字的applet
Enumeration getApplets() 獲取當前網頁所有applet
void showStatus(String s) 在瀏覽的狀態列顯示字串
void showDocument(URL u) 通知瀏覽器載入指定的url
通過提供main,我們可以讓程式,即可以在瀏覽器上執行,也可以本地執行。
2 應用程式打包與jar檔案
2.1 jar簡介
jar包可以方便的將多個class檔案以及其他的資源,如圖片、聲音等打到一個包裡,壓縮傳輸,比較高效,使用上也比較方便。jdk的許多庫都以jar包的形式存在。此外applet的archive屬性也可以引用jar包。
工具jar用來建立jar包,jar其語法和tar類似,而jar檔案本質是個ZIP檔案。
2.2 包描述資訊
jar包中包含類檔案、程式需要的相關檔案以及最重要的描述存檔特性的清單檔案-MANIFEST.MF。它在META-INF子目錄中。manifest檔案由多個節構成,用於描述版本、類檔案、包資訊等。jar工具提供了m引數,可以向manifest檔案中增加新資訊。
manifest中可以定義包是密封性,如果設定了Sealed:true,則其他人無法再將檔案放入此包中。
2.3 建立自執行jar檔案
將相關檔案打到包中,在manifest檔案中說明主類即可。
假設我們生成了測試類Test.class,則在manifest中,增加Main-Class:path/of/class/Test
然後可以在命令列下執行java -jar app.jar即可
如果使用Eclipse,則可以通過工程的export操作,自動化的建立一個jar包。
2.4 資源
資源是程式需要使用的如圖示、聲音等檔案,在Java中資源的定位和使用由程式自己來決定。而在微軟的開發環境下,資源通常是在程式內部,由IDE生成和管理。
如果要使用資源,首先獲得具有資源的物件的Class例項,然後呼叫getResource(String res/Path/Name)獲得資源URL路徑,最後通過URL來讀取資源流。如果資源是文字,則可以直接讀入;如果資源是影象或聲音,則使用getImage或getAudioClip來讀取。這個過程可以簡化為直接呼叫getResourceAsStream(resName)。
java.lang.Class
URL getResource(String name) 找到與類位於同一位置的資源,返回一個URL
InputStream getResourceAsStream(String name)
3 WebStart
Java web start用於通過網路釋出Java應用。使用者只是通過瀏覽器下載程式jnlp,並支援瀏覽器呼叫,但呼叫後並不執行在瀏覽器內,而是在瀏覽器外執行。jnlp程式連網後會下載所需要的資源,並獨立執行,使用者後續再次使用jnlp程式時,會使用之前下載的快取。
建立jnlp應用,應該將包打到jar中,然後建立一個jnlp格式的描述符檔案。把檔案放在web伺服器上供使用者下載,需要確保web伺服器支援MIME型別application/x-java-jnlp-file。
javax.jnlp包中提供了供jnlp程式使用的一些API。不在此描述。
4 程式配置儲存
4.1 Properties
在容器一節中,簡單介紹了Properties類。其可以方便的進行平坦配置的儲存和讀取。
java.util.Properties
String getProperty(String key)
void setProperty(Strig key,String val)
java.lang.system
Properties getProperties() 返回java的預設配置類
String getProperty(String key) 返回指定key的配置項
4.2 Preference
Properties不適合儲存結構化的資料,而Preference類則比較適合。
Java將所有的配置集中存放到配置中心,並採用樹形結構進行儲存,所有程式都可以共用。每個結點的路徑名以/path/name的形式出現。每個結點都有一個獨立的表來存放鍵/值對。
java.util.prefs.Preferences
static Preferences userRoot() 獲取使用者的配置根結點
static Preferences systemRoot() 獲取系統配置的根結點
Preferences node(String path) 獲取指定路徑的配置
Preferences userNodeForPackage(Class c) 以當前類名路徑查詢配置
String get(String key,String default) 獲取指定的鍵值,必須指定在未查詢時的預設值
int getInt(String key,int default)
XXX getXXX(String key,Xxx default) XXX為long/float/double/bool/byte[]
void put(String key,String value)
void putInt(String key,int value)
String[] keys() 列舉節點中全部鍵
void exportSubtree(OutputStream out) 匯出配置
void exportNode(OutputStream out)
void importPreference(InputStream in) 匯入配置
import javax.swing.*; /* * <applet code="TestApplet.class" width="300" height="300"></applet> */ public class TestApplet extends JApplet { public void init() { JLabel label = new JLabel("Hello world",SwingConstants.CENTER); add(label); } }
java.applet.Applet void init() 第一次載入applet時呼叫的方法,進行初始化操作 void start() 開始執行 void stop() 停止執行 void destory() 釋放資源 1.2 安全相關 Applet提供了安全機制,以防止未授權的applet訪問本地環境。通常它可以在沙箱中下載伺服器上的資料,顯示圖片、播放音樂、取得使用者的輸入並返回給伺服器。 當在沙箱中執行時,它不能訪問本地可執行程式和資源;只能與當前伺服器通訊;只能極少數的系統資訊如OS名稱與版本等;如果希望獲得更大的能力,則需要通過證書認證,以可以像本地應用一樣訪問系統。 1.3 HTML標記