看完我这篇文章,你会简单使用applet,你可以使用web项目读取运行用户电脑上的dll或者其他任何你想干的事。js与直接调用applet类里面的方法,并获取返回值。

不谈项目背景了。直接干货干起来。

但还是得谈下这个技术不是么。

先看看百度是怎么说的:我就是applet

然后我自己用到的就是,在网页中镶嵌这么个东西,然后再随便调用下客户机的本地dll,读取下日志啥的。

然后就是问题不断啦。什么?你一个网站还要读取我本地dll。想啥呢?我隐私是你随便搞的?

尼玛然后基本上浏览器都不支持这个东东了。还是得拿出我微软大佬的ie啊。

准备工作:你是个javer ,你会写java程序。Myeclipse工具。

下面开始吹牛之旅~~~~~~

1.打开Myeclipse新建个web项目(此处图省略...... 我是不是还得教下如何建项目??哈哈哈哈)

2.新建个这个叫applet的东西!!!!(这下面应该有图!!!!!!)


然后可能你就看到了这个东西~~~生成了一个java文件跟下面那个很长的html文件!!!!

2.下面我们该写一下这个类的内容了了了吧!!!!(直接复制!!!对的复制我下面这个方法!)

 public void paint(Graphics g)  {
      super.paint(g);
      g.drawRect(0, 0, 499, 149);
      g.drawString("我是你的第一个applet程序啊!QAQ", 5, 70);
 }  

其实不想解释这个东西是啥意思,嗯那就不解释这个是啥意思。等会我们看看效果就好了啊。(就是这么任性,该导包的导导包!!!!!)

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(跟着我左手右手一个慢动作,动起来。)

然后下一步下一选择dll@@

然后完成。在头文件文件夹,源文件文件夹各自建两个文件名字随意我这边叫mymath.h跟mymath.cpp

mymath.h头文件写以下内容

 #pragma once  

 #ifdef MATH_EXPORTS
 #define MATH_API __declspec(dllexport)
 #else
 #define MATH_API __declspec(dllimport)
 #endif  

 namespace Mydll
 {
     extern "C" MATH_API int getMax(int a,int b);    //函数
 }  

mymath.cpp头文件写以下内容

 #include "stdafx.h"
 #include "mymath.h"  

 namespace Mydll
 {
     int getMax(int a, int b) //函数
     {
         return a > b ? a : b;
     }  

 }  

然后生成,再去这个项目的目录下找到debug目录找到你的dll!

这样我们的dll就弄好了。复制到你想要的位置。我这边就放到C盘根目录

下面开始测试jna(不得不吐槽,网上全尼玛抄一模一样的,不是这样你打我!!!!!!!我就要写个不是系统自带的dll!!!!!!不吹了。我们开始。)

先把jna包导进你的项目。然后抄代码啊!!哈哈哈哈,把以下代码抄进你的applet那个类!!!

  public interface Mydll extends Library {
     Mydll Instance = (Mydll) Native.loadLibrary("C:\\Mydll.dll",Mydll.class);
     int getMax(int a,int b); //这个是你c++dll中定义的方法
   } 

然后写个main方法测试测试!!!看看能不能出结果。

 public static void main(String[] args) {
     int a = Mydll.Instance.getMax(2,50);
     System.out.println(a);
 }

我写的这个方法是比较大小的,输出的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的内容。

  <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直接通信。!!!!!!上代码!!!!先添加个按钮。

 <button type="button" onclick="test()">我要与dll交互!!!</button>

然后是js

  <script type="text/javascript">
       function test(){
         var applet = document.getElementById("applet");
         var a=applet.getmax();//这个是我们java中编写的方法。
         alert(a);//弹出结果
       }
   </script>

我们再次访问下项目。

成功与dll交互并拿到结果。至此,恭喜你完成了。

谈一谈applet踩过的坑的更多相关文章

  1. CentOS7.2上用KVM安装虚拟机window10踩过的坑

    最近两个星期一直在琢磨kvm安装window10操作系统,并且通过桥接模式与外界通信,经历了九九八十一难,终于搞定.下面就记录以下我们在探索的过程中踩过的坑. 安装KVM 1. 系统要求:需要一台可以 ...

  2. 《C++之那些年踩过的坑(一)》

    C++之那些年踩过的坑(一) 作者:刘俊延(Alinshans) 本系列文章针对我在写C++代码的过程中,尤其是做自己的项目时,踩过的各种坑.以此作为给自己的警惕. 转载请注明原文来自: http:/ ...

  3. apicloud地图、即时通讯、人脸识别登录、以及平时踩过得坑

    apicloud技术浅谈 导语 apicloud 的学习也有一段时间了,这是我个人的一些经验,和踩过的坑,希望对大家能有一些帮助. apicloud的知识准备 apicloud 是一个用原生的思想搭建 ...

  4. ng-zorro-antd中踩过的坑

    ng-zorro-antd中踩过的坑 前端项目中,我们经常会使用阿里开源的组件库:ant-design,其提供的组件已经足以满足多数的需求,拿来就能直接用,十分方便,当然了,有些公司会对组件库进行二次 ...

  5. 项目中踩过的坑之-sessionStorage

    总想写点什么,却不知道从何写起,那就从项目中踩过的坑开始吧,希望能给可能碰到相同问题的小伙伴一点帮助. 项目情景: 有一个id,要求通过当前网页打开一个新页面(不是当前页面),并把id传给打开的新页面 ...

  6. web开发实战--弹出式富文本编辑器的实现思路和踩过的坑

    前言: 和弟弟合作, 一起整了个智慧屋的小web站点, 里面包含了很多经典的智力和推理题. 其实该站点从技术层面来分析的话, 也算一个信息发布站点. 因此在该网站的后台运营中, 富文本的编辑器显得尤为 ...

  7. "开发路上踩过的坑要一个个填起来————持续更新······(7月30日)"

    欢迎转载,请注明出处! https://gii16.github.io/learnmore/2016/07/29/problem.html 踩过的坑及解决方案记录在此篇博文中! 个人理解,如有偏颇,欢 ...

  8. 【转载】Fragment 全解析(1):那些年踩过的坑

    http://www.jianshu.com/p/d9143a92ad94 Fragment系列文章:1.Fragment全解析系列(一):那些年踩过的坑2.Fragment全解析系列(二):正确的使 ...

  9. Redis Cluster踩过的坑

    Redis Cluster踩过的坑请参考如下链接:http://www.iteye.com/blogs/subjects/Redis_Cluster_Devops

随机推荐

  1. app耗电优化之二 使用电源管理来安排任务

    PowerManager 电源管理(电源使用管理).主要管理设备启动,保持活动,休眠,唤醒.其中为了保持任务,提供了PowerManager.WakeLock(唤醒锁).执行任务时持有这个唤醒锁,就可 ...

  2. Selenium对浏览器支持的版本

    最新的selenium与几种常用浏览器的版本兼容情况: selenium 3.4.0 : Mozilla GeckoDriver 0.18  --  Firefox 53 - 56 Google Ch ...

  3. DL4NLP——词表示模型(二)基于神经网络的模型:NPLM;word2vec(CBOW/Skip-gram)

    本文简述了以下内容: 神经概率语言模型NPLM,训练语言模型并同时得到词表示 word2vec:CBOW / Skip-gram,直接以得到词表示为目标的模型 (一)原始CBOW(Continuous ...

  4. (转)Linux系统安装时分区的选择

    场景:对于Linux系统的分区总是迷迷茫茫的,还是实践少,基础不牢. 以前初识Linux时,对Linux系统安装时分区的选择,一点都不了解,导致几次没法进行下一步安装,因此就静下心来,专门拿出时间研究 ...

  5. 数据结构基础:栈(Stack)

    什么是栈?     栈是限制插入和删除只能在同一个位置上进行的表,这个位置就是栈的顶端,对于栈的操作主要有三种形式:入栈(将元素插入到表中),出栈(将表最后的元素删除,也就是栈顶的元素),返回栈顶元素 ...

  6. 31. leetcode 122. Best Time to Buy and Sell Stock II

    122. Best Time to Buy and Sell Stock II Say you have an array for which the ith element is the price ...

  7. Spring框架集成mybatis框架的配置(笔记)

    <!-- 0.注解扫描 --><!-- 1.导入外部文件 --><!-- 2.数据源 --><!-- 3.session Factory -->< ...

  8. swift UIButton边框添加阴影效果

    btn.layer.shadowOpacity = 0.8 //阴影区域透明度 btn.layer.shadowColor = UIColor.black.cgColor // 阴影区域颜色 btn. ...

  9. swift3.0 移除当前页面的前一个页面

    用的是以下的跳转方式 self.navigationController?.pushViewController(viewController, animated: true) 在当前页面移除方式 s ...

  10. c++ static用法总结【转载】

    static关键字是C, C++中都存在的关键字.static从字面理解,是“静态的“的 意思,与此相对应的,应该是“动态的“. static的作用主要有以下3个: 1.扩展生存期: 2.限制作用域: ...