谈一谈applet踩过的坑

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谈一谈applet踩过的坑相关的知识,希望对你有一定的参考价值。

 

看完我这篇文章,你会简单使用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 Mydll
10 {  
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踩过的坑的主要内容,如果未能解决你的问题,请参考以下文章

编程中踩过的坑

JS代码中踩过的坑

golang中创建logger时候踩过的坑

一年开发做过的错事,踩过的坑

pm2踩过的坑

记录一下 开发STM32 USB HID踩过的坑