在applet中访问本地资源

本文为原创,如需转载,请注明作者和出处,谢谢!

    applet运行在沙盒中,因此,在默认情况下无法访问本地的资源。但可以通过签名的方式打破这一限制。签名的过程很简单,读者可以按如下的步骤编写一个applet程序,该程序读取了本地C盘的a.txt文件的内容,并显示在applet上,然后压缩成jar文件,并签名后进行发布。

    下面使用的keytool和jarsigner都是JDK本身带的程序。

第1步  编写applet程序

import java.applet.*;
import java.awt.Graphics;

public class HelloWorld extends Applet
{
    private String name;

    public void paint(Graphics g)
    {
        g.drawString(name, 20, 30);
    }

    @Override
    public void init()
    {
        super.init();
        try
        {
            //  a.txt文件的内容要以UTF-8格式存储
            java.io.FileInputStream fis = new java.io.FileInputStream("c://a.txt");
            java.io.InputStreamReader isr = new java.io.InputStreamReader(fis, "UTF-8");
            java.io.BufferedReader br = new java.io.BufferedReader(isr);
            name = br.readLine();
        }
        catch (Exception e)
        {
            name = e.getMessage();
        }
    }
}

第2步:  编译HelloWorld.java,并压缩成hw.jar文件

    编译HelloWorld.java后,使用如下的命令生成hw.jar

    jar cvf hw.jar HelloWorld.class

第3步:使用keytool命令生成密钥库

    使用如下的命令生成hw.store文件:

    keytool -genkey -keystore hw.store -alias helloworld  

    其中hw.store和helloworld是用户自定义的名字,读者可以起其他的名字。

    在执行上面的命令后,会要求输出一个密码(输出两次,密码长度至少为6位字符),然后会要求输出一些信息,密码是必须输入的,而其他的信息如果不想输入,直接按回车即可,最后会让你确定是否生成hw.store文件,输入“y”,按回车,又让输出主密码,如果密码与刚才输出的密码相同,直接按回车。执行完命令后,会在当前目录生成一个hw.store文件。这一过程如下图所示。


    使用keytool命令生成hw.store文件的默认有效期是180天,也可以使用-validity命令行参数指定有效期,单位为天,如下面的命令指定了有效期为120天:

 keytool -genkey -keystore hw.store -alias helloworld   -validity 120

    如果想查看hw.store的有效期和其他信息,可以使用如下的命令:

keytool -list -v -alias helloworld -keystore hw.store

    执行上面的命令后,将输出如下图所示的信息。


    上图显示的有效期是120天。

第4步:使用jarsigner命令对hw.jar进行签名

    执行如下的命令对hw.jar文件进行签名:

jarsigner -keystore hw.store hw.jar helloworld

第5步:发布与使用applet

    将hw.jar文件放在<Tomcat安装目录>/webapps/test目录中,并在test目录中建立一个applet.jsp文件,代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
    <head>
        <title>第一个applet</title>
    </head>
    <body>
        <APPLET CODE="HelloWorld.class" width=200 height=200 ARCHIVE="hw.jar">
        </APPLET>
    </body>
</html>

    在IE地址栏中输出如下的URL:
    http://localhost:8080/test/applet.jsp

    当第一次访问上面的URL时,会出现如下图所的对话框。


    选中对话框中的复选框,单击“运行”按钮,就可以正常运行applet了(下次再访问applet.jsp,就会会弹出这个对话框了),如果是firefox,也会弹出类似的对话框。

    要运行这个applet,客户端需要安装jdk1.3或以上版本。

    在linux下的firefox中试了一下,发现有时firefox无法正常显示applet。发生这种情况的原因是由于firefox未安装jdk插件,读者可按如下的方法为linux版的firefox安装jdk插件:

    jdk插件的库文件是libjavaplugin_oji.so,这个文件在<JDK安装目录>/jre/plugin/i386/ns7目录中,其中ns7根据当前jdk版本不同而有所差异,但前两个字母都为ns。在linux下,jdk一般都安装在/usr/java目录中。
    找到libjavaplugin_oji.so文件后,再进行<firefox的安装目录>/plugins目录中,使用如下的命令为libjavaplugin_oji.so文件添加一个符号链接:

ln -s <jdk安装目录>/jre/plugin/i386/ns7/libjavaplugin_oji.so

    重启Firefox,再访问applet.jsp页面,就可以正常显示applet了。

国内最棒的Google Android技术社区(eoeandroid),欢迎访问!

《银河系列原创教程》发布

《Java Web开发速学宝典》出版,欢迎定购

时间: 2024-09-20 01:14:13

在applet中访问本地资源的相关文章

急 applet不能访问本地资源

