轉(zhuǎn)自 http://www.aygfsteel.com/nokiaguy/archive/2009/02/06/253636.html
applet運(yùn)行在沙盒中,因此,在默認(rèn)情況下無法訪問本地的資源。但可以通過簽名的方式打破這一限制。簽名的過程很簡(jiǎn)單,讀者可以按如下的步驟編寫一個(gè)applet程序,該程序讀取了本地C盤的a.txt文件的內(nèi)容,并顯示在applet上,然后壓縮成jar文件,并簽名后進(jìn)行發(fā)布。
下面使用的keytool和jarsigner都是JDK本身帶的程序。
第1步 編寫applet程序
第2步: 編譯HelloWorld.java,并壓縮成hw.jar文件
編譯HelloWorld.java后,使用如下的命令生成hw.jar
第3步:使用keytool命令生成密鑰庫(kù)
使用如下的命令生成hw.store文件:
其中hw.store和helloworld是用戶自定義的名字,讀者可以起其他的名字。
在執(zhí)行上面的命令后,會(huì)要求輸出一個(gè)密碼(輸出兩次,密碼長(zhǎng)度至少為6位字符),然后會(huì)要求輸出一些信息,密碼是必須輸入的,而其他的信息如果不想輸入,直接按回車即可,最后會(huì)讓你確定是否生成hw.store文件,輸入“y”,按回車,又讓輸出主密碼,如果密碼與剛才輸出的密碼相同,直接按回車。執(zhí)行完命令后,會(huì)在當(dāng)前目錄生成一個(gè)hw.store文件。這一過程如下圖所示。
使用keytool命令生成hw.store文件的默認(rèn)有效期是180天,也可以使用-validity命令行參數(shù)指定有效期,單位為天,如下面的命令指定了有效期為120天:
如果想查看hw.store的有效期和其他信息,可以使用如下的命令:
執(zhí)行上面的命令后,將輸出如下圖所示的信息。
上圖顯示的有效期是120天。
第4步:使用jarsigner命令對(duì)hw.jar進(jìn)行簽名
執(zhí)行如下的命令對(duì)hw.jar文件進(jìn)行簽名:
第5步:發(fā)布與使用applet
將hw.jar文件放在<Tomcat安裝目錄>\webapps\test目錄中,并在test目錄中建立一個(gè)applet.jsp文件,代碼如下:
在IE地址欄中輸出如下的URL:
http://localhost:8080/test/applet.jsp
當(dāng)?shù)谝淮卧L問上面的URL時(shí),會(huì)出現(xiàn)如下圖所的對(duì)話框。
選中對(duì)話框中的復(fù)選框,單擊“運(yùn)行”按鈕,就可以正常運(yùn)行applet了(下次再訪問applet.jsp,就會(huì)會(huì)彈出這個(gè)對(duì)話框了),如果是firefox,也會(huì)彈出類似的對(duì)話框。
要運(yùn)行這個(gè)applet,客戶端需要安裝jdk1.3或以上版本。
在linux下的firefox中試了一下,發(fā)現(xiàn)有時(shí)firefox無法正常顯示applet。發(fā)生這種情況的原因是由于firefox未安裝jdk插件,讀者可按如下的方法為linux版的firefox安裝jdk插件:
jdk插件的庫(kù)文件是libjavaplugin_oji.so,這個(gè)文件在<JDK安裝目錄>/jre/plugin/i386/ns7目錄中,其中ns7根據(jù)當(dāng)前jdk版本不同而有所差異,但前兩個(gè)字母都為ns。在linux下,jdk一般都安裝在/usr/java目錄中。
找到libjavaplugin_oji.so文件后,再進(jìn)行<firefox的安裝目錄>/plugins目錄中,使用如下的命令為libjavaplugin_oji.so文件添加一個(gè)符號(hào)鏈接:
重啟Firefox,再訪問applet.jsp頁(yè)面,就可以正常顯示applet了。
applet運(yùn)行在沙盒中,因此,在默認(rèn)情況下無法訪問本地的資源。但可以通過簽名的方式打破這一限制。簽名的過程很簡(jiǎn)單,讀者可以按如下的步驟編寫一個(gè)applet程序,該程序讀取了本地C盤的a.txt文件的內(nèi)容,并顯示在applet上,然后壓縮成jar文件,并簽名后進(jìn)行發(fā)布。
下面使用的keytool和jarsigner都是JDK本身帶的程序。
第1步 編寫applet程序
import java.applet.*;
import java.awt.Graphics;
public class HelloWorld extends Applet
{
private String name;
public void paint(Graphics g)
{
g.drawString(name, 20, 30);
}
@Override
public void init()
{
super.init();
try
{
// a.txt文件的內(nèi)容要以UTF-8格式存儲(chǔ)
java.io.FileInputStream fis = new java.io.FileInputStream("c:\\a.txt");
java.io.InputStreamReader isr = new java.io.InputStreamReader(fis, "UTF-8");
java.io.BufferedReader br = new java.io.BufferedReader(isr);
name = br.readLine();
}
catch (Exception e)
{
name = e.getMessage();
}
}
}
import java.awt.Graphics;
public class HelloWorld extends Applet
{
private String name;
public void paint(Graphics g)
{
g.drawString(name, 20, 30);
}
@Override
public void init()
{
super.init();
try
{
// a.txt文件的內(nèi)容要以UTF-8格式存儲(chǔ)
java.io.FileInputStream fis = new java.io.FileInputStream("c:\\a.txt");
java.io.InputStreamReader isr = new java.io.InputStreamReader(fis, "UTF-8");
java.io.BufferedReader br = new java.io.BufferedReader(isr);
name = br.readLine();
}
catch (Exception e)
{
name = e.getMessage();
}
}
}
第2步: 編譯HelloWorld.java,并壓縮成hw.jar文件
編譯HelloWorld.java后,使用如下的命令生成hw.jar
jar cvf hw.jar HelloWorld.class
第3步:使用keytool命令生成密鑰庫(kù)
使用如下的命令生成hw.store文件:
keytool -genkey -keystore hw.store -alias helloworld
其中hw.store和helloworld是用戶自定義的名字,讀者可以起其他的名字。
在執(zhí)行上面的命令后,會(huì)要求輸出一個(gè)密碼(輸出兩次,密碼長(zhǎng)度至少為6位字符),然后會(huì)要求輸出一些信息,密碼是必須輸入的,而其他的信息如果不想輸入,直接按回車即可,最后會(huì)讓你確定是否生成hw.store文件,輸入“y”,按回車,又讓輸出主密碼,如果密碼與剛才輸出的密碼相同,直接按回車。執(zhí)行完命令后,會(huì)在當(dāng)前目錄生成一個(gè)hw.store文件。這一過程如下圖所示。

