0

我们有一个用 Java 编写的应用程序,其中 UI 将是一个相对较小的部分。我们想要创建一个现代的、面向消费者的 UI,并得出结论,Swing 无法提供我们所追求的东西。经过深思熟虑,我们决定尝试使用 Vaadin 构建 UI,因为虽然我们的应用程序无法在 Web 上运行(它是 p2p),但 Vaadin 提供了开箱即用的流畅和美观的体验。因此,我们的应用程序没有 Vaadin 所需的 WAR 结构。

我们的想法是,我们将创建一个小型嵌入式 Web 服务器,它将为用户的本地 Web 浏览器(我们将使用 java.awt.Desktop.browse() 启动)提供 Vaadin UI。我们仍然存在如何将 WAR 结构嵌入到现有项目中的问题。我们的构建工具是 Maven,您可以查看项目源代码:https ://github.com/sanity/tahrir

4

2 回答 2

1

您可以嵌入 Jetty:这.

例子:

Server server = new Server(8080);
Context root = new Context(server,"/",Context.SESSIONS);
root.addServlet(new ServletHolder(new HelloServlet("Ciao")), "/*");
server.start();

如果你想运行WAR这里有一个关于如何做到这一点的例子

以下是相关代码:

server = new Server();
Connector connector = new SelectChannelConnector();
connector.setPort(PORT);
connector.setHost("127.0.0.1");
server.addConnector(connector);

WebAppContext wac = new WebAppContext();
wac.setContextPath("/");
wac.setWar("./web");    // this is path to the .WAR 
server.setHandler(wac);
server.setStopAtShutdown(true);
server.start();
于 2012-07-13T04:58:23.717 回答
0

Vaadin一个 Web 应用程序框架 - Web 应用程序将具有 WAR 结构。

现在,如果您想避免将所有类都放在 WEB-INF/lib 或 WEB-INF/classes 中,那很好。通过嵌入 Jetty,您可以使用类路径上的所有类,而无需将它们粘贴在某个位置。

但是,您必须在 Jetty 中构建和配置 Web 应用程序做一些工作。我想最简单的方法是在类路径上的 JAR 中创建一个 WAR 结构(或创建一个兄弟 WAR)以及所有其他 web 资源,例如 WEB-INF/web.xml、VAADIN/themes 等 - 但没有WEB-INF/lib 和 WEB-INF/classes - 这是我认为你试图避免的。

请注意,我自己并没有这样做,但我相信这既是可能的,也是阻力最小的路径。

于 2012-07-13T08:24:16.480 回答