在applet中访问本地资源

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

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

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

第1步 编写applet程序

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> import java.applet. * ;
import java.awt.Graphics;

public class HelloWorld extends Applet
{
private Stringname;

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

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

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

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

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> jarcvfhw.jarHelloWorld.class

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

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

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> keytool-genkey-keystorehw.store-aliashelloworld

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

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

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> keytool-genkey-keystorehw.store-aliashelloworld-validity 120

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

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> keytool-list-v-aliashelloworld-keystorehw.store

执行上面的命令后,将输出如下图所示的信息。
上图显示的有效期是120天。

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

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

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> jarsigner-keystorehw.storehw.jarhelloworld

第5步:发布与使用applet

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

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> <% @pagelanguage = " 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文件添加一个符号链接:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> ln-s<jdk安装目录>/jre/plugin/i386/ns7/libjavaplugin_oji.so

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



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

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

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

在applet中访问本地资源


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论