访问本地资源的方法及装置转让专利

申请号 : CN200810097022.9

文献号 : CN100590597C

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 彭建嘉

申请人 : 华为技术有限公司

摘要 :

本发明公开了一种访问本地资源的方法,包括以下步骤:第一线程设置访问本地资源的任务参数,所述第一线程具有与用户交互的能力;所述第一线程唤醒第二线程,所述第二线程为利用Java语言编写的具有访问本地资源能力的线程;所述第二线程利用所述任务参数访问本地资源。本发明充分利用了Java语言比较完善的安全机制、强大的功能与处理能力,无需考虑兼容性的问题,适合于包括IE和Firefox等各种浏览器。利用第二线程访问本地资源的能力、第一线程与第二线程之间的交互功能,安全可靠地真正实现了在客户端对本地资源的访问。与上述方法相对应,本发明还提供一种访问本地资源的装置。

权利要求 :

1、一种访问本地资源的方法,其特征在于,包括: 第一线程设置访问本地资源的任务参数,所述第一线程具有与用户交互的能力; 所述第一线程唤醒第二线程,所述第二线程为利用Java语言编写的具有访问本地资源能力的线程; 所述第二线程利用所述任务参数访问本地资源。

2、 根据权利要求l所述方法,其特征在于,所述第一线程为JavaScript 线程,所述第二线程为Applet线程。

3、 根据权利要求2所述方法,其特征在于,在唤醒Applet线程的同时, 还包括,将所述JavaScript线程挂起。

4、 根据权利要求3所述方法,其特征在于,在所述Applet线程利用所述 任务参数访问本地资源之后,还包括:唤醒所述JavaScript线程;所述JavaScript线程获取访问本地资源的结果。

5、 根据权利要求4所述方法,其特征在于,在接收到用户触发动作时, 执行所述JavaScript线程设置任务参数的步骤。

6、 根据权利要求5所述方法,其特征在于,在接收到用户触发动作之前, 将所述Applet线程挂起。

7、 根据权利要求2至6任一项所述方法,其特征在于,所述Applet是指 经过数字签名的Applet。

8、 一种访问本地资源的装置,其特征在于,包括:存储单元,用于保存第一线程和笫二线程,所述第一线程具有与用户交 互的能力,所述第二线程为利用Java语言编写的具有访问本地资源能力的线 程;参数设置单元,用于设置访问本地资源的任务参数; 唤醒单元,用于利用第一线程唤起第二线程;任务执行单元,用于通过第二线程利用所述任务参数完成访问本地资源 的任务。

9、 根据权利要求8所述装置,其特征在于,所述存储单元保存的第一线程为JavaScript线程、第二线程为Applet线程。

10、 根据权利要求9所述装置,其特征在于,还包括:挂起单元,用于在所述唤醒单元唤起Applet线程之后,将所述JavaScript线程挂起。

11、 根据权利要求IO所述装置,其特征在于,还包括: 第二唤醒单元,用于在所述任务执行单元通过Applet完成访问任务后,将挂起的JavaScript线程唤醒;结果获取单元,用于利用所述第二唤醒单元唤醒的JavaScript从Applet 线程获取本地资源访问结果。

12、 根据权利要求9所述装置,其特征在于,还包括: 第二挂起单元,用于在没有接收到用户触发动作时,控制将所述Applet线程挂起。

说明书 :

访问本地资源的方法及装置

技术领域

本发明涉及计算机软件技术领域,尤其涉及一种访问本地资源的方法及 装置。

背景技术

在客户端/服务器(Client/Server, C/S )或者浏览器/服务器(Browser/Server, B/S)架构系统中,位于客户端或浏览器端的资源称为本地资源,在B/S架构 下由于客户端只需要一个浏览器就可以访问服务器端所提供的服务,运行在 浏览器的代码来源于互联网,所以在客户端访问本地资源不得不考虑安全性 的问题,目前出于安全性和处理能力两方面考虑,各种技术对在客户端访问 本地资源都有各种限制。
目前一种访问本地资源的方法,是通过JavaScript结合ActiveXObject对 象实现的。其中,JavaScript是由网景(Netscape)公司开发并随导航者 (Navigator )專大^牛一起发布的、介于Java与超文本才示T己i吾言(Hypertext Markup Language , HTML)之间、基于对象事件驱动的编程语言,JavaScript不需要 Java编译器,而是直接运行在Web浏览器中;ActiveXObject对象是ActiveX 控件中的一种,提供自动化对象的接口,允许用户在代码中引用应用程序, 其中,ActiveX是微软(Microsoft)公司对于一系列策略性面向对象程序技 术和工具的统称。通过JavaScript结合ActiveXObject对象实现本地资源访问 比较简单,其形式为:
function ActiveXObject(ProgID : String [, location : String])
其中,ProgID为必选项,格式为"serverName.typeName"的字符串; serverName是提供对象的应用程序的名称;typeName是要创建的对象的类 型或类;location为可选项。
4然而,本发明人在应用中发现,上述通过JavaScript结合ActiveXObject 对象实现的本地资源访问的方案存在一些缺陷。
首先,微软公司开发的ActiveXObject产品仅限于IE (Internet Explorer) 浏览器,对于火狐(Firefox)等浏览器则无法使用,兼容性差。
其次,ActiveXObject只能通过引用应用程序提供的自动化对象接口来实 现访问本地资源的目的,对于某些没有提供接口的本地资源,则无法访问, 这种方案提供的是一种不完全访问;不能标注该应用的来源等基本信息,只 弹出一个统一的提示框询问用户是否允许运行该控件,灵活性不足,且需要 用户在浏览器的安全自定义设置上设置为允许下载ActiveX控件。
最后,由于ActiveXObject脚本语言本身的限制,功能有限,处理能力明 显不足,尤其在需要传输大数据量的场合,使用该方案显得不现实。

