ie启用java_浏览器(Chrome,IE等等)启用java程序-webstart(JNLP)方式

本文介绍了如何在浏览器(如Chrome、IE)中启用Java程序,重点讲解了WebStart(JNLP)方式。由于Chrome 45及以上版本不再支持NPAPI,作者分享了如何改造`deployJava.js`以适应RESTful API返回的JSON,通过修改`launchWithJnLPProtocol`函数实现调用Java程序。此外,文章还涉及JNLP文件的生成、可执行jar包的签名以及提供下载jar包的接口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

浏览器(Chrome,IE等等)启用java程序-webstart方式

贴下自己的码云地址

需求

Chrome从版本45开始,不再支持NPAPI插件,而Java Applet依赖于NPAPI插件,所以Chrome 版本45以后都不再支持Java Applet,而以往大家接触最多的就是用applet的方式调用java程序,那有没有更好的或者其他方式优雅的用浏览器执行服务器上的java程序呢?

解决

选择正确的调用方式

var url = "http://java.sun.com/javase/technologies/desktop/javawebstart/apps/notepad.jnlp";

deployJava.createWebStartLaunchButton(url, '1.6.0');

901da552d9f1f40a06ff5f126d7d976c.png 然后使用 launchWebStartApplication(这个在上面的网址上有,调用这个方法就可以直接加载了,而createWebStartLaunchButton这个方法是加载一个按钮,点击按钮来触发java程序)

遇到的问题

上面截图中说明了,参数是个url,这个url返回是一个JNLP文件,浏览器加载这个文件才可以调用java程序 那现在随着互联网前后端分离,后端服务都提供restful方式返回json,在不改变这个大前提下如何做呢,带着这个疑问浏览deployJava.js

改造deployJava.js代码

解读源码,这个方法是加载jnlp文件的

function launchWithJnlpProtocol(jnlp) {

document.location="jnlp:"+ getAbsoluteUrl(jnlp);

}

所以修改这个方法

//jnlpURL是接口地址,option是请求参数主要是为了可以给需要执行的java动态添加执行参数

function launchWithJnlpProtocol(jnlpURL,option) {

document.location="jnlp:"+ getRootPath()+jnlpURL+"?"+option;

}

function getRootPath() {

var pathName = window.location.pathname.substring(1);

var webName = pathName == '' ? '' : pathName.substring(0, pathName.indexOf('/'));

//return window.location.protocol + '//' + window.location.host + '/'+ webName + '/';

var local = window.location.host.replace("localhost","127.0.0.1");

if(webName){

return window.location.protocol + '//' + local + '/' + webName;

}else{

return window.location.protocol + '//' + local;

}

}

编写服务端JNLP

这里没什么特别的,由controller调用service生成jnlp文件

JNLP = new StringBuffer();

JNLP.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +

"

" codebase=\"\">\n" +

" \n" +

"

Case Cloud\n" +

" ANGEL\n" +

" \n" +

" \n" +

" \n" +

"

" href=\"http://java.sun.com/products/autodl/j2se\"/>\n" +

" \n" +

"\n" +

" \n" +

" \n" +

" \n" +

" \n" +

"

" name=\"Case Cloud Application\"\n" +

" main-class=\"CaseTest\">\n" +

" TEST#DEMO#000000"+

" " + webStart.getOption() +""+

"

\n" +

" \n" +

"\n>");

WebReturn webReturn = new WebReturn();

webReturn.setData(JNLP.toString());

JNLP文件规则可以参考官网上的,这里不多描述

浏览器调用java的原理

浏览器按钮触发加载JNLP文件,JNLP文件中描述了可执行jar包的下载地址,执行方法,参数。然后去下载jar包执行

可执行jar包添加签名

毕竟这种方式存在安全隐患,所以可执行jar包必须具有签名才可以

摘自其他博主的一段话,对jar包加密

到Dos状态下,,进入你们需发布应用程序的jar包所在的目录,运行下面这句话: keytool -genkey -keystore myKeystore -alias jwstest (它们将会提示你们输入用户名、密码等,,不用理它们,,按照提示随便输入即可,,但一定要记住密码..运行结束它们将会在当前路径下创建名为myKeystore(的)文件..) 说明:keytool是JDK自带的一个用于数字签名的工具。该语句的意思是生成一个证书,并且其文件名是:myKeystore。 2、用证用为应用程序签名 jarsigner -keystore myKeystore HelloWorld.jar jwstest (其中HelloWorld.jar是你们(的)jar包名(这里就是HelloWorld.jar),你们需要修改它们,,别(的)就不必修改了..运行时会提示你们输入密码,,就是你们刚才在生成myKeystore文件时设定(的)密码..)

完成下载jar包的接口

@GetMapping("/downloadWebExecuteOJar/{jarName:.+}")

@IgnoreUserToken

public void downloadWebExecuteOJar(@PathVariable("jarName") String jarName, HttpServletRequest request, HttpServletResponse response) throws IOException {

webStartService.downloadWebExecuteOJar(jarName,request,response);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值