Java 浏览器中的插件支持将被弃用。Applet 访问客户端文件系统的替代解决方案?
Java Plug In support in browser to be depricated.. Alternative solution for an Applet to access Client File System?
我们有一个在 Oracle ADF 中开发的 Web 应用程序。
1) 从文档页面下载并打开文件夹按钮,我们使用小程序将文件下载到客户端计算机中的某个位置并打开文件夹
2) 从文档页面下载并打开文件按钮,我们使用小程序将文件下载到客户端计算机中的某个位置并打开这些文件
3) 从文档页面 打开文件夹按钮,如果存在,将打开相应的文档文件夹。
以上3点已经存在并且运行良好。
现在,因为插件支持将从浏览器中移除。我们正在寻找替代解决方案。
任何建议都会对我们有所帮助.. 请指教
问候
阿伦
要替换 java aplet,您可以使用实现 restful 接口的本地服务。
通过对 jnlp
文件的简单 GET 请求启动本地服务。例如,http://example.com/localservice.jnlp 这将下载、安装和 运行 本地服务(对它的要求与小程序一样——必须签名)。一旦本地服务成功启动,Web 应用程序就可以提交数据并从中读取数据,就像使用任何 Web 服务器一样。
但是,应该记住浏览器不允许交叉查询。因此,应该返回来自本地服务的 CORS header
或者它监听的地址 (127.0.0.1
) 应该是应用程序域的一部分(这是由具有 A
记录的子域完成的对于 127.0.0.1
例如 localhost.example.com
)
这是一个转换示例(非常粗略)
这是在端口 8888 上侦听传入 HTTP 查询和 returns JSON 响应的本地服务。
public class LocalService {
public LocalService() {
}
public static void main(String[] args) throws IOException {
HttpServer server = HttpServer.create(new InetSocketAddress("localhost", 8888), 0);
server.setExecutor(Executors.newSingleThreadExecutor());
server.createContext("/", httpExchange -> {
StringBuilder builder = new StringBuilder();
int read;
byte buffer[] = new byte[1024];
InputStream is = httpExchange.getRequestBody();
while ((read = is.read(buffer)) != -1) {
builder.append(new String(buffer, 0, read));
}
is.close();
String response = String.format("{\"request\": \"%s\"}", builder.toString());
Headers headers = httpExchange.getResponseHeaders();
headers.add("Content-Type", "application/json");
headers.add("Access-Control-Allow-Origin", "*");
httpExchange.sendResponseHeaders(200, response.length());
OutputStream os = httpExchange.getResponseBody();
os.write(response.getBytes());
os.flush();
os.close();
});
server.start();
}
}
这是用于启动服务的 JNLP 文件。
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="" href="">
<information>
<title>Local Service</title>
</information>
<resources>
<!-- Application Resources -->
<jar href="http://example.com/localservice.jar" main="true" />
</resources>
<security>
<all-permissions/>
</security>
<application-desc name="Local Service" main-class="LocalService">
</application-desc>
<update check="background"/>
</jnlp>
这是一个 HTML 页面,自动或手动启动服务并从中发送和接收数据
<!DOCTYPE html>
<html>
<head>
<title>Local Service</title>
<script
src="https://code.jquery.com/jquery-3.3.1.min.js"
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
crossorigin="anonymous"></script>
<script>
$(function() {
$('#send').click(function() {
$.ajax({
method: 'POST',
url: 'http://localhost:8888', // or localhost.example.com:8888
data: $('#data').val(),
success: function(data, textStatus, jqXHR) {
alert(data.request);
},
error: function(jqXHR, textStatus, errorThrown) {
alert(errorThrown);
}
});
});
});
</script>
</head>
<body>
<h1>Local Service</h1>
<!-- auto load local service -->
<iframe style="display: none;" src="localservice.jnlp"></iframe>
<a href="localservice.jnlp">Run Local Service Manually</a>
<div style="margin-top: 50px;">
<input id="data"/>
<button id="send">Send</button>
</div>
</body>
</html>
我们有一个在 Oracle ADF 中开发的 Web 应用程序。
1) 从文档页面下载并打开文件夹按钮,我们使用小程序将文件下载到客户端计算机中的某个位置并打开文件夹
2) 从文档页面下载并打开文件按钮,我们使用小程序将文件下载到客户端计算机中的某个位置并打开这些文件
3) 从文档页面 打开文件夹按钮,如果存在,将打开相应的文档文件夹。
以上3点已经存在并且运行良好。
现在,因为插件支持将从浏览器中移除。我们正在寻找替代解决方案。
任何建议都会对我们有所帮助.. 请指教
问候 阿伦
要替换 java aplet,您可以使用实现 restful 接口的本地服务。
通过对 jnlp
文件的简单 GET 请求启动本地服务。例如,http://example.com/localservice.jnlp 这将下载、安装和 运行 本地服务(对它的要求与小程序一样——必须签名)。一旦本地服务成功启动,Web 应用程序就可以提交数据并从中读取数据,就像使用任何 Web 服务器一样。
但是,应该记住浏览器不允许交叉查询。因此,应该返回来自本地服务的 CORS header
或者它监听的地址 (127.0.0.1
) 应该是应用程序域的一部分(这是由具有 A
记录的子域完成的对于 127.0.0.1
例如 localhost.example.com
)
这是一个转换示例(非常粗略) 这是在端口 8888 上侦听传入 HTTP 查询和 returns JSON 响应的本地服务。
public class LocalService {
public LocalService() {
}
public static void main(String[] args) throws IOException {
HttpServer server = HttpServer.create(new InetSocketAddress("localhost", 8888), 0);
server.setExecutor(Executors.newSingleThreadExecutor());
server.createContext("/", httpExchange -> {
StringBuilder builder = new StringBuilder();
int read;
byte buffer[] = new byte[1024];
InputStream is = httpExchange.getRequestBody();
while ((read = is.read(buffer)) != -1) {
builder.append(new String(buffer, 0, read));
}
is.close();
String response = String.format("{\"request\": \"%s\"}", builder.toString());
Headers headers = httpExchange.getResponseHeaders();
headers.add("Content-Type", "application/json");
headers.add("Access-Control-Allow-Origin", "*");
httpExchange.sendResponseHeaders(200, response.length());
OutputStream os = httpExchange.getResponseBody();
os.write(response.getBytes());
os.flush();
os.close();
});
server.start();
}
}
这是用于启动服务的 JNLP 文件。
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="" href="">
<information>
<title>Local Service</title>
</information>
<resources>
<!-- Application Resources -->
<jar href="http://example.com/localservice.jar" main="true" />
</resources>
<security>
<all-permissions/>
</security>
<application-desc name="Local Service" main-class="LocalService">
</application-desc>
<update check="background"/>
</jnlp>
这是一个 HTML 页面,自动或手动启动服务并从中发送和接收数据
<!DOCTYPE html>
<html>
<head>
<title>Local Service</title>
<script
src="https://code.jquery.com/jquery-3.3.1.min.js"
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
crossorigin="anonymous"></script>
<script>
$(function() {
$('#send').click(function() {
$.ajax({
method: 'POST',
url: 'http://localhost:8888', // or localhost.example.com:8888
data: $('#data').val(),
success: function(data, textStatus, jqXHR) {
alert(data.request);
},
error: function(jqXHR, textStatus, errorThrown) {
alert(errorThrown);
}
});
});
});
</script>
</head>
<body>
<h1>Local Service</h1>
<!-- auto load local service -->
<iframe style="display: none;" src="localservice.jnlp"></iframe>
<a href="localservice.jnlp">Run Local Service Manually</a>
<div style="margin-top: 50px;">
<input id="data"/>
<button id="send">Send</button>
</div>
</body>
</html>