隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0
          數(shù)據(jù)加載中……

          在applet中訪問本地資源

          本文為原創(chuàng),如需轉(zhuǎn)載,請注明作者和出處,謝謝!

              applet運(yùn)行在沙盒中,因此,在默認(rè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, 
          2030);
              }

              @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命令生成密鑰庫

              使用如下的命令生成hw.store文件:

              keytool -genkey -keystore hw.store -alias helloworld  

              其中hw.store和helloworld是用戶自定義的名字,讀者可以起其他的名字。

              在執(zhí)行上面的命令后,會(huì)要求輸出一個(gè)密碼(輸出兩次,密碼長度至少為6位字符),然后會(huì)要求輸出一些信息,密碼是必須輸入的,而其他的信息如果不想輸入,直接按回車即可,最后會(huì)讓你確定是否生成hw.store文件,輸入“y”,按回車,又讓輸出主密碼,如果密碼與剛才輸出的密碼相同,直接按回車。執(zhí)行完命令后,會(huì)在當(dāng)前目錄生成一個(gè)hw.store文件。這一過程如下圖所示。
              使用keytool命令生成hw.store文件的默認(rèn)有效期是180天,也可以使用-validity命令行參數(shù)指定有效期,單位為天,如下面的命令指定了有效期為120天:

           keytool -genkey -keystore hw.store -alias helloworld   -validity 120

              如果想查看hw.store的有效期和其他信息,可以使用如下的命令:

          keytool -list -v -alias helloworld -keystore hw.store

              執(zhí)行上面的命令后,將輸出如下圖所示的信息。
              上圖顯示的有效期是120天。

          第4步:使用jarsigner命令對hw.jar進(jìn)行簽名

              執(zhí)行如下的命令對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>

              在IE地址欄中輸出如下的URL:
              http://localhost:8080/test/applet.jsp

              當(dāng)?shù)谝淮卧L問上面的URL時(shí),會(huì)出現(xiàn)如下圖所的對話框。
              選中對話框中的復(fù)選框,單擊“運(yùn)行”按鈕,就可以正常運(yùn)行applet了(下次再訪問applet.jsp,就會(huì)會(huì)彈出這個(gè)對話框了),如果是firefox,也會(huì)彈出類似的對話框。

              要運(yùn)行這個(gè)applet,客戶端需要安裝jdk1.3或以上版本。

              在linux下的firefox中試了一下,發(fā)現(xiàn)有時(shí)firefox無法正常顯示applet。發(fā)生這種情況的原因是由于firefox未安裝jdk插件,讀者可按如下的方法為linux版的firefox安裝jdk插件:

              jdk插件的庫文件是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è)符號鏈接:

          ln -s <jdk安裝目錄>/jre/plugin/i386/ns7/libjavaplugin_oji.so

              重啟Firefox,再訪問applet.jsp頁面,就可以正常顯示applet了。





          Android開發(fā)完全講義(第2版)(本書版權(quán)已輸出到臺(tái)灣)

          http://product.dangdang.com/product.aspx?product_id=22741502



          Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


          新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

          posted on 2009-02-06 21:46 銀河使者 閱讀(3209) 評論(2)  編輯  收藏 所屬分類: java 、web 原創(chuàng) 、linux

          評論

          # re: 在applet中訪問本地資源  回復(fù)  更多評論   

          博主:您好!
          我編寫的是一個(gè)public class XXX extends JApplet{}里面包含了很多其它的*.java類,第一步里就只有一個(gè)HelloWorld.java,這樣的話怎么操作?謝謝!請發(fā)到郵箱。麻煩了。
          2009-09-25 08:12 | 陳峰

          # re: 在applet中訪問本地資源[未登錄]  回復(fù)  更多評論   

          通過了!這帖子果斷好啊~多謝博主!
          2012-05-30 22:45 | sunshine
          主站蜘蛛池模板: 濉溪县| 景德镇市| 阜平县| 土默特左旗| 巴楚县| 宁陕县| 化州市| 喀喇| 娄烦县| 竹山县| 庆城县| 钦州市| 黄大仙区| 绥江县| 昔阳县| 延津县| 平果县| 伊金霍洛旗| 石首市| 黎川县| 嘉鱼县| 贵港市| 杭州市| 安徽省| 建宁县| 丹东市| 河间市| 泽普县| 岳西县| 嘉义县| 株洲市| 深水埗区| 洪江市| 高邮市| 安仁县| 双辽市| 剑川县| 乐平市| 班戈县| 深泽县| 松溪县|