Web 应用程序如何与独立 Java 应用程序通信
How a web application can communicate to a standalone Java application
我使用 swing 创建了一个简单的独立 Java 应用程序,用于从 OMNIKEY® 3121 卡读取数据 reader 我必须将扫描的用户详细信息发送到 Web 应用程序。
我正在使用 RESTful Java 客户端将此数据发送到 Web 应用程序数据库。但是我需要将网络用户的会话 ID 连同扫描的用户详细信息传递给服务器,以识别哪个网络用户给出的卡扫描请求。为此,我需要先从服务器接收带有会话 ID 的 Java 应用程序请求。那么我怎样才能使这种交流成为可能。
如果不在 Web 应用程序中实现您的 swing 应用程序的 运行 实例的注册,这似乎是不可能的。然后,swing 应用程序可以建立 WebSocket 连接到 web 应用程序并订阅接收有关 web 应用程序用户操作的通知。
1) swing 应用程序启动后,它会使用一些唯一的 ID(例如 domain/cardreader ID)与 Web 应用程序建立 WebSocket 连接。
2) Web 应用程序用户的帐户必须link编入该唯一 ID。
3) 有了这个,swing 应用程序可以接收有关例如用户登录事件的通知,linked。
如果您的要求是使用完全独立的 swing 应用程序实例和用户帐户,您可以使用应用程序 links(用户单击此 link,浏览器使用此 url). This article 可能是个好的开始。
使用 com.sun.net.httpserver.HttpServer
从桌面 Java 应用程序创建一个 InetSocketAddress
,如下所示
try {
HttpServer hs = HttpServer.create(new InetSocketAddress(8888), 0);
hs.createContext("/test", new HttpHandler() {
public void handle(HttpExchange t) throws IOException {
InputStream is = t.getRequestBody();
System.out.println(t.getRemoteAddress().toString());
String response = "HelloWorld!!";
t.sendResponseHeaders(200, response.length());
OutputStream os = t.getResponseBody();
os.write(response.getBytes());
os.close();
}
});
hs.setExecutor(null);
hs.start();
} catch (IOException e) {
e.printStackTrace();
}
创建套接字后,您可以使用 http://localhost:8888/test
访问句柄方法。如果您尝试进行跨域访问,请求可能会被 CORS Policy
阻止。在这种情况下,您必须在 sendResponseHeaders
.
之前设置访问控制相关参数,如下所示
Headers headers = t.getResponseHeaders();
headers.add("Access-Control-Allow-Headers","x-prototype-version,x-requested-with");
headers.add("Access-Control-Allow-Methods","GET,POST");
headers.add("Access-Control-Allow-Origin","*");
我使用 swing 创建了一个简单的独立 Java 应用程序,用于从 OMNIKEY® 3121 卡读取数据 reader 我必须将扫描的用户详细信息发送到 Web 应用程序。
我正在使用 RESTful Java 客户端将此数据发送到 Web 应用程序数据库。但是我需要将网络用户的会话 ID 连同扫描的用户详细信息传递给服务器,以识别哪个网络用户给出的卡扫描请求。为此,我需要先从服务器接收带有会话 ID 的 Java 应用程序请求。那么我怎样才能使这种交流成为可能。
如果不在 Web 应用程序中实现您的 swing 应用程序的 运行 实例的注册,这似乎是不可能的。然后,swing 应用程序可以建立 WebSocket 连接到 web 应用程序并订阅接收有关 web 应用程序用户操作的通知。
1) swing 应用程序启动后,它会使用一些唯一的 ID(例如 domain/cardreader ID)与 Web 应用程序建立 WebSocket 连接。
2) Web 应用程序用户的帐户必须link编入该唯一 ID。
3) 有了这个,swing 应用程序可以接收有关例如用户登录事件的通知,linked。
如果您的要求是使用完全独立的 swing 应用程序实例和用户帐户,您可以使用应用程序 links(用户单击此 link,浏览器使用此 url). This article 可能是个好的开始。
使用 com.sun.net.httpserver.HttpServer
从桌面 Java 应用程序创建一个 InetSocketAddress
,如下所示
try {
HttpServer hs = HttpServer.create(new InetSocketAddress(8888), 0);
hs.createContext("/test", new HttpHandler() {
public void handle(HttpExchange t) throws IOException {
InputStream is = t.getRequestBody();
System.out.println(t.getRemoteAddress().toString());
String response = "HelloWorld!!";
t.sendResponseHeaders(200, response.length());
OutputStream os = t.getResponseBody();
os.write(response.getBytes());
os.close();
}
});
hs.setExecutor(null);
hs.start();
} catch (IOException e) {
e.printStackTrace();
}
创建套接字后,您可以使用 http://localhost:8888/test
访问句柄方法。如果您尝试进行跨域访问,请求可能会被 CORS Policy
阻止。在这种情况下,您必须在 sendResponseHeaders
.
Headers headers = t.getResponseHeaders();
headers.add("Access-Control-Allow-Headers","x-prototype-version,x-requested-with");
headers.add("Access-Control-Allow-Methods","GET,POST");
headers.add("Access-Control-Allow-Origin","*");