`
yangyi
  • 浏览: 115349 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

如何实现包含插件功能的Applet Web界面

    博客分类:
  • Java
阅读更多

不知诸位有没有想过用Applet来组织Web的程序界面?小弟最近整理了一些杂碎的思路,思想完全开放,欢迎批评。
先说一下可能遇到的问题:
1 安全性:Applet对本地资源的操作需要相应的安全许可;
2 库资源的下载:如何下载及管理支持本地Applet的库资源;
3 通信:Applet如何与后台的Servlet进行通信;
4 图形的加载:如何利用Applet动态的实例化并展现界面。

下面一一展开讨论

(一)保障安全性

安全性的主要解决方案是利用Java提供的keytool生成一个keystore,并利用这个keystore对jar包进行signjar的操作。
整个对Java文件的编译,打包和signjar过程可以利用Ant来完成,比如下面的Ant脚本片段就是用来处理signjar的,大家也可以通过相应的Java命令直接处理:

< target  name ="signjar"  depends ="jar" >
 
< signjar  jar ="example.jar"
  keystore
="${basedir}/yangyi.keystore"  storepass ="mypassword"  alias ="mykey" ></ signjar >
</ target >

如果直接用命令,则其形式为:
jarsigner [ options ] jar-file alias
具体的操作方法可以参考下面的链接:
http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/jarsigner.html
通过这个signjar的操作,我们就给这个包中的类进行了一次数字签名,这样,当Applet进行默认许可之外的操作时,窗口将弹出这个数字签名要求本地用户进行确认,只有在确认后,用户才可以继续进行操作。

这样我们可以在第一次用户运行Applet程序时,在用户的许可下动态地在用户的$user.home/.java.policy下生成一个授权文件,以后就可以执行需要的操作了,为保证客户端的安全性,仅赋予用户执行特定文件夹权限的权利,如(仅作为例子,可以根据需要自己配置文件和Socket访问权限):
grant codeBase "file:/home/yiyang/test/×" {
 java.security.AllPermission;
};

(二)下载并管理库支持

这个过程可以通过Java的URL类提供的openConnection方法来获取一个InputStream从而获取到远程的资源(包括支持库和配置文件两部分)
1)对于配置文件,因为其内容都比较少,而且比较简单,可以直接通过输入流来获取,这是没有异议的;
2)对于库文件,在下载之前先到我们管理的库的目录下找到版本索引文件(我们设定一个版本索引文件来管理升级),这个版本索引文件如下所示:

time={资源获取的时间戳}
lib1.jar=1.0
lib2.jar=1.1

其中,服务器端也保留有一份这样的版本文件,当下载库文件时,首先对客户端和服务端的库的总时间戳进行比较,如果客户端大于或等于服务端,则不需下载,否则,如果客户端对应项目为空或者其总的时间戳小于服务端,则进一步比较内部库文件的版本,发现版本低的库或在客户端不存在的库后,自动到服务器上进行下载,在下载成功后,更新客户端的索引文件。

(三)通信

这个问题小弟曾在以往的blog中有过详细的讨论,可以到http://yangyi.blogjava.net中的相应随笔中找到答案。总的来说,在类型协议并不复杂,且客户端,服务端均为Java开发的情况下,应用Hessian是一个好的解决方案,需要指出的是Hessian中的代码对客户端来说并不是全部必须的,大家可以根据客户端的使用情况对这个库进行瘦身。只保留作为客户端必要的类即可。

(四)动态的实例化及插件结构

我们要实现用户界面的集成,从根本上说要解决下面的几个问题:
1)菜单集成
2)支持库集成
3)集成点
4)输出变量
对于客户端为Applet开发的插件,我们把上面的四项配置统一在XML文件中进行描述定义。
这里需要注意的是菜单要提供名称,支持库要提供下载路径或者本地路径,集成点我们希望是一个JPanel。
在定义好XML后,可以到网址:http://www.flame-ware.com/xml2xsd/去获得一个对应的schema,利用这个schema和JAXB提供的xjc工具,我们就可以生成对应的XML操作类,来对配置进行处理。
对于菜单的集成可以动态地在JMenu中添加MenuItem(表示插件的功能)
根据配置的支持库的位置,我们可以通过Java的URLClassLoader对库进行动态的加载,然后根据相应的集成点,获取实例,这个过程的示例代码如下所示:

File f  =   new  File( " a.jar " );  // a.jar是我们从配置文件中读取的支持库
URL url  =   null ;
Class lib 
=   null ;
try   {
 url 
=  f.toURI().toURL();
 lib 
=  Class.forName( " Lib " true new  URLClassLoader(
   
new  URL[]  { url } ));  // Lib是我们从配置文件中读取的集成点
 JPanel plugin_panel  =  (JPanel)lib.newInstance();
 
return  plugin_panel;
}
  catch  (Exception e)  {
 e.printStackTrace();
}

对于输出变量,其主要作用是用户各个插件之间的信息交互,我们可以通过一个总的HashMap来实现,为避免变量值出现冲突,在变量名前自动加上插件名的前缀。
如plug_in1的变量var1,其系统名称为:plug_in1__var1.

解决了上面的四个障碍,我们就可以把精力投入到具体的功能实现上了。

分享到:
评论

相关推荐

    Applet整合到web环境

    Applet是一种Java小程序,它可以嵌入到Web页面中,为用户提供交互式的功能。在Web环境中集成Applet,可以使网页具备更丰富的动态效果和用户界面。本文将深入探讨如何将Applet整合到Web环境,以及解决IE浏览器报找不...

    有applet实现画图的操作界面

    本案例中,我们探讨的是一个利用Applet来实现画图操作界面的应用。这个界面允许用户绘制直线、椭圆、矩形以及曲线,并且可以自定义颜色和画笔的大小,提供了一种丰富的图形绘制功能。 首先,我们需要了解Applet的...

    web 扫描仪程序 applet

    4. **网络通信**:Applet可以利用Java的网络类库与服务器进行通信,获取或上传扫描数据,实现远程扫描功能。 5. **嵌入式功能**:Applet可被设计成轻量级的扫描模块,嵌入到Web应用中,提供内置的安全检查服务。 ...

    简单java Applet做的登录界面

    这个Applet类将包含界面布局和用户交互逻辑。下面我们将详细讨论这个登录界面可能涉及的技术点: 1. **界面设计**: - 使用`javax.swing.*`库中的组件,如`JLabel`、`JTextField`、`JPasswordField`、`...

    同一web页面两个applet通信.

    Applet能够提供交互性和动态功能,比如图形用户界面和与服务器的通信。本篇将深入探讨如何在同一Web页面上实现两个Applet之间的通信。 一、Applet的基本概念 Applet是Java平台的一部分,它运行在客户端的Java虚拟机...

    applet各种效果

    标题“applet各种效果”暗示我们将讨论Java Applet在实际开发中可以实现的各种视觉和功能特性。以下是一些关键知识点: 1. **Applet生命周期**:每个Applet都有一个生命周期,包括加载、初始化、启动、绘画、停止和...

    Start Applet Demo

    7. **浏览器支持**:Applet的运行需要Java插件,而现代浏览器如Chrome和Firefox已经不再支持Java插件,这意味着Applet的使用已经大大减少。 8. **替代技术**:随着Applet的淘汰,Web开发者转向了JavaScript(如...

    javaapplet

    Java Applet是Java技术在早期Web开发中使用的一种方式,它允许开发者创建可以在浏览器中运行的小型Java程序。这个"javaapplet"压缩包可能包含了用于教学或示例的Applet程序,适合初学者了解和学习。下面我们将深入...

    Applet 实现 简单钢琴

    - 现代替代方案包括使用Java Web Start、JavaScript(如Web Audio API)或现代Web框架(如WebGL,WebAssembly)来实现类似功能。 总结:本教程通过Applet技术展示了如何构建一个简单的在线钢琴应用。虽然Applet已...

    APPLET 实例讲解

    现代Web开发更倾向于使用JavaScript、HTML5的Canvas、SVG或者WebGL等技术来实现类似的功能。例如,WebSocket提供实时通信,WebAssembly可以运行编译后的原生代码,而Web Components则允许创建自定义的HTML元素。 六...

    Java燗applet+jasperReport 实现web端打印

    - 确保包括了`reportprint.jar`,其中包含了自定义的Applet程序`JRPrinterApplet.class`,以及JasperReport提供的支撑类。 3. **Java Applet代码分析** 以下为`JRPrinterApplet`类的部分关键代码示例: ```...

    Java Applet 入门教程

    初始化阶段是Applet被创建时,加载阶段是Applet的图形用户界面(GUI)组件被绘制,运行阶段是Applet开始执行其主要任务,终止阶段是Applet被销毁时。 **Applet 的主要类和方法** - `Applet` 类:所有Applet的基类...

    Java Applet实例讲解

    Java Applet是Java技术在早期Web开发中的一种应用方式,它允许开发者创建可以在浏览器中运行的小型Java程序。这些小程序可以增强网页的功能,比如交互式表单、动态图像或者简单的游戏。在本实例讲解中,我们将深入...

    Java Applet逼真钢琴界面及音效.rar

    总的来说,"Java Applet逼真钢琴界面及音效"是一个很好的学习资源,它结合了GUI设计、音频处理和Web交互等多个Java编程的方面。对于初学者来说,通过这个实例可以深入理解Java Applet的工作机制,同时也能学习到如何...

    applet小程序事例

    - **现代Web技术**:JavaScript和HTML5等提供了更强大的Web开发能力,无需额外插件即可实现丰富的用户界面和交互。 尽管如此,学习和理解Applet对于了解早期的Web编程历史和技术演进仍然具有价值。通过分析和实践...

    java+applet 聊天程序

    创建Applet通常涉及编写一个继承自`java.applet.Applet`类的Java类,实现所需的功能。然后,将Applet包含在HTML页面中,设置`&lt;applet&gt;`标签的`code`属性指向编译后的`.class`文件,并可能需要提供`width`和`height`...

    javaApplet 实例入门教程

    JavaApplet是一种小型的Java应用程序,它能够在Web浏览器中运行,提供丰富的用户界面和交互功能。与传统的客户端应用程序不同,Applet需要通过Web服务器分发,并由支持Java的Web浏览器解释执行。 2. **开发环境** ...

    Applet示例

    9. **Applet的替代技术**:随着Web技术的发展,Applet逐渐被AJAX、WebSocket、WebGL等技术取代,因为它们不需要插件,且在跨平台和安全性方面表现更好。 10. **Applet的局限性**:由于需要Java插件支持,Applet的...

    java中通过applet访问本地资源

    6. **替代技术**:考虑到Applet的局限性和安全性问题,现代Web开发更倾向于使用JavaScript、HTML5和Web服务(如RESTful API)来实现类似的功能。这些技术无需依赖客户端插件,且更符合现代Web开发的标准和最佳实践。...

    java Applet 小程序

    在Web的早期,Applet是Java技术在Web应用中的重要组成部分,允许开发者创建动态和丰富的图形用户界面。然而,随着JavaScript和现代Web框架的发展,Java Applet的使用逐渐减少,被更现代的技术如HTML5取代。 Java ...

Global site tag (gtag.js) - Google Analytics