发明内容

本发明实施例提供一种访问本地资源的方法及装置,以提高兼容性和提 高灵活性。
为此,本发明实施例采用如下技术方案:
一种访问本地资源的方法,包括:第一线程设置访问本地资源的任务参
数,所述第一线程具有与用户交互的能力;所述第一线程唤醒第二线程,所 述第二线程为利用Java语言编写的具有访问本地资源能力的线程;所述第二 线程利用所述任务参数访问本地资源。
一种访问本地资源的装置,包括:存储单元,用于保存第一线程和笫二
线程,所述第一线程具有与用户交互的能力,所述第二线程为利用Java语言 编写的具有访问本地资源能力的线程;参数设置单元,用于设置访问本地资 源的任务参数;唤醒单元,用于利用第一线程唤起第二线程;任务执行单元, 用于通过第二线程利用所述任务参数完成访问本地资源的任务。
本发明实施例中,由于第二线程是用java语言编写的,所以本发明实施
5例具有java语言所具有的优点,首先,第二线程可以充分利用Java语言强大 的处理能力;其次,相比Jscript, JavaScript具有良好的兼容性,适用于IE以 及Firefox等各种浏览器,无须考虑兼容性的问题;再者,第二线程可以充分 利用Java语言本身比较完善的安全机制;最后,本发明实施例可以做到Java 语言所能做到的对计算机资源的访问功能,通过第一线程与第二线程的交互, 实现了真正意义上的对客户端资源的访问。

附图说明

图1为本发明方法实施例流程图1;
图2为本发明方法实施例流程图2;
图3为本发明方法实施例Applet线程执行流程图;
图4为本发明方法实施例JavaScript线程执行流程图;
图5为本发明实施例装置结构示意图。

具体实施方式

