Applet Mode

https://github.com/threerings/getdown/wiki/Applet-Mode

——————————————————————————————————————————————————————————

如何以Applet模式运行Getdown。

以签名Applet模式运行Getdown,并下载和运行应用是可能的,这样可以提供一种”in the web browser“的体验。甚至可以让Getdown在同一个JVM(Getdown运行的JVM)中运行应用,允许应用占据Getdown窗口,这样可以提供一个非常像applet的体验。

Signing

因为Getdown必须以签名applet运行,这样它才有权限写入用户的文件系统并运行一个单独的JVM,所以你必须使用一个code signing certificate来签名getdown-client.jar文件。

Getdown是一个通用的启动机制,因此需要使用同样的签名来签Getdown的元数据,否则Getdown可以被任何人以你的签名运行任意程序,这是很糟糕的。

注意Getdown的签名必须是RSA,而不是DSA,用keytool生成签名时默认是DSA,确保传入-keyalg rsa参数。

Applet tag

以applet模式运行Getdown需要创建applet标签,包含基本的元数据,部分元数据会与getdown.txt文件中的重复,以允许applet启动更快一点,并提供更好的用户UI。

下面是applet标签的例子:

<object height="253" width="424" type="application/x-java-applet;version=1.5"
        archive="http://myapp.com/client/getdown-client.jar">
  <param name="archive" value="http://myapp.com/client/getdown-client.jar"/>
  <param name="code" value="com.threerings.getdown.launcher.GetdownApplet"/>
  <param name="appname" value="myapp"/>
  <param name="appbase" value="http://myapp.com/client/"/>
  <param name="bgimage" value="http://myapp.com/client//background.png"/>
  <param name="errorbgimage" value="http://myapp.com/client/background_error.jpg"/>
  <param name="ui.status" value="30, 60, 364, 80"/>
  <param name="ui.status_text" value="FFEC48"/>
  <div class="nojava">You must first install Java to play this game in your browser!</div>
</object>

大部分applet标签是标准的,包括属性width, height, type, archive, code等,Getdown特有的参数如下:

appname

用于决定应用数据被存储的目录名称的标识,随操作系统不同而不同

  • Windows Vista: %HOME%\AppData\LocalLow\myapp\
  • Windows XP, etc.: %HOME%\Application Data\myapp\
  • Mac OS: $HOME/Library/Application Support/myapp/
  • Linux: $HOME/.getdown/myapp/

appbase

与getdown.txt中的appbase相同,用于下载getdown.txt文件以获得所有其他的应用数据。

bgimage, errorbgimage

These should be fully qualified URLs that reference the same images in the ui.background and ui.error_background configuration values from the getdown.txt file. They are duplicated here so that the applet can immediately display a branded user interface without having to first download the getdown.txt file.

ui.status, ui.status_text

These should contain the same values as those specified in the getdown.txt file. These values are only used if there is a problem downloading the getdown.txt file, at which point Getdown needs to display feedback to the user and needs to know where on the errorbgimage to render that feedback.

jvmargN and appargN

You can augment the jvmarg and apparg configuration in getdown.txt with applet parameters (which can be dynamically generated when the user requests the page that contains the <applet> tag).

To do so, simply add jvmargN or appargN <param> tags with increasing values for N. For example:

<object ...>
  <param name="jvmarg0" value="-Xmx256M"/>
  <param name="jvmarg1" value="-Dsun.java2d.opengl=true"/>
  <param name="apparg0" value="--username"/>
  <param name="apparg1" value="someusername"/>
</object>

Note that the jvmarg and apparg configuration specified in the applet tag will appear after the jvmarg and apparg configuration from the getdown.txt file, on the command line.

Signature File

除了要对getdown-client.jar文件签名外,还必须为digest.txt生成签名文件,这可以在生成digest.txt的同时完成。很简单,提供你的Keystore的路径、密码、以及使用的key的别名给Ant的<digest>任务:

<taskdef name="digest" classname="com.threerings.getdown.tools.DigesterTask"
         classpathref="getdown.classpath"/>
<property file="certificate.properties"/>
<digest appdir="${app_dir}" keystore="${sign.keystore}" storepass="${sign.storepass}"
        alias="${sign.alias}"/>

就像你看到的一样,我们推荐你保存敏感的元数据信息到单独的属性文件中,以确保它不会被提交到版本管理系统中,或者泄露给外部的团体,certificate.properties包含下面的数据

sign.keystore = /path/to/keystore.dat
sign.storepass = s3cr3t
sign.alias = mycompanyalias

这样将会生成digest.txt.sig文件,必须放在digest.txt文件同目录。applet将会下载该文件来校验digest.txt文件的内容,如果不能找到digest.txt.sig文件,或者签名不匹配,applet将拒绝运行程序。

因为digest.txt包含了组成应用的所有代码和资源的加密散列值,这意味着别人不可能使用你签名过的getdown-client.jar去做任何除运行你签名过的应用的其他事情。

注意每次更新应用后都必须生成新的digest.txt.sig文件,以及新的digest.txt文件。

Signing getdown-client.jar

Signing the getdown-client.jar file is easily accomplished using the signjar Ant task (which is included with the standard Ant distribution). Here is an example:

<property file="certificate.properties"/>
<signjar keystore="${sign.keystore}" alias="${sign.alias}" storepass="${sign.storepass}">
  <fileset dir="${app_dir}" includes="getdown-client.jar"/>
</signjar>

We assume you have a certificate.properties file configured as described above.

Ensuring User Has Java Plugin

