如何将WAR结构嵌入桌面应用程序?

时间:2012-07-13 02:31:59

标签: java user-interface war vaadin

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

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

2 个答案:

答案 0 :(得分:1)

你可以嵌入Jetty:这是how

示例:

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

如果您想要运行 WAR here就是如何执行此操作的示例

以下是相关代码:

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();

答案 1 :(得分: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 - 这是我试图避免的思考

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