Applet和Web Service

下午调Applet和Web Service程序,竟然遇到了一堆问题。问题本不可怕,对于我这个Applet新手和Web Service新手来说,出一两个问题那简直就是一定的。所幸,一个一个解决调了。

1. Applet数字签名
Applet要访问客户端本地资源的话,客户端必须接受Applet的数字签名。要不然,Applet是不能对客户端的本地资源进行访问的。google这个问题的时候,2002年之前的文章都需要做policy文件,并且还需要更改客户端的JRE设置。这显然是不符合道理的。到2005年之后的文章一般就说:直接把JAR包打成数字签名的就好了。

如果需要用到的JAR包中的Class需要访问本地资源,而该JAR没有通过数字签名的话,还是会出现Access Denied错误。这个需要注意,所以,一般会把Applet需要用到的JAR都打在一起。我打了多个JAR。

2. WEB SERVICE
使用的开源工具KSOAP1.1之前的版本,AXIS2之前的版本。(历史原因了)
几个非常讨厌的问题:

2.1 参数类型的问题
居然Integer类型,Integer[]这样的类型不能序列化,String,int,byte[]这样简单类型可以初始化。并且byte[]这样的类型,还要使用
[code](new MarshalBase64()).register(classMap);[/code]来注册一下,真是难于使用。有时候开源软件越多,虽然可以给我们提供很多选择,但是,每一个选择都有一定的学习成本。真是,还不如.NET,做出一个良好的实现,就用那个就好。昨天师弟和我说,在.NET中实现树形节点比在JAVA中实现快10倍。可见在快速开发方面,.NET的工具支持还是相当不错的。

要对参数类型序列化,要对返回类型序列化。才行。

2.2 取JAR中的File的问题
在本地取的时候,直接
[code]
String fileStr = Thread.currentThread().getContextLoader().getResource(fileName).getFile();
File file = new File(fileStr);
[/code]就可以了。
但是在Applet中取JAR中的文件的时候,就不能这么取了。
因为加载Applet的类加载器是网络类加载器,将fileStr打出来是
http://***.jar!cn/ac/******/example.sql
那通过new File的方式肯定是没法构建这个文件的。

改变通过取得资源的URL, 然后url.openStream()取得流,然后通过读取流中的信息来得到资源的内容,这个问题困惑了很久,终于搞定了。不管是在本地,还是在客户端都可以执行,没有问题。以后用File的时候得三思。另外,File对象序列化,文件的内容并不会序列化。如果是在本地的话,File对象序列化后再反序列化还是能够得到File所对应的文件内容。但是,如果不是在本地,可就完全不一样了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值