问题描述 我的applet可以在eclipse中运行能读本地图片文件但是部署到tomcat后就报java.security.AccessControlException:accessdenied(java.io.FilePermissionresourceslog.gifread)需要高手帮帮忙急等谢谢! 解决方案 解决方案二:Applet本来就不能访问本地资源,这个是安全限制,不然不就可以随意操作客户端本地的文件了你可以把图片放在服务器上,Applet可以通过URL访问Applet所在的服务器

Applet数字签名,授予访问本地资源

访问 本文章介绍Applet数字签名,授予访问本地资源的方法.步骤一:将Applet Class打成Jar包 如:在命令行中执行以下的语句: jar -cvf MyApplet.jar class 步骤二:(在网页中嵌入Applet)(如何在Html嵌入Apple方法见附录) 下面是嵌入Applet部分的写法: <APPLETCODEBASE = "."CODE = "jcomponent.FileReaderApplet.class"ARCHIVE =&qu

SecurityError Error 2148 SWF 不能访问本地资源

错误提示: SWF 文件不能被本地访问 不能访问本地 只有仅限于文件系统的 SWF 文件和可信的本地 SWF 文件可以访问本地资源 错误信息: SecurityError: Error #2148: SWF 文件 D:\demo\demo.swf 不能访问本地资源 D:\demo\demo\bin-debug\textLayout_4.0.0.10485.swf.只有仅限于文件系统的 SWF 文件和可信的本地 SWF 文件可以访问本地资源. 解决方法: 第一种办法 在Flash插件上右键->全局

win7纯净版系统如何设置允许或拒绝从网络中访问本地电脑

  1.首先使用快捷组合键win+r,然后打开运行并输入"gpedit.msc",回车即可进入组策略管理器; 2.在弹出来的"组策略编辑器"窗口中,依次打开本地计算机策略--计算机配置--Windows 设置--安全设置--本地策略--用户权限分配,并单击用户权限分配,然后右侧窗口中找到并双击"拒绝从网络访问这台计算机"项; 3.然后在打开的"拒绝从网络访问这台计算机属性"窗口中,找到guest用户,删除就是允许guest用户

允许/拒绝从网络中访问本地电脑设置方法

  第1步:使用快捷组合键开始键+R,打开运行窗口输入"gpedit.msc"然后回车即可进入组策略管理器. 第2步:在"组策略编辑器"左侧,依次打开本地计算机策略>计算机配置>Windows 设置>安全设置>本地策略>用户权限分配,并单击用户权限分配,然后右侧窗口中找到并双击"拒绝从网络访问这台计算机"此项. (图1-2拒绝从网络访问这台计算机设置) 第3步:在打开的"拒绝从网络访问这台计算机属性&quo

类成员函数作为多线程的入口函数如何访问对话框资源

问题描述 类成员函数作为多线程的入口函数如何访问对话框资源 我申请了一个类成员函数作为多线程的入口函数,如何在该函数中访问对话框资源(分割后的对话框) 解决方案 需要把类的实例作为线程函数参数传递进去.

Android中实现根据资源名获取资源ID_Android

接触过Android开发的同学们都知道在Android中访问程序资源基本都是通过资源ID来访问.这样开发起来很简单,并且可以不去考虑各种分辨率,语言等不同资源显式指定. 痛点 但是,有时候也会有一些问题,比如我们根据服务器端的值取图片,但是服务器端绝对不会返回给我们的是资源id,最多是一种和文件名相关联的值,操作资源少的时候,可以维护一个容器进行值与资源ID的映射,但是多的话,就需要另想办法了. 便捷的方法 在这种情况下,使用文件名来得到资源ID显得事半功倍. 通过调用Resources的get

Android中实现根据资源名获取资源ID

接触过Android开发的同学们都知道在Android中访问程序资源基本都是通过资源ID来访问.这样开发起来很简单,并且可以不去考虑各种分辨率,语言等不同资源显式指定. 痛点 但是,有时候也会有一些问题,比如我们根据服务器端的值取图片,但是服务器端绝对不会返回给我们的是资源id,最多是一种和文件名相关联的值,操作资源少的时候,可以维护一个容器进行值与资源ID的映射,但是多的话,就需要另想办法了. 便捷的方法 在这种情况下,使用文件名来得到资源ID显得事半功倍. 通过调用Resources的get

Lotus设计资源中的 共享资源-- &amp;amp;gt;文件 中的文件下载到本地的实现方法.

问题描述 共享资源-->文件这个地方在开发的时候把文件放进去.我想写个代码.当notes打开数据库的时候,将文件资源中的指定资源下载到本.可是不知道如果才能访问到资源..我是想将程序使用的jar包在用户打开数据库时自动下载到本地的jvm中.因些想到这个办法.可是目前因为这个问题不能实现.望大侠相助.小弟感激涕零! 解决方案 解决方案二:该回复于2011-10-30 16:55:43被版主删除解决方案三:如果你只是想把jar包下载到本地的话,用不着这么麻烦.首先把jar包放到数据库的简要表文档或者