keytool -genkey -keystore hw.store -alias helloworld -validity 120
如果想查看hw.store的有效期和其他信息,可以使用如下的命令:
keytool -list -v -alias helloworld -keystore hw.store
執(zhí)行上面的命令后,將輸出如下圖所示的信息。

第4步:使用jarsigner命令對(duì)hw.jar進(jìn)行簽名
執(zhí)行如下的命令對(duì)hw.jar文件進(jìn)行簽名:
jarsigner -keystore hw.store hw.jar helloworld
第5步:發(fā)布與使用applet
將hw.jar文件放在<Tomcat安裝目錄>\webapps\test目錄中,并在test目錄中建立一個(gè)applet.jsp文件,代碼如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<title>第一個(gè)applet</title>
</head>
<body>
<APPLET CODE="HelloWorld.class" width=200 height=200 ARCHIVE="hw.jar">
</APPLET>
</body>
</html>
pageEncoding="UTF-8"%>
<html>
<head>
<title>第一個(gè)applet</title>
</head>
<body>
<APPLET CODE="HelloWorld.class" width=200 height=200 ARCHIVE="hw.jar">
</APPLET>
</body>
</html>
在IE地址欄中輸出如下的URL:
http://localhost:8080/test/applet.jsp
當(dāng)?shù)谝淮卧L問上面的URL時(shí),會(huì)出現(xiàn)如下圖所的對(duì)話框。

要運(yùn)行這個(gè)applet,客戶端需要安裝jdk1.3或以上版本。
在linux下的firefox中試了一下,發(fā)現(xiàn)有時(shí)firefox無法正常顯示applet。發(fā)生這種情況的原因是由于firefox未安裝jdk插件,讀者可按如下的方法為linux版的firefox安裝jdk插件:
jdk插件的庫(kù)文件是libjavaplugin_oji.so,這個(gè)文件在<JDK安裝目錄>/jre/plugin/i386/ns7目錄中,其中ns7根據(jù)當(dāng)前jdk版本不同而有所差異,但前兩個(gè)字母都為ns。在linux下,jdk一般都安裝在/usr/java目錄中。
找到libjavaplugin_oji.so文件后,再進(jìn)行<firefox的安裝目錄>/plugins目錄中,使用如下的命令為libjavaplugin_oji.so文件添加一個(gè)符號(hào)鏈接:
ln -s <jdk安裝目錄>/jre/plugin/i386/ns7/libjavaplugin_oji.so
重啟Firefox,再訪問applet.jsp頁(yè)面,就可以正常顯示applet了。