Java应用程序部署全解析
发布时间: 2025-08-18 00:07:28 阅读量: 1 订阅数: 10 

### Java应用程序部署全解析
#### 1. 相关方法及类介绍
在Java开发中,有一些重要的方法和类对于控制浏览器环境和操作小程序至关重要。
- **`java.applet.Applet 1.2`**
- `public AppletContext getAppletContext()`:此方法能让你获取小程序的浏览器环境句柄。在大多数浏览器中,可利用该信息控制运行小程序的浏览器。
- `void showStatus(String msg)`:该方法会在浏览器的状态栏显示指定的字符串。
- **`java.applet.AppletContext 1.0`**
- `Enumeration<Applet> getApplets()`:返回同一上下文中(即同一网页)所有小程序的枚举。
- `Applet getApplet(String name)`:返回当前上下文中具有指定名称的小程序;若不存在则返回`null`,仅搜索当前网页。
- `void showDocument(URL url)` 和 `void showDocument(URL url, String target)`:用于在浏览器的框架中显示新的网页。第一种形式会替换当前页面,第二种形式使用`target`参数指定目标框架,其对应关系如下表所示:
| Location | Target Parameter |
| --- | --- |
| 在当前框架中显示文档 | "_self" 或无 |
| 在父框架中显示文档 | "_parent" |
| 在最顶层框架中显示文档 | "_top" |
| 在新的、未命名的顶级窗口中显示 | "_blank" |
| 在具有该名称的框架中显示。若不存在该名称的框架,则打开一个新窗口并赋予该名称 | 任何其他字符串 |
#### 2. Java沙箱机制
当从远程站点加载代码并在本地执行时,安全问题就变得至关重要。例如,访问网页会自动启动页面上的所有小程序,点击单个链接可能会启动Java Web Start应用程序。若这些操作能执行任意代码,犯罪分子就可能轻松窃取用户的机密信息、访问财务数据或控制用户机器发送垃圾邮件。
为确保Java技术不被用于恶意目的,Java有一套复杂的安全模型。安全管理器会检查对所有系统资源的访问,默认情况下只允许无害的操作。若要进行额外操作,用户必须明确批准小程序或应用程序。
远程代码在所有平台上能执行的操作包括显示图像、播放声音、获取用户的按键和鼠标点击,并将用户输入发送回代码加载的主机,这些功能足以展示事实数据或与教育程序、游戏进行交互。
受限的执行环境被称为“沙箱”,沙箱中的代码不能更改用户系统或进行间谍活动,具体限制如下:
- 不能运行任何本地可执行程序。
- 不能对本地计算机的文件系统进行读写操作。
- 除了所使用的Java版本和一些无害的操作系统细节外,无法获取本地计算机的任何信息,尤其不能获取用户的姓名、电子邮件地址等。
- 远程加载的程序需要用户同意才能与除下载源服务器(即源主机)之外的任何主机进行通信,这一规则被称为“远程代码只能回拨”,可保护用户免受试图窥探内部网资源的代码的侵害。
- 所有弹出窗口都会携带警告消息,早期JDK版本中的消息很严重,如“Untrusted Java Applet Window”,后续版本逐渐淡化,现在只是一个微小的警告三角形,只有最细心的用户才能注意到。
不过,沙箱概念如今已不如以往重要。过去,任何人都可部署沙箱代码,只有需要沙箱之外权限的代码才需要进行数字签名。而现在,通过Java Plug - in执行的所有代码,无论是否在沙箱中运行,都必须进行数字签名。
#### 3. 数字签名代码
小程序或Java Web Start应用程序的JAR文件必须进行数字签名。签名的JAR文件会附带一个证书,表明签名者的身份。加密技术确保证书无法伪造,任何篡改签名文件的行为都会被检测到。
例如,若收到由yWorks GmbH制作并使用Thawte颁发的证书进行数字签名的应用程序,你能得到以下保证:
1. 代码与签名时完全一致,没有第三方篡改。
2. 签名确实来自yWorks。
3. 证书确实由Thawte颁发(Java Plug - in知道如何检查Thawte等一些证书供应商的证书,也可安装替代的“根证书”)。
若点击“More Information”链接,会被告知该应用程序将在没有Java通常提供的安全限制的情况下运行。是否安装并运行该应用程序,取决于你对yWorks GmbH的信任程度。
从支持的供应商处获取证书每年需花费数百美元,一些证书颁发机构还要求提供公司注册证明或营业执照。过去,一些Java开发者会自行生成证书用于代码签名,但Java Plug - in无法检查这些证书的准确性,且由于很少有用户能理解安全证书和不安全证书的区别,这种做法并无实际意义,现在不安全证书已不再被支持。
若要分发Java小程序或Web Start应用程序,你必须从Java Plug - in支持的证书颁发机构获取证书,并使用它对JAR文件进行签名。若你在公司工作,公司可能已与证书供应商建立了合作关系,你可直接订购Java代码签名证书;若没有,建议多比较不同供应商,因为价格差异较大,且有些供应商对向个人颁发证书的要求较为宽松。
具体操作步骤如下:
1. 证书会附带将其安装到Java密钥库(一个受密码保护的文件,签名过程中可从中检索证书)的说明,需妥善保管密钥库文件和密码。
2. 决定所需的权限,有沙箱权限和所有权限两种选择。创建一个清单文件,例如:
```plaintext
Manifest - Version: 1.0
Permissions: all - permissions
```
3. 使用`jar`工具创建JAR文件:
```bash
jar cvfm MyApplet.jar manifest.mf mypackage/*.class
```
4. HTML文件中的小程序元素应包含`archive="MyApplet.jar"`属性。
5. 对JAR文件进行签名,命令如下:
```bash
jarsigner -keystore keystorefile -tsa timestampURL MyApplet.jar keyalias
```
你需要向证书颁发机构询问时间戳的URL,`keyalias`由证书颁发机构分配,可使用以下命令查看:
```bash
keytool -keystore keystorefile -list
```
也可使用`keytool`命令的`-changealias`选项更改它。
6. 将签名后的JAR文件和包含小程序元素的HTML文件放置在Web服务器上。
需要注意的是,虽然可以详细控制授予Java应用程序的权限,但Java Plug - in仅提供沙箱或所有权限两种安全级别。
#### 4. Java Web Start技术
Java Web Start是一种通过互联网交付应用程序的技术,其应用程序具有以下特点:
- 通常通过浏览器交付,下载后可无需浏览器启动。
- 不在浏览器窗口内运行,应用程序在自己的框架中显示,位于浏览器之外。
- 不使用浏览器的Java实现,浏览器在加载Java Web Start应用程序描述符时会启动外部应用程序,这与启动Adobe Acrobat或RealAudio等其他辅助应用程序的机制相同。
- 数字签名的应用程序可在本地机器上获得任意访问权限,未签名的应用程序在“沙箱”中运行,禁止进行可能危险的操作。
##### 4.1 交付Java Web Start应用程序
若要使用Java Web Start交付应用程序,需按以下步骤操作:
1. 将应用程序打包成一个或多个JAR文件。
2. 准备Java网络启动协议(JNLP)格式的描述符文件,并将这些文件放置在Web服务器上。
3. 确保Web服务器为扩展名为`.jnlp`的文件报告`application/x - java - jnlp - file`的MIME类型,可查阅Web服务器文档了解具体设置方法。
为了方便实验,可从http://jakarta.apache.org/tomcat安装Tomcat,它是一个用于Servlet和JSP页面的容器,也可提供网页服务,且已预先配置为为JNLP文件提供正确的MIME类型。以下以交付第12章的计算器应用程序为例:
1. 编译程序:
```bash
javac -classpath .:jdk/jre/lib/javaws.jar webstart/*.java
```
2. 使用以下命令生成JAR文件:
```bash
jar cvfe Calculator.jar webstart.Calculator webstart/*.class
```
3. 准备启动文件`Calculator.jnlp`,内容如下:
```xml
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="http://localhost:8080/calculator/" href="Calculator.jnlp">
<information>
<title>Calculator Demo Application</title>
<vendor>Cay S. Horstmann</vendor>
<description>A Calculator</description>
<offline-allowed/>
</information>
<resources>
<java version="1.6.0+"/>
<jar href="Calculator.jar"/>
</resources>
<application-desc/>
</jnlp>
```
注意版本号必须为`1.6.0`,而非`6.0`。
4. 创建目录`tomcat/webapps/calculator`用于提供应用程序服务,在该目录下创建子目录`tomcat/webapps/calculator/WEB - INF`,并在其中放置以下`web.xml`文件:
```xml
<?xml version="1.0" encoding="utf-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd">
</web-app>
```
5. 将JAR文件和启动文件放入`tomcat/webapps/calculator`目录。
6. 按照相关流程,将URL `http://localhost:8080`添加到Java控制面板的受信任站点列表中,或者对JAR文件进行签名。
7. 执行`tomcat/bin`目录中的启动脚本启动Tomcat。
8. 在浏览器中访问JNLP文件,如`http://localhost:8080/calculator/Calculator.jnlp`。若浏览器已配置支持Java Web Start,应会看到Java Web Start的启动窗口;若浏览器不知道如何处理JNLP文件,可能会提供将其与应用程序关联的选项,此时选择`jdk/bin/javaws`,也可尝试重新安装JDK,它会自动进行关联设置。
9. 不久后,计算器应用程序应会启动,带有标记为Java应用程序的边框。
10. 再次访问JNLP文件时,应用程序将从缓存中获取,可使用Java Plug - in控制面板查看缓存内容。在Windows中,可在Windows控制面板中找到Java Plug - in控制;在Linux下,运行`jdk/jre/bin/ControlPanel`。
若在测试JNLP配置时不想运行Web服务器,可临时覆盖启动文件中的代码库URL,命令如下:
```bash
javaws -codebase f
```
0
0
相关推荐









