Java applet實例詳解
在做一個portal項目時,需要從portal單點登錄到一個C/S的業務系統,這樣就需要從瀏覽器調用客戶端本地的單點程序SSO,進而進入C/S的業務系統。想了一下有兩種解決辦法,一是寫一個dll或ocx控件去調用SSO,二是通過applet調用SSO。
最后我們選擇了applet的方式,在寫的過程中,發現細節問題還挺多,現我把它列舉出來,希望你少走彎路。
一、先看看一個簡單的applet.
- import java.applet.*;
- import java.awt.*;public class HelloApplet extends Applet
- {public void paint(Graphics g) { g.drawRect(0, 0, 499, 149);
- g.drawString("Printing...", 5, 70);}}
以下是html頁面:
- <HTML>
- <HEAD>
- <TITLE>A Simple Program< SPAN>TITLE>
- < SPAN>HEAD>
- <BODY>
- <CENTER>
- <APPLET CODE=" HelloApplet.class" WIDTH="500" HEIGHT="150">
- < SPAN>APPLET>
- < SPAN>CENTER>
- < SPAN>BODY>
- < SPAN>HTML>
運行的前提是把編譯后的HelloApplet.class拷貝的和html同一個目錄下。這是個很簡單的例子,但這樣簡單的例子在實際應用中用處很少。
二、下面接著學一下applet的標簽的用法。
先學習一下applet標簽的屬性:
Width: Applet在Html頁面上的寬度
Height : Applet在Html頁面上的高度
Name : Applet在Html頁面上的名稱,用于區名一個Html頁面上的多個Applet。
Id:為 applet 指定一個 id 屬性,從而能夠將其作為簡單的對象處理,用javascript調用其對象的方法。
Archive: 當 applet 被存儲在某個 JAVA 檔案文件或 ZIP 文件中時,此 applet 的 URL。
Code: 執行 applet 的 class 的 URL。
Codebase: 指示 applet 的基準 URL,假如 code 屬性是相對的。
Param:傳遞參數。
這些屬性里面,可能最容易出現錯誤的是Code和Codebase屬性。舉個例子可能就明白了:
假如我的web工程下有個index.jsp的頁面放在根目錄下,該頁面需要調用一個applet,而這個HelloApplet.java在com包下。正確的做法是先把HelloApplet.class拷貝到index.jsp的同一目錄下,然后
注意:
1、 code一定要寫包名,codebase="."表示是從index.jsp的當前目錄開始。
2、 一定要把HelloApplet.class拷貝出來放到jsp的頁面目錄下,如果放到web-info/classes/com/下就會出錯,因為web-inf文件夾安全性比較高,客戶端無法訪問的。
#p#
三、下面我們看一個復雜的例子,這個例子中前臺的頁面需要調用的applet不是一個class,這樣就需要調用一個jar包,而且這個applet需要調用客戶端本地的應用程序。
(1) Applet類:
- package com;import java.applet.*;
- import java.awt.*;import java.io.IOException;
- public class HelloApplet extends Applet { public void paint(Graphics g)
- { g.drawRect(0, 0, 499, 149);
- g.drawString("Hello World", 5, 70); } /** * 通過applet調用本地的計算器 */
- public void openApp() { String url = "C:\\WINDOWS\\system32\\calc.exe";
- System.out.println("url=" + url);
- try { Runtime.getRuntime().exec(url); }
- catch (IOException e) { e.printStackTrace(); } }}
jsp頁面:
- <%@ page language="java"
- import="java.util.*" pageEncoding="GBK"%>
- "-//W3C//DTD HTML 4.01 Transitional//EN">
- ARCHIVE = "helloApplet.jar" WIDTH="500" HEIGHT="150">
(3)把HelloApplet打成jar包,因為在實際的應用中一個類就能解決問題的情況很少。Cmd 切換到web-info/classes目錄下,通過如下命令打包:
jar -cvf helloApplet.jar *.* |
(4)為了使得applet能夠訪問本地的應用,需要給它簽名。
keytool -genkey -keystore hello.store -alias hello |
這個命令用來產生一個密匙庫,執行完畢后應該產生一個 hello.store的文件,這個名字你可以對它進行修改。另外在執行命令的時候還有提示你輸入密匙庫的密碼,這里你一定要記住,否則后面要用的時候無法輸入。輸入密碼后,它會提示你輸入用戶名,公司名等信息,這些都不是必須輸入的,你可以直接回車跳過,最后問你輸入是否正確,你可以輸入y或n回答正確或錯誤。
keytool -export -keystore hello.store -alias hello -file hello.cert |
這個命令用來產生簽名時所要用的證書,這個命令執行完后產生一個pepper.cert的文件。
jarsigner -keystore hello.store helloApple |
這個命令用上面產生的證書將我們的jar文件進行了簽名。最后把該jar包拷貝到jsp文件所在地目錄下。
(5)因為applet的運行是沙箱機制,在調用本地程序時需要做安全性設置。在本地運行該applet的jre\lib\security\java.policy文件里最后加permission java.security.AllPermission;這里需要注意的是如果客戶端裝有多個jre的話,需要找一下哪個jre是真正運行applet的。
(6)在運行的時候,第一次會提示是否信任該applet,點擊使準信任,然后運行,下次就不會在提示。
注意:在用瀏覽器調試applet的過程中,可以打開java控制臺,位置在Ie的工具菜單的java控制臺。
【編輯推薦】


















