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.

Applet Mode的更多相关文章

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

    Application和Java Applet的区别.Java语言是一种半编译半解释的语言.Java的用户程序分为两类:Java Application和Java Applet.这两类程序在组成结构和 ...

  2. applet示例 WelcomeApplet.java <Core Java>

    import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.Font; import java.awt.Grap ...

  3. Java—Applet

    1  Applet的定义 Applet是Java语言编写的,无法独立运行,但可以嵌入到网页中执行.它扩展了传统的编程结构和方法,可以通过互联网发布到任何具有Java编译环境浏览器的个体计算机上. 如下 ...

  4. The differences between Java application and Java applet

    在Java语言中,能够独立运行的程序称为Java应用程序(Application).Java语言还有另外一种程序--Applet程序.Applet程序(也称Java小程序)是运行于各种网页文件中,用于 ...

  5. Oracle EBS Java Applet报错:找不到类

    Oracle EBS Home Page可以打开,但是无法打开EBS的Form,查看Java控制台,有错误报出. java控制台报错,如下: Java Plug-in 1.6.0_07 使用 JRE ...

  6. Java小应用程序Applet,画布上新建按钮和文本

    <pre name="code" class="java">package com.hx; import java.applet.*; import ...

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

    atitit. 浏览器插件 控件   applet 的部署,签名总结 浏览器 插件 控件 的签名安全机制o9o 1. 服务器部署签名 1 2. 签名流程::生成密钥..导出cert正书,签名 1 3. ...

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

    atitit. applet 浏览器插件 控件 的环境,开发,提示总结o9o 1. 建立applet:: 1 2. Applet 码 1 3. Applet (awt)跟japplet (swing) ...

  9. Java Applet与Java Application的区别

    转自:http://www.educity.cn/java/500609.html 在Java语言中,能够独立运行的程序称为Java应用程序(Application).Java语言还有另外一种程序-- ...

  10. jdk与eclipse版本问题解决applet的启动

    今天在中韩,遇到一个保全项目,需要调用applet显示打印批单,结果IE一直显示安全设置问题,去java程序的安全里面想下调等级,不好调,所以想改个jdk_32试试. 版本环境 原先是eclipse_ ...

随机推荐

  1. 正确关闭Redis

    1.首先关闭单机版 我的单机版 是放在redis文件夹下面的 首先你要启动你的单机版redis 直接shutdown quit 退出去 ps aux|grep redis  查看运行的redis 关闭 ...

  2. RAC安装gird,第一个节点执行root.sh报"The ora.asm resource is not ONLINE"错误

    RAC版本:11.2.0.4 OS版本:linux 6.4 RAC安装gird,第一个节点执行root.sh运行失败,报"The ora.asm resource is not ONLINE ...

  3. Kruskal算法 - C语言详解

    最小生成树 在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树.  例如,对于如上图G4所示的连通网可以有多棵权值总 ...

  4. java的jdbc简单封装

    在学了jdbc一段时间后感觉自己写一个简单的封装来试试,于是參考的一些资料就写了一下不是多好,毕竟刚学也不太久 首先写配置文件:直接在src下建立一个db.properties文件然后写上内容 < ...

  5. Python rfind()方法

    描述 Python rfind() 返回子字符串最后一次出现在字符串中的索引位置,该方法与rindex() 方法一样,只不过如果子字符串不在字符串中不会报异常,而是返回-1. 语法 rfind() 方 ...

  6. Snail—OC学习之类别Category

    类别就是向类加入一些实用的功能或者方法 利于开发 类能够是系统类.能够是自己定义类 类别跟子类是不一样的.类别仅仅能加入一些方法 属性变量什么的不能够加入 不创建新类,就可以对已有类进行扩展 做项目的 ...

  7. FPGA管脚约束

    Edit → language templates : 打开即可查看基本语法. 一.xilinx中的约束文件 1.约束的分类 利用FPGA进行系统设计常用的约束主要分为3类. (1)时序约束:主要用于 ...

  8. Spring Boot(一):初步认识

    简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置 ...

  9. Windows Store Apps 开发转载

    懒得写了,就直接记录转载一下文章地址吧. 如何为应用定义全局默认字体:http://blogs.msdn.com/b/gautamdh/archive/2014/03/16/how-to-change ...

  10. C#字符串中特殊字符的转义

    再基础的东西不常用的话就得记下来...不然就忘记了. 比如C#中对字符串中特殊字符的转义,一个是双引号",另一个就是转义符\ 对于同样一个字符串:地址:"C:\Users\E.tx ...