Running Getdown as an applet is predicated on the user having at least Java 1.5 installed on their computer and properly configured as a browser plugin. The applet tag we have shown above should trigger the process of installing the Java plugin if the user does not already have it installed.

Note that we only require JDK 1.5 in our <object> tag above, you may wish to require JDK 1.6, or you may want to use Getdown‘s support for running intself in a 1.5 JDK and then automatically downloading and installing a 1.6 (or newer) JDK as a part of the application download process. See the documentation on getdown.txt for details.

时间: 2024-11-10 15:20:29

Applet Mode的相关文章

《java小应用程序(Applet)和java应用程序(Application)分别编写的简单计算器》

Application和Java Applet的区别.Java语言是一种半编译半解释的语言.Java的用户程序分为两类:Java Application和Java Applet.这两类程序在组成结构和执行机制上都有一定的差异,主要体现在以下几方面:(1)运行方式不同.Java Application是完整的程序,可以独立运行:Java Applet程序不能单独运行, 它必须嵌入到用HTML语言编写的Web页面中,通过与Java兼容的浏览器来控制执行.(2)运行工具不同.Java Applicat

通过JavaScript和Applet获取客户端硬盘号

仅通过JS实现,适用于IE10+浏览器 <script> function getSerialNumber() { var retVal = ""; var locator = new ActiveXObject ("WbemScripting.SWbemLocator"); var service = locator.ConnectServer("."); var properties = service.ExecQuery(&qu

atitit. applet 浏览器插件 控件 的环境,开发,提示总结o9o

atitit. applet 浏览器插件 控件 的环境,开发,提示总结o9o 1. 建立applet:: 1 2. Applet 码 1 3. Applet (awt)跟japplet (swing)的区别.. 1 4. Html 码 1 5. Applet部署:::class 跟个jar 到个weebroot 2 5.1. 导入在的jar ,也放得个weebroot 哈,,,多个jar 逗号分割 2 6. 安全机制排除 D:\jdk1.7.0_01\jre\lib\security\java.

atitit. 浏览器插件 控件 applet 的部署,签名总结 浏览器 插件 控件 的签名安全机制o9o

atitit. 浏览器插件 控件   applet 的部署,签名总结 浏览器 插件 控件 的签名安全机制o9o 1. 服务器部署签名 1 2. 签名流程::生成密钥..导出cert正书,签名 1 3. jarsigner 错误: java.lang.IllegalArgumentException: MALFORMED 1 4. Jar的包装and签名的流程原理 2 5. 参考 2 1. 服务器部署签名 applet 的本地调试,可以使用调整java.policy的解决...虽然中间也能正式版使

让applet像应用程序一样运行

尽管java applet不再流行,但让java程序以多种方式运行会更有意思. DisplayLabel.html 代码 <!DOCTYPE HTML> <html> <head> <title>Java Applet Demo</title> </head> <body> <applet code="DisplayLabel.class" width=250 height=50> <

Java Applet读写client串口——终极篇

測试环境: SDK:Oracle JRockit for Java version 6, Java Communication for Windows 2.0 OS:WINDOWS7 外设:串口条形码扫描枪 Server:Tomcat6 看了网上良莠不齐的关于Applet訪问串口的文章,总结起来所关注的问题无外乎下面3个: 1.    三个文件(comm.jar.javax.comm.properties和win32com.dll)究竟应该存放在什么文件夹中? 2.    怎样实现代码? 3. 

JAVA card 应用开发 创建第一个APPLET

本文讲述在Eclipse环境下,如何创建一个Java卡的项目,新建一个APPLET,运行在Java卡片上. 在建立项目前,必须安装好环境:先下载一个Eclipse,然后安装JCOP即可.(JCOP的下载,需要与NXP签订协议才能拿到安装文件,当然网上可能找到别的版本,这里不讨论).安装次序:安装好Eclipse,然后安装JCOP,然后导入JCOP的授权文件.也可以参考下面这篇文章: 环境搭建:http://blog.csdn.net/menghnhhuan/article/details/761

IReport+JasperReport+Applet报表打印

实现思路: [准备]使用IReport设计并编译报表模版. [服务端]使用JSP完成报表内容填充并获得打印对象. [客户端]使用Applet完成报表打印过程. 这种实现方式需要客户端安装JRE,及打印机驱动. 下面逐步分解: 1.[准备]使用IReport设计并编译报表模版. IReport的安装过程略--. 创建1个简单的报表并编译: 2.[服务端]使用JSP完成报表内容填充并获得打印对象. a.在工程中引入依赖的JAR包,根据报表的组件可能有变化,此处只根据样例报表,引用少数几个. b.编写

JAVA card 应用开发(二) 在项目添加APPLET

在上篇博文中.<JAVA card 应用开发创建第一个APPLET>.介绍了一个项目从无到有. 那么.我们建立了这个项目后,仅仅有一个应用(一个可选AID),假设我希望这个项目能够有多个应用(有多个AID可选).就类似卡片初始化后.我能够选择PSE.能够选择PPSE,并且有多个AID存在,那么怎么在项目中加入AID呢? 1.      在已有的项目名称,右键.选择"New",再选择"Java card Applet".例如以下图1. watermark/

解决自签名Applet仍然弹出安全警告框的方案

我搜索了网上很多方案,都没有解决弹警告框的问题.自己摸索出以下方案: 1. 按自签名步骤生成keystore文件和cert证书 keytool -genkey -keystore hp.keystore -alias hp -validity 3650 keytool -export -keystore hp.keystore -alias hp -file hp.cer 2. 对Applet进行签名 jarsigner -keystore hp.keystore xxxApplet.jar h