標籤:複製 www 使用方法 路徑 簡單 out onclick height oid
看完我這篇文章,你會簡單使用applet,你可以使用web項目讀取運行使用者電腦上的dll或者其他任何你想乾的事。js與直接調用applet類裡面的方法,並擷取傳回值。
不談項目背景了。直接乾貨幹起來。
但還是得談下這個技術不是麼。
先看看百度是怎麼說的:我就是applet
然後我自己用到的就是,在網頁中鑲嵌這麼個東西,然後再隨便調用下客戶機的本地dll,讀取下日誌啥的。
然後就是問題不斷啦。什嗎?你一個網站還要讀取我本地dll。想啥呢?我隱私是你隨便搞的?
尼瑪然後基本上瀏覽器都不支援這個東東了。還是得拿出我微軟大佬的ie啊。
準備工作:你是個javer ,你會寫java程式。Myeclipse工具。
下面開始吹牛之旅~~~~~~
1.開啟Myeclipse建立個web項目(此處圖省略...... 我是不是還得教下如何建項目??哈哈哈哈)
2.建立個這個叫applet的東西!!!!(這下面應該有圖!!!!!!)
然後可能你就看到了這個東西~~~產生了一個java檔案跟下面那個很長的html檔案!!!!
2.下面我們該寫一下這個類的內容了了了吧!!!!(直接複製!!!對的複製我下面這個方法!)
1 public void paint(Graphics g) { 2 super.paint(g); 3 g.drawRect(0, 0, 499, 149); 4 g.drawString("我是你的第一個applet程式啊!QAQ", 5, 70);5 }
其實不想解釋這個東西是啥意思,嗯那就不解釋這個是啥意思。等會我們看看效果就好了啊。(就是這麼任性,該導包的導導包!!!!!)
3.下面我們搞下頁面,讓我們寫的東西能在網頁上看到啊。上面產生的html檔案直接刪掉!!我就不用html。我最牛,牛歸牛,但是還是開啟那個index.jsp吧。
<applet id="applet" alt="當前瀏覽器不支援Applet" width="400" height="200" code="com.jd.applet.jdapplet.class" codebase="<%=basePath%>applet/" ></applet>
上面這段代碼放到你的body中。
code:是你的開機檔案包全路徑
codebase:是你的檔案跟路徑。
在WebRoot根目錄建檔案夾啊,然後把編譯好的class檔案放進去,至於如何編譯成class我就不教你,你打我啊。
我們看下結構圖
好了。基礎工作完成。我們要搞事情了!!!!!
首先向訪問到這個頁面,會要求你安裝jre。當然我們開發的一般都是配置好了的。但是也會提示一些雜七雜八的。
先開啟ie!!!!記住是IE!!!360啥的都切換成IE核心
然後開始解決各種許可權問題
問題一:
這個問題呢我們開啟控制台-程式-java然後看到:
把你的地址添加例外進去然後我們再開啟網站你就大概,或許,可能,運氣不錯看到:
這時動動你的小手,點擊運行!!!!!!就看到。。噹噹噹噹
恭喜你,你的applet已成功在瀏覽器運行啦。
下面重頭戲來了!!!運行使用者電腦上的dll!!!!!!!直接開始!!!!!!!
使用jna調用第三方的dll。(我就是第三方!!!哈哈哈,java調用dll有點煩,但是不怕,有人給我們造了輪子,那我們就用呀呀呀)
那麼就先編寫個c++的dll唄:
我用的vs2012編寫的dll(跟著我左手右手一個慢動作,動起來。)
然後下一步下一選擇[email protected]@
然後完成。在標頭檔檔案夾,源檔案檔案夾各自建兩個檔案名稱字隨意我這邊叫mymath.h跟mymath.cpp
mymath.h標頭檔寫以下內容
1 #pragma once 2 3 #ifdef MATH_EXPORTS 4 #define MATH_API __declspec(dllexport) 5 #else 6 #define MATH_API __declspec(dllimport) 7 #endif 8 9 namespace Mydll10 { 11 extern "C" MATH_API int getMax(int a,int b); //函數 12 }
mymath.cpp標頭檔寫以下內容
1 #include "stdafx.h" 2 #include "mymath.h" 3 4 namespace Mydll 5 { 6 int getMax(int a, int b) //函數 7 { 8 return a > b ? a : b; 9 } 10 11 }
然後產生,再去這個項目的目錄下找到debug目錄找到你的dll!
這樣我們的dll就弄好了。複製到你想要的位置。我這邊就放到C盤根目錄
下面開始測試jna(不得不吐槽,網上全尼瑪抄一模一樣的,不是這樣你打我!!!!!!!我就要寫個不是系統內建的dll!!!!!!不吹了。我們開始。)
先把jna包導進你的項目。然後抄代碼啊!!哈哈哈哈,把以下代碼抄進你的applet那個類!!!
1 public interface Mydll extends Library { 2 Mydll Instance = (Mydll) Native.loadLibrary("C:\\Mydll.dll",Mydll.class); 3 int getMax(int a,int b); //這個是你c++dll中定義的方法 4 }
然後寫個main方法測試測試!!!看看能不能出結果。
1 public static void main(String[] args) {2 int a = Mydll.Instance.getMax(2,50);3 System.out.println(a);4 }
我寫的這個方法是比較大小的,輸出的50.
所以我這個調用dll並使用方法完全是oj8k的。
好了,下面我們開始打個jar包。把我們的方法打個jar包
http://www.cnblogs.com/kxdblog/p/4383438.html
直接用myeclipse打jar包參考上面這個地址,不想再打字了。
然後準備工作都做好了。
然後這個dll是放在客戶那的,我們web想訪問,通過applet不是不可能,但是它需要個許可權啊!!!!不能你是個applet就能搞吧,那我電腦上200G小電影不就都被你偷走了。
然後我們就需要簽名我們剛剛弄好的jar包。
http://www.cnblogs.com/tqsummer/archive/2011/01/19/1939013.html
這個地址完美簽名的!!!!!!!!!!你們繼續照著操作。
我們簽名拿到了檔案之後。就可以嘿嘿嘿了
看項目結構。
把一開始簡曆的結構都刪掉,直接複製這幾個檔案去applet下。
然後再改下index.jsp的內容。
1 <applet id="applet" alt="當前瀏覽器不支援Applet" width="400" height="200" code="com.jd.applet.jdapplet.class" codebase="<%=basePath%>applet/" archive="applet_fat.jar"></applet>
我們加個屬性:archive 寫你的打包好的jar名就oj8k了。
我們再次訪問下項目看看報不報錯!!!!!。
換提示了??沒關係,接受並運行。呀,還是我們的小可愛。
下面就是展示技術的時候了,applet與js直接通訊。!!!!!!上代碼!!!!先添加個按鈕。
1 <button type="button" onclick="test()">我要與dll互動!!!</button>
然後是js
1 <script type="text/javascript">2 function test(){3 var applet = document.getElementById("applet");4 var a=applet.getmax();//這個是我們java中編寫的方法。5 alert(a);//彈出結果6 }7 </script>
我們再次訪問下項目。
成功與dll互動並拿到結果。至此,恭喜你完成了。
談一談applet踩過的坑