谈一谈applet踩过的坑
看完我这篇文章,你会简单使用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踩过的坑的更多相关文章
- CentOS7.2上用KVM安装虚拟机window10踩过的坑
最近两个星期一直在琢磨kvm安装window10操作系统,并且通过桥接模式与外界通信,经历了九九八十一难,终于搞定.下面就记录以下我们在探索的过程中踩过的坑. 安装KVM 1. 系统要求:需要一台可以 ...
- 《C++之那些年踩过的坑(一)》
C++之那些年踩过的坑(一) 作者:刘俊延(Alinshans) 本系列文章针对我在写C++代码的过程中,尤其是做自己的项目时,踩过的各种坑.以此作为给自己的警惕. 转载请注明原文来自: http:/ ...
- apicloud地图、即时通讯、人脸识别登录、以及平时踩过得坑
apicloud技术浅谈 导语 apicloud 的学习也有一段时间了,这是我个人的一些经验,和踩过的坑,希望对大家能有一些帮助. apicloud的知识准备 apicloud 是一个用原生的思想搭建 ...
- ng-zorro-antd中踩过的坑
ng-zorro-antd中踩过的坑 前端项目中,我们经常会使用阿里开源的组件库:ant-design,其提供的组件已经足以满足多数的需求,拿来就能直接用,十分方便,当然了,有些公司会对组件库进行二次 ...
- 项目中踩过的坑之-sessionStorage
总想写点什么,却不知道从何写起,那就从项目中踩过的坑开始吧,希望能给可能碰到相同问题的小伙伴一点帮助. 项目情景: 有一个id,要求通过当前网页打开一个新页面(不是当前页面),并把id传给打开的新页面 ...
- web开发实战--弹出式富文本编辑器的实现思路和踩过的坑
前言: 和弟弟合作, 一起整了个智慧屋的小web站点, 里面包含了很多经典的智力和推理题. 其实该站点从技术层面来分析的话, 也算一个信息发布站点. 因此在该网站的后台运营中, 富文本的编辑器显得尤为 ...
- "开发路上踩过的坑要一个个填起来————持续更新······(7月30日)"
欢迎转载,请注明出处! https://gii16.github.io/learnmore/2016/07/29/problem.html 踩过的坑及解决方案记录在此篇博文中! 个人理解,如有偏颇,欢 ...
- 【转载】Fragment 全解析(1):那些年踩过的坑
http://www.jianshu.com/p/d9143a92ad94 Fragment系列文章:1.Fragment全解析系列(一):那些年踩过的坑2.Fragment全解析系列(二):正确的使 ...
- Redis Cluster踩过的坑
Redis Cluster踩过的坑请参考如下链接:http://www.iteye.com/blogs/subjects/Redis_Cluster_Devops
随机推荐
- C# 实现语音听写
本文系原创,禁止转载. 分享如何使用c#对接科大讯飞语音听写服务,简单高效地实现语音听写. 实现语音听写主要分为录音和语音识别两部分:录音是指获取设备声卡端口的音频数据并将之保存为音频文件,语音识别就 ...
- USB的包结构及包分类
USB的传输总是低位在前,高位在后. USB的传输方向:从设备到主机的数据为输入:从主机到设备的数据叫做输出. 1. 包结构 以同步域开始,紧跟着一个包标识符PID(Packet Identifier ...
- MySQL巧用自定义函数进行查询优化
用户自定义变量是一个很容易被遗忘的MySQL特性,但是用的好,发挥其潜力,在很多场景都可以写出非常高效的查询语句. 一. 实现一个按照actorid排序的列 mysql; Query OK, rows ...
- ReentrantLock实现原理及源码分析
ReentrantLock是Java并发包中提供的一个可重入的互斥锁.ReentrantLock和synchronized在基本用法,行为语义上都是类似的,同样都具有可重入性.只不过相比原生的Sync ...
- 【原创】09. easyui-tabs 配合 iframe 使用,请求两次等问题
描述 需要把已经做好的几个设备管理页面.转为子菜单管理:直接使用 easyui-tabs 配合 iframe 是最省时省力的. 存在问题 当点击 "设备管理" 会出现子页面多次加载 ...
- 文科生细谈学习Linux系统的重要性
首先大概介绍下自己,我学的是公共事业管理方面的专业,可以说是面向纯理论,社区管理社会管理的专业,但是从大二开始,对网络及服务器运维方面产生浓厚兴趣,并不断在网上找相关资料. 在这期间经历过很多,单说桌 ...
- ASP.NET Core MVC – 自定义 Tag Helpers
ASP.NET Core Tag Helpers系列目录,共四篇: ASP.NET Core MVC Tag Helpers 介绍 ASP.NET Core MVC – Caching Tag Hel ...
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(四)代码简化
点这里看实际效果! 账密:admin 123456 敲了一天的代码,有些烦,感觉前一篇文章写的太笼统了,哈哈哈. 本来呢,也就是刚开始写,所以很多细节都想不到,源码也放上来了,自己动动手应该也 ...
- SecureCRT 常用命令大全
常用命令:一.ls 只列出文件名 (相当于dir,dir也可以使用) -A:列出所有文件,包含隐藏文件. -l:列表形式,包含文件的绝大部分属性. -R:递归显示. --help:此命令的帮助. 二. ...
- redis单机安装以及简单redis集群搭建
安装环境: 两台虚拟机都是Centos 7.0 IP分别为:192.168.149.132 192.168.149.133 Redis采用的版本是redis-3.2.4 集群是采用两台虚拟机模拟8个 ...