直接从浏览器向Java桌面应用程序发送数据

直接从浏览器向Java桌面应用程序发送数据,java,typescript,browser,server,client,Java,Typescript,Browser,Server,Client,我正在使用TypeScript作为客户端脚本语言制作一个web应用程序。我使用的其他技术有,和。当用户单击网站上的按钮时,我已经运行的Java桌面应用程序(“独立于”web应用程序,而不是web应用程序的服务器)应接收从web应用程序发送的数据,然后提示用户将其导入桌面应用程序 如何做到这一点?有可用的示例代码吗 我是否可以在桌面应用程序上启动一个简单的侦听器服务器,等待客户端(浏览器)将导入数据的有效负载发送到侦听服务器(以独立于平台的方式) 请注意,这与从Internet资源下载数据的桌面应

我正在使用
TypeScript
作为客户端脚本语言制作一个web应用程序。我使用的其他技术有,和。当用户单击网站上的按钮时,我已经运行的
Java
桌面应用程序(“独立于”web应用程序,而不是web应用程序的服务器)应接收从web应用程序发送的数据,然后提示用户将其导入桌面应用程序

如何做到这一点?有可用的示例代码吗

我是否可以在桌面应用程序上启动一个简单的侦听器服务器,等待客户端(浏览器)将导入数据的有效负载发送到侦听服务器(以独立于平台的方式)

请注意,这与从Internet资源下载数据的桌面应用程序不同,因为应该通过单击浏览器本身来确定资源,而不是通过桌面应用程序的界面


仅允许我以自定义的
URI
作为参数启动桌面应用程序,并且它也是
Windows
,因此这不是一个令人满意的解决方案。

我了解您的设置如下:

浏览器SpringBoot

浏览器中呈现的网页应与本地桌面应用程序通信

解决方案是在网页和桌面应用程序之间建立HTTP连接,如下所示:

  • 桌面应用程序必须包含一个嵌入式servlet容器,例如,它将服务器套接字绑定到127.0.0.1:yourPort
  • 嵌入的servlet容器需要一个,因为网页的来源肯定不同于127.0.0.1
  • 该网页只需在XMLHttpRequest的帮助下打开一个连接,例如
    
    
    
    var req = new XMLHTTPRequest();
    req.open("POST", "http://127.0.0.1:yourPort");
    req.setRequestHeader("content-type", "application/x-www-form-urlencoded");
    req.send("payload="+ myPayload);
    
    var req=新的XMLHTTPRequest(); 请求打开(“POST”和“); 请求setRequestHeader(“内容类型”、“应用程序/x-www-form-urlencoded”); 请求发送(“有效载荷=“+myPayload”);
当浏览器与SpringBoot服务器建立HTTPS连接时,您会遇到这样的问题:浏览器可能会显示“混合内容警告”,因为安全的web上下文(您的网页)通过HTTP访问资源

幸运的是,最近的现代浏览器如Chrome、Firefox、Edgand和Safari实现了这样的访问,因此考虑到127.0.0.1的访问可能是可信的:没有混合内容警告。p> 但是,如果您将其投入生产,您必须意识到您的桌面应用程序现在容易受到XSS攻击