applet使用实践

原创 2015年07月09日 11:38:51

前言

做的一个项目中,需要浏览器调用本地的一些脚本程序来实现一些功能,一开始看了下火狐插件,发现太麻烦了,于是还是回到了老方法,使用applet来实现。

applet使用

public class AssistorUtil extends Applet{
public void init(){
this.serverip = getParameter("serverip");
this.assistname = getParameter("assistname");
}
public void paint(Graphics g){
            g.drawString("处理中...",20,25);
}

html里加入

<applet id="assistor" code="assistorPlugin.AssistorUtil.class" 
archive="assistor.jar" 
 width="500" height="300">
</applet>

无jar包则不写archive=”assistor.jar”
调用本地脚本

public  List<String> runShell2( String shStr) throws Exception{
List<String> strList = new ArrayList<String>();
Process process;
process = Runtime.getRuntime().exec(new String[]{"/bin/sh","-c",shStr},null,null);
  InputStreamReader ir = new InputStreamReader(process.getInputStream());                                             
LineNumberReader input = new LineNumberReader(ir);
String line;
process.waitFor();
while ((line = input.readLine()) != null){
    strList.add(line);
        }
       return strList;
 }

init方法只调用一次
而且paint方法在浏览器最小化后重新打开仍然会调用

applet的权限

applet默认自然是没有权限调用本地脚本的,这里通常有两个方法进行处理
1. 修改本地policy文件
2. 签名applet的jar包

修改policy

编辑/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.79.x86_64/jre/lib/security/java.policy文件,添加

grant {
  permission java.security.AllPermission;
};

但是这种方法需要修改客户端权限,如果是互联网应用的话肯定是无法使用的。

签名JAR包

讲已经写好的applet打为jar包,这里我使用eclipe进行的打包

生成密钥库

keytool -genkey -keystore assistor.store -alias assistor -validity 3650

导出签名时用到的证书

keytool -export -keystore assistor.store -alias assistor -file assistor.cert 

签名jar压缩文档

jarsigner -keystore assistor.store assistor.jar assistor

签名后,在大多数版本中,都可以通过手动授权后直接调用applet了,而且applet拥有操作本地文件的权限。
效果

JS调用APPLET

很多情况下,都需要与JS结合使用APPLET,这里写一个方法,用于提供给JS调用
写了一个java方法,里面调用本地脚本,再使用JS去调用
HTML里如下

<html>
<title>assistorUtil demo</title>
<hr>
<applet id="assistor" code="assistorPlugin.AssistorUtil.class" archive="assistor.jar" width="500" height="300">
</applet>
<hr>
<input type="button" value="try_it" onclick="tryassist()"/>
<input type="button" value="result" onclick="result()"/>
<script type="text/javascript">
function tryassist(){
alert(1);
        document.assistor.setName("10.1.81.225","10.1.81.222");
alert(2);
        var res = document.assistor.startconfig();
alert(3);
alert(document.assistor.getResult());
alert(document.assistor.isok());
}

function result(){

alert(document.assistor.getResult());
alert(document.assistor.isok());
}
</script>

JS调用applet权限问题

之后发现,尽管已经对JAR包进行了签名,再调用本地脚本时候,仍然不能成功。如果放开policy文件里的权限发现是可以成功的。
查了资料后,发现可以通过在代码中赋予权限,进行调用
代码类似于:

        public  List<String> runShell( final String shStr) throws Exception{
             final List<String> strList = new ArrayList<String>();

                            AccessController.doPrivileged(new PrivilegedAction(){

                                    @Override
                                    public Object run() {
                                            Process process;
                                            try {
                                                    process = Runtime.getRuntime().exec(new String[]{"/bin/sh","-c",shStr},null,null);


                                            InputStreamReader ir = new InputStreamReader(process
                                                            .getInputStream());
                                            LineNumberReader input = new LineNumberReader(ir);
                                            String line;
                                            process.waitFor();
                                            while ((line = input.readLine()) != null){
                                                    strList.add(line);
                                            }
                                            } catch (Exception e) {
                                            // TODO Auto-generated catch block
                                            e.printStackTrace();
                                    }
                                            return strList;
                                    }
                            });


            return strList;
            }

之后再实验,发现成功了!

参考

http://www.chinaunix.net/old_jh/80/158712.html
[精华] Java、Java Applet与 JavaScript间的通信
讲解
http://www.w3cschool.cc/java/java-applet-basics.html
http://blog.csdn.net/majiabao123/article/details/3944379
APPLET权限
http://www.cnblogs.com/tqsummer/archive/2011/01/19/1939013.html
JS调用APPLET权限
http://blog.csdn.net/faye0412/article/details/4566400

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Applet程序中使用的几个基本方法

Applet类是浏览器类库中最为重要的类,同时也是所有java小应用程序的基本类。Apple类中只有一种格式的构造方法public Apple(),此种方法用来创建一个Apple类的实例。因此,在编写...

在页面中嵌入Applet使用opencv调用摄像头,并显示实时摄像头内容

目的:在页面中嵌入Applet使用opencv调用摄像头,并在applet中显示实时视频中的内容。 软件:opencv.2.4.9 jdk:jdk1.8_0_91 浏览器:IE、火狐 相关技术要点: ...

在网页中使用Applet的标签详解

 转自http://blog.csdn.net/snipps/article/details/5524868 上一遍文章简要的说明了什么是Java Plug-in,那么这一篇我们就来就...

解决HMC在IE浏览器无法登录的问题(Java Applet的使用问题)

管理IBM的小型机必须要用到HMC(Hardware Management Console),有时候在使用测试环境使用的时候我们会把HMC装到自己电脑上的虚拟机里面,然后管理小型机,但是在虚拟机里面使...

Java Applet使用简记

Java Applet使用简记

applet tag使用全解

Here's the complete syntax for the APPLET tag. Required elements are inbold. Optional elements are...
  • lhq9220
  • lhq9220
  • 2011年07月19日 10:22
  • 1097

使用Java Applet和Java串口编程API实现电子称称重功能

Java Applet技术应该算是Java语言诞生之初在Web领域唯一的一个卖点,有一段时间非常流行Applet做的动画,聊天室和游戏。但是由于Applet自身存在的一些问题,比如要求浏览器装有JRE...

初学applet使用

昨天和今天主要纠结于Applet在Web调用不成功的问题。今天两天的奋战,终于将问题解决, 贴出来问题的解决方案,方便自己和他人。   情景一:单独的Applet,网页使...

在页面中,关于Applet标签的使用

虽然w3c不推荐使用applet,但用applet在企业内部网(Intranet)中进行applet的部署是一个推荐的常用做法,那么就先来讨论一下标签的使用。 的使用 再早期进行applet的部署...
  • jkaies
  • jkaies
  • 2013年07月31日 15:39
  • 699

Java applet 在JSP中的使用

1. Applet Java class: CryptoApplet.java 2. 编译后,将class 放在某个目录下,这里放在jsp file的相同路径 3. JSP 引用: 包括 js , h...
  • dingxy
  • dingxy
  • 2011年08月03日 15:17
  • 2837
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:applet使用实践
举报原因:
原因补充:

(最多只允许输入30个字)