【问题标题】:How to embed jetty and webkit like Electron framework does?如何像 Electron 框架那样嵌入 jetty 和 webkit?
【发布时间】:2016-08-12 00:51:11
【问题描述】:

我们有分布式网络应用程序,该应用程序的前端部分应该是独立的桌面应用程序,并与电话等桌面应用程序集成。我看到 Electron 框架和应用程序(例如 Slack)建立在它之上,它非常好。

Java 世界有没有这样的工具来嵌入 jetty/tomcat 和 webkit 浏览器来构建原生桌面应用程序?

类似问题:

更新: 在 Java CEF 上查看我的测试应用程序:https://github.com/jreznot/cefc

它使用 Jetty/Swing/JavaCEF/Vaadin 作为 HTML 5 桌面堆栈。

最终更新:

看看我的 Electron+Java 疯狂:https://github.com/jreznot/electron-java-app

它将 Electron 与 Java 服务器端结合使用,将 Vaadin 用于应用程序 UI。

我建议使用 Electron 而不是 Java-Webkit 绑定,因为它是成熟的框架并且拥有庞大的 JS 开发者社区。​​p>

【问题讨论】:

  • 你也有嵌入式浏览器吗?或者您可以只制作一个嵌入码头或 tomcat 的 jar,并使用标准浏览器显示您的应用程序,将其指向 localhost:portnumber/ ?
  • 我想在一个 java 应用程序中嵌入一些浏览器和码头,以便在一个 JVM 中完全控制桌面和后端

标签: java webkit jetty electron desktop


【解决方案1】:

最近几天我一直在寻找类似的解决方案,但没有找到完全好的解决方案。

以下是我发现的更有趣的部分解决方案。

在java中嵌入浏览器(chromium)

我找到了两个网站,不清楚什么是更好的解决方案:

我不确定这些嵌入解决方案是否能正常工作。

如果有人找到更快的嵌入网络浏览器的解决方案,请告诉我。

如果您将浏览器嵌入到您的代码中,那么如果浏览器将来会自行更新并且用户拥有您的窗口容器,除非是标准浏览器窗口。

如果您使用外部浏览器,您确信它是众所周知的行为,但将来可能会发生变化,如果发生这种情况,您必须更新您的应用程序。

我选择避免使用嵌入式浏览器并重用标准的外部浏览器。

嵌入http服务器

我喜欢我找到的两个解决方案。所有这些解决方案都可以在您的 Web 应用程序上使用最少的代码更改。

最好的做法是让您的 Web 应用程序成为 Maven 应用程序。

为了做到这一点,过去我查看了 Web 应用程序类路径中的每个库,并将其放入 maven pom.xml 依赖树中。

Spring-boot 框架

Spring-boot 是 Spring framework 的一部分。
这是一个Spring projects:Spring-boot
这个项目对启动您的 Web 应用程序有很大帮助。
由于您正在开发 Web 应用程序,因此您将添加一个 spring-boot- maven pom.xml 中的 starter-web 依赖项
它的标准嵌入服务器网络是tomcat7/8,但您可以更改为Jetty8/9Undertow 1.1

Spark 框架

这个frameworkSpring-boot 的一个很好的替代品。它更简洁,使用Jetty作为嵌入式Web服务器。

我喜欢 Spring-boot,因为我习惯于 Spring 配置并使用 xml/annotation 配置的混合,并且我喜欢 spring IoC。使用 Spring-boot 可以轻松添加其他 Spring constellation 功能。

希望对你有帮助。

【讨论】:

  • 似乎 javacef 和 jcef 是唯一可能的实时选项,因为 JavaFX 包含旧的错误版本的 webkit 并且 SWT 不支持 chromium。我会尝试构建它,很遗憾,这些项目不提供二进制文件。
【解决方案2】:

我认为你可以使用wt。这是一个采用基于 Qt 的 GUI 应用程序并将绘图机制从通常的桌面控件重写为网页上的 html 控件的系统。 IIRC 非常透明,您只需更改一两行原始代码。虽然 Qt 不是 java,所以我只是为了完整性而指出它,但它仍然很酷。


但最简单的方法是使用 Web 技术(例如 HTML/JSP 控件)来实现它,以便它可以轻松地显示为网页,然后创建一个桌面应用程序,它使用相同的 html 页面,仅包装为“可执行”。

要创建桌面应用程序,您可以在嵌入式浏览器中查看网页窗户。

归功于@gbjbaanb

资源链接:

  1. Is it possible to have a single code base for a desktop GUI and a web application?
  2. Run Jetty Web Server Within Your Application
  3. Running a web application (WAR) with embedded jetty server

【讨论】:

  • 在这种情况下,我无法使用桌面 API 打开新窗口,在 Java 中添加托盘图标,最重要的是我无法使用 Java API 从 Java 后端与桌面部分进行通信
  • @jreznot 你检查过 2 号资源链接吗?你没事吧?
  • 我刚刚找到官方手册eclipse.org/jetty/documentation/current/embedding-jetty.html,所以Jetty的嵌入很简单
  • @jreznot 是的,这是一个很好的教程。数字 2 是该教程的缩小版。感谢分享。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
  • 1970-01-01
  • 2020-10-03
  • 2011-12-06
  • 2020-01-20
  • 2021-04-03
  • 1970-01-01
相关资源
最近更新 更多