Java网络启动(Java Web Start (JWS) )可以实现在网络浏览器中运行具备全部特色的Java应用软件 Sun公司在 年三月发布的Java 就已经具备了对JWS的支持 自从J SE 版本以来 JWS就已经成为Java运行时环境(Java Runtime Environment (JRE) )的默认配置 不必再单独安装了 在这篇文章中 我将向您介绍这一重要技术
技术
JWS是与网络浏览器相结合的应用软件 当用户点击链接的时候就会指向一个Java网络启动协议(Java Neork Launching Protocol (JNLP) )文件 然后浏览器自动启动JWS 接着下载 缓存并运行基于Java技术的应用软件
在JWS背后的技术是JNLP及其API 它们是在Java团体进程(Java Community Process)中开发的 JWS实际上是JNLP规范的一个参考实现 JNLP技术定义了一个标准的文件格式 该格式描述了如何调用一个JNLP文件
既然安装链接可以作为普通的HTTP URL的链接 那么您就可以通过网页来检查客户端是否安装了JWS 您可以在IE中通过以下代码来检查
<SCRIPT LANGUAGE= VBScript >
on error resume next
If isIE = true Then
If Not(IsObject(CreateObject( JavaWebStart isInstalled ))) Then
javawsInstalled =
Else
javawsInstalled =
End If
If Not(IsObject(CreateObject( JavaWebStart isInstalled ))) Then
javaws Installed =
Else
javaws Installed =
End If
If Not(IsObject(CreateObject( JavaWebStart isInstalled ))) Then
javaws Installed =
Else
javaws Installed =
End If
End If
</SCRIPT>
开发
开发部署在JWS上的软件和开发独立运行的软件在Java 平台上是基本相同的 比如 程序的起点都是以下的标准代码
public static void main(String[] argv)
然而 为了支持网络部署 也就是实现自动下载和调用软件 并且保证软件在一个安全的沙盒中运行 还需要一些额外的考虑 包括
应用软件必需作为JAR文件集合来使用 所有的应用软件资源 比如文件 图片都必需存储在JAR文件中 而且它们都必需使用Java 平台的getResource机制来引用 应用软件可以使用System exit调用 进行不受限制地访问系统的软件需要通过签名的JAR文件来使用 而且JAR文件中所有的项目都必需经过签名 如果软件要运行在一个安全沙盒中 那么它必需遵循以下的限制不能进行本地磁盘访问 所有的JAR文件都必须从同一个主机下载 只能和下载JAR文件的主机之间建立网络连接 不能安装安全管理器 不能使用本地类库对系统属性的访问受到限制 对于JNLP中定义了的系统属性 应用软件可以进行读/写 *** 作 并且对于相同的属性集合具备和applet一样的只读权限
安全
JWS是构建于Java 平台之上的 Java 平台提供了一个全面的安全架构 在Java 版中 JWS则提供了更加强大的安全特色 比如代码签名
在默认状态下 通过JWS调用的应用软件将运行在一个受到限制的环境中(一个 沙盒 ) 它们对本地计算资源的访问 比如存储设备和本地网络 是有限的 这样 JWS就保证了下载的潜在的不可信任的软件不会危及到本地文件或网络
当然 应用程序也可以请求不受限制的本地系统访问 在这种情况下 当该软件第一次调用时 JWS将显示安全警告对话框 安全警告的内容包含软件开发者的信息
如果一个应用软件包含了一个或多个经过签名的JAR文件 JWS将会验证这些JAR文件在签名后是否发生过变化 如果数字签名的认证失败 那么JWS就不会运行该软件 因为它们已经被第三方修改过了 通过在JNLP文件中添加以下的设置 一个应用软件可以请求完整的权限
<security>
<all permissions/>
</security>
JNLP 文件
JNLP是一个和JWS紧密相关的概念 它经常可以和术语 网络启动 相互替代使用 实际上 JNLP是一个规定了JWS应用软件如何启动的协议 JNLP中的包含了诸如JAR包文件的位置 应用软件主要类的名称 以及程序的其它一些参数 在适当配置的浏览器中 JNLP文件是传递给JRE的 然后JRE将会下载应用软件到用户的机器上并开始执行
一个JNLP文件不包含任何二进制数据 实际上它包含的URL指向所有的二进制数据和二进制代码资源 这些文件还可以指向其他的JNLP文件 它们被称为扩展描述符 一个扩展描述符通常描述了运行软件所必需的组件 在扩展描述符中描述的资源将会成为应用软件类路径的一部分 这样 常用的功能只需要描述一次即可 以下的例子是一个常见的JNLP文件
<?xml version= encoding= UTF ?>
<jnlpcodebase= _app >
<information>
<title>Hello world!</title>
<vendor>My Web Company</vendor>
<icon />
<offline allowed/>
</information>
<resources>
<j se version= + />
<jar />
</resources>
<application desc main class= helloworld Hello />
</jnlp>
这个JNLP文件描述了如何调用名为Hello的程序 在JNLP文件中指定了需要 或更高版本的Java来运行该程序 同时还有一些与程序相关的信息 这些信息都会在用户下载的过程中显示
如果您希望了解更详细的JNLP协议和文件格式 可以参考这个官方规范
结论
JWS提供了一种与平台无关的 安全的而且强大的部署技术 开发者只需要将应用软件部署在网络服务器上就可以为最终用户提供全部的功能 而最终用户也只需要使用网络浏览器就可以运行所需的应用软件 而且永远是最新的版本
JWS的一个主要优点是它克服了Java插件和不同Java虚拟机的兼容性问题 但是 使用网络启动的程序却不能像applet一样简单地和浏览器进行通讯
lishixinzhi/Article/program/Java/hx/201311/26465
第一种方法 在tomcat中的conf目录中 在server xml中的 <host/>节点中添加
<Context path= /hello docBase= D:\eclipse forwebtools\workspace\hello\WebRoot debug= privileged= true >
</Context>
至于Context 节点属性 可详细见相关文档
第二种方法 将web项目文件件拷贝到webapps 目录中
第三种方法 很灵活 在conf目录中 新建 Catalina(注意大小写)\localhost目录 在该目录中新建一个xml文件 名字可以随意取 只要和当前文件中的文件名不重复就行了 该xml文件的内容为
<Context path= /hello docBase= D:\eclipse forwebtools\workspace\hello\WebRoot debug= privileged= true >
</Context>
第 个方法有个优点 可以定义别名 服务器端运行的项目名称为path 外部访问的URL则使用XML的文件名 这个方法很方便的隐藏了项目的名称 对一些项目名称被固定不能更换 但外部访问时又想换个路径 非常有效
第 还有优点 可以定义一些个性配置 如数据源的配置等
还有一篇详细的
直接放到Webapps目录下
Tomcat的Webapps目录是Tomcat默认的应用目录 当服务器启动时 会加载所有这个目录下的应用 也可以将JSP程序打包成一个war包放在目录下 服务器会自动解开这个war包 并在这个目录下生成一个同名的文件夹 一个war包就是有特性格式的jar包 它是将一个Web程序的所有内容进行压缩得到 具体如何打包 可以使用许多开发工具的IDE环境 如Eclipse NetBeans ant JBuilder等 也可以用cmd 命令 jar cvf applicationname war package *
甚至可以在程序执行中打包
try{
string strjavahome = system getproperty( java home )
strjavahome = strjavahome substring( strjavahome lastindexof(\\))+ \\bin\\
runtime getruntime() exec( cmd /c start +strjavahome+ jar cvf hello war c:\\tomcat \\webapps\\root\\* )
}
catch(exception e){system out println(e) }
webapps这个默认的应用目录也是可以改变 打开Tomcat的conf目录下的server xml文件 找到下面内容
<Host name= localhost debug= appBase= webapps unpackWARs= true autoDeloy= true xmlValidation= falase xmlNamespaceAware= false >
在server xml中指定
在Tomcat的配置文件中 一个Web应用就是一个特定的Context 可以通过在server xml中新建Context里部署一个JSP应用程序 打开server xml文件 在Host标签内建一个Context 内容如下
<Context path= /myapp reloadable= true docBase= D:\myapp workDir= D:\myapp\work />
其中path是虚拟路径 docBase是JSP应用程序的物理路径 workDir是这个应用的工作目录 存放运行是生成的于这个应用相关的文件
创建一个Context文件
以上两种方法 Web应用被服务器加载后都会在Tomcat的conf\catalina\localhost目录下生成一个XML文件 其内容如下
<Context path= /admin docBase= ${catalina home}/server/webapps/admin debug= privileged= true ></Context>
可以看出 文件中描述一个应用程序的Context信息 其内容和server xml中的Context信息格式是一致的 文件名便是虚拟目录名 您可以直接建立这样的一个xml文件 放在Tomcat的conf\catalina\localhost目录下 例子如下
注意 删除一个Web应用同时也要删除webapps下相应的文件夹祸server xml中相应的Context 还要将Tomcat的conf
\catalina\localhost目录下相应的xml文件删除 否则Tomcat仍会岸配置去加载……
tomcat部署web应用主要有以下几种方式
)拷贝你的WAR文件或者你的web应用文件夹(包括该web的所有内容)到$CATALINA_BASE/webapps目录下
)为你的web服务建立一个只包括context内容的XML片断文件 并把该文件放到$CATALINA_BASE/webapps目录下 这个web应用本身可以存储在硬盘上的任何地方 这种context片断提供了一种便利的方法来部署web应用 你不需要编辑server xml 除非你想改变缺省的部署特性 安装一个新的web应用时不需要重启动Tomcat
)同方法 只是将context片断放在CATALINA_BASE\conf\Catalina\localhost目录下 这种方法比方法 >要有效 笔者经过多次实验发现方法 不如后面这种方法好用 前者多次出现系统打不开的情况
)直接在server xml中</Host>前加上Context片断 使用这种方法时 tomcat会自动在CATALINA_BASE\conf\Catalina\localhost目录下生成一个文件片断 方法同方法 具有同样效果 这种方式需要将ROOT目录删除才行
另外 为了让tomcat只运行conf/server xml中指定的web应用 可以有以下几种办法
实现一
)将要部署的WEB应用放在webapps以外的路径 并在server xml相应的context中的docBase指定
)删除webapps中的所有文件夹 以及conf/catalina/localhost下所有xml文件
注 webapps是server xml中的Host元素的appBase属性的值
实现二
)修改server xml中Host元素的属性 添加或修改 deployXML= false deployOnStartup= false autoDeploy= false
)含义
lishixinzhi/Article/program/Java/ky/201311/28718
1. 先看下文档目录和最后打包的效果
可以看到,打包完后,第三方jar并不在程序包内。
2. 配置MANIFEST.MF文件,程序打包时会用到。
2.1 在项目下新健一个文件夹
2.1 在该文件夹下新健一个MANIFEST.MF文件, 配置对应的属性
3. 打包程序, 不包含第三方JAR包
3.1 点击 file >export
3.2 选择 jar file, 点击next
3.3 选择 项目打包文件,录入一个生产jar的路径(只需要项目文件, 不包含第三方jar以及MANIFEST.MF同时也不包含.classpath 和.project)
3.4 点击选择已经存在的装配单
3.5 一直到结束
4. 通过java -jar xxx.jar 来运行, 但是这里需要注意要关联第三方Jar包, 怎么关联, 会程序会通过 MANIFEST.MF中的Class-Path去寻找。所以最终要运行jar报的结构如下。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)