本发明实施例通过第一线程调用第二线程实现对本地资源的访问,所述 第一线程具有与用户交互的能力,所述笫二线程为利用Java语言编写的具有 访问本地资源能力的线程。具体地,第一线程可以为JavaScript线程,第二线 程可以为Applet线程。
Applet是Java语言编写的一种小应用程序,该程序直接嵌入到页面中, 由支持Java的浏览器(IE或Netscape等)解释执行,它可以大大提供Web 页面和服务器端的交互能力和动态执行能力。由于Applet是在用户的计算机 上执行的,因此它的执行速度不受网络带宽或者调制解调器(Modem)存取 速度的限制。
实际上,可以通过数字签名的Applet实现访问本地资源,该方案包括以 下步骤:
①将Applet Class打成Jar (Java Archive File, Java相关文件)包;② 在网页中嵌入Applet;
③ 生成证书及签名;
④ 新建一个策略文件,并添加策略文件;
⑤ 转换HTML文件。
通过上述步骤,经过签名的Applet即可访问本地资源。
但是出于安全性方面的考虑,在JRE 1.4.205之后的版本上,通过
JavaScript调用Applet不再允许访问本地资源,原因在于,JRE 1.4.205
之后的各种版本通过JavaScript调用Applet时,使用的是默认的沙箱安全权限, 而不是经过签名的Applet的安全管理器,因此无法访问本地资源。其中,Java 安全沙箱是Java语言安全体系设计中的概念,运行在沙箱中的代码具有权限 方面的限制,默认情况下,没有经过数字签名的Applet就运行在安全沙箱中。
访问本地资::满足:服务器端进行交互的^求。'° '
参见图1,为本发明方法实施例流程图1,包括:
S101:第一线程设置访问本地资源的任务参数,所述第一线程具有与用 户交互的能力;
S102:第一线程唤醒第二线程,所述第二线程为利用Java语言编写的具
有访问本地资源能力的线程;
S103:第二线程利用第 一线程设置的任务参数访问本地资源。
比如,第一线程为JavaScript线程,第二线程为Applet线程。
本发明实施例充分利用了 Java语言比较完善的安全机制、强大的功能与 处理能力,无需考虑兼容性的问题,适合于包括IE和Firefox等各种浏览器。 通过创建一个Applet线程,利用Applet线程访问本地资源的能力、JavaScript 线程与Applet线程之间的交互功能,安全可靠地真正实现了在客户端使用 JavaScript对本地资源的访问。
7下面结合附图2〜4对本发明方法实施例进行详细介绍。 参见图2,为本发明方法实施例流程图2。
在图2中,JavaScript端与Applet端都是从服务器端下载到客户端上运行 的程序,用JavaScript脚本语言编写的代码称为JavaScript端,用Java语言编 写的Applet代码称为Applet端。可见,JavaScript端和Applet端是不同语言 编写的代码,分别处于不同的文件上,并且,可以从JavaScript调用Applet。 JavaScript线程不等同于JavaScript端,只要是从JavaScript端触发的程序就属 于JavaScript线程,这其中包括从JavaScript端调用的Applet端的函数。同理, 从Applet端触发的线程称为Applet线程。
参见图2,本发明方法实施例包括以下步骤:
S201:将Applet线程挂起,等待JavaScript线程的触发;
S202:用户触发动作;
S203: JavaScript线程调用Applet,设置访问本地资源的任务参数; S204: JavaScript线程唤醒Applet线程;
S205:挂起JavaScript线程,等待Applet线程执行访问本地资源的任务;
S206: Applet线程按照JavaScript线程设置的任务参数执行访问本地资源 的任务;
S207: Applet线程访问本地资源任务完成后,唤醒JavaScript线程; S208: JavaScript线程获取访问结果。
在用户没有触发动作时,是将Applet线程挂起的,参见S201,以此可减 少系统资源的占用,其中,所谓的用户触发动作包括用户在客户端的各种操 作,例如,用户点击网页链接、执行保存等操作动作等。
另外,需要说明的是,本发明实施例中的Applet是指经过数字签名的通 过Java编写的Applet,具体如何获取数字签名的Applet则为现有技术,此处 不作详细阐述。
8可见,本发明实施例利用经过签名并得到用户允许的Applet所具有的访问 本地资源的能力,通过JavaScript线程与Applet线程之间的协调同步,在客户 端事件没有触发时,Applet线程挂起不会占用系统资源,在客户端事件触发时 JavaScript线程调用Applet端的接口方法设置传入的相关参数并唤醒Applet线 程,同时JavaScript线程进入等待状态。在Applet线程访问本地资源完毕时立 刻唤醒JavaScript线程进行资源的获取并返回。该方案充分利用了 Java作为一 种强大语言的优势并做到相对实时和高效。
参见图3,为本发明方法实施例Applet线程执行流程图,包括:
S301:是否接收到用户触发动作,若是,执行S302,否则,执行S305;
S302:按照JavaScript线程设置的任务参数,执行访问本地资源的任务;
S303: i殳置任务完成标志;
S304:唤醒JavaScript线程;
S305:挂起等待,并返回执行S301。
参见图4,为本发明方法实施例Java线程,执行流程图,包括: S401:初始化参凄t;
S402:设置执行访问本地资源的任务标志; S403:设置访问本地资源的任务参数; S404:唤醒Applet线程;
S405:是否接收到Applet线程任务执行完毕响应?若是,执行S406,否 则,执行S407;
S406:从A卯let线程获取本地资源的访问结果;
S407:挂起等待,并返回执行S405。
为了更加直观理解本发明实施例,下面给出具体实例,但是需要说明的 是,以下只是一个具体实例,在具体实施时并不限于此。
(1 ) Applet端伪代码:Partl doMethod方法:
/*此方法负责设置任务参数唤醒Applet线程获取结果*/ doMethod(parameter)
synchronized (lockForApplet)
〃设置访问本地资源标志位为真,Applet线程根据此标志位 〃决定是否执行访问本地资源的任务。
doMethodFlag= true;
〃设置访问本地资源任务的参数。
globleParameter = parameter;
〃访问本地资源任务是否完成的标志位初始化为假。
isFinish= false; 〃唤醒Applet线程。
lockForApplet.notifyAll();
while (true)
synchronized (lockForJavaScript) try
〃如杲访问本地资源任务尚未完成则JavaScript线程挂起等待〃如果访问本地资源任务完成则跳出循环,获取结果(
if (!isFinish)
lockForJavaScript.wait(); break;
catch (InteiruptedException ie) continue;
〃获取执行结果,返回。 return result;
(2) Applet线程伪代码: /*此方法负责访问本地资源、通知Javascript线程获取结果" public void runO {
While(!stop)
synchronized (lockForAppplet)
ii〃如果访问本地资源标志位为真,则根据上述doMethod方法设置的访 〃问本地资源任务的参数访问本地资源,如果访问本地资源标志位为假, 〃则Applet线程挂起,等待。
if(doMethodFlag)
〃访问本地资源标志位初始化为假, doMethodFlag = false; 〃执行访问本地资源的任务。 result = doAccessResource(globleParameter); synchronized (lockForJavaScript)
〃访问本地资源任务是否完成的标志位设置为真, isFinish = true;
〃执行完毕后唤醒JavaScript线程。 lockForJavaScript.notifyAll();
else
〃Applet线程挂起,等待JavaScript线程的触发。 lockForAppplet.wait();
12(3) JavaScript端伪代码: /*用户触发代码*/ fUnction doMethod(parameter)
〃直接调用applet的doMethod方法。 applet.doMethod(parameter);
本发明实施例中,由于Applet是用java语言编写的,所以本发明实施例 具有Java语言所具有的优点。
首先,Applet是用Java语言编写的,可以充分利用Java语言强大的处理 能力;
其次,相比Jscript, JavaScript具有良好的兼容性,适用于IE以及Firefox 等各种浏览器,无须考虑兼容性的问题;
再者,Applet是用Java语言编写的,可以充分利用Java语言本身比较完 善的安全机制;
而且,本发明实施例可以做到Java语言所能做到的对计算机资源的访问 功能,实现了真正意义上的利用JavaScript对客户端资源的访问。
与方法相对应,本发明实施例还提供一种访问本地资源的装置,该装置 可以是客户端设备,也可以是存在于客户端设备中的功能实体。
参见图5,为该装置结构示意图,该装置至少包括存储单元500、参数设 置单元501、唤醒单元502和任务执行单元503, '
其中,
13存储单元500用于保存第一线程和第二线程,所述第一线程具有与用户
交互的能力,所述第二线程为利用Java语言编写的具有访问本地资源能力的 线程;
参数设置单元501用于设置访问本地资源的任务参数; 唤醒单元502用于利用第一线程唤起第二线程; 任务执行单元503用于通过第二线程利用所述任务参数完成访问 本地资源的任务。
优选地,所述存储单元500保存的第一线程为JavaScript线程、第二线程 为Applet线程。
优选地,该装置还包括挂起单元504。
挂起单元504用于在所述唤醒单元502唤起Applet线程之后,将所述
JavaScript线程挂起。
进一步,该装置还包括第二唤醒单元505和结果获取单元506。
第二唤醒单元505用于在所述任务执行单元503通过Applet完成访问任 务后,将挂起的JavaScript线程唤醒;
结果获取单元506用于利用所述第二唤醒单元505唤醒的JavaScript从 Applet线程获取本地资源访问结果。
优选地,该装置还包括第二挂起单元507。
第二挂起单元507用于在没有接收到用户触发动作时,控制将所述Applet 线程挂起。
其中,参数设置单元501在接收到用户触发动作时才进行任务参数的设 置;而Applet是指利用Java语言编写的经过数字签名的Applet。
对于装置的其他具体实现细节可参见方法实施例,在此不再赘ii。 可见,本发明实施例利用Applet所具有的访问本地资源的能力,通过JavaScript线程与Applet线程之间的协调同步,在客户端事件没有触发时, Applet线程挂起不会占用系统资源,在客户端事件触发时JavaScript线程调用 Applet端的接口方法设置传入的相关参数并唤醒Applet线程,同时JavaScript 线程进入等待状态。在Applet线程访问本地资源完毕时立刻唤醒JavaScript线 程进行资源的获取并返回。该方案充分利用了 Java作为一种强大语言的优势并 做到相对实时和高效。
由于Applet是用java语言编写的,所以本发明实施例具有java语言所具 有的优点。首先,Applet是用Java语言编写的,可以充分利用Java语言强大 的处理能力;其次,相比Jscript, JavaScript具有良好的兼容性,适用于IE以 及Firefox等各种浏览器,无须考虑兼容性的问题;再者,Applet是用Java语 言编写的,可以充分利用Java语言本身比较完善的安全机制;而且,本发明 实施例可以做到Java语言所能做到的对计算机资源的访问功能,实现了真正 意义上的利用JavaScript对客户端资源的访问。
.贝可以理解买现上述买施例访问本;也资源 程可以通过程序指令相关的硬件来完成,所述的程序可以存储于可读取存储 介质中,该程序在执行时执行上述方法中的对应步骤。所述的存储介质可以 如:ROM/RAM 、磁》莱、光盘等。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普 通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润 饰,这些改进和润饰也应视为本发明的保护范围。