2012-07-13 57 views
0

我们有一个用Java编写的应用程序,其中UI将是一个相对较小的部分。我们想要创建一个现代的,面向消费者的用户界面,并得出Swing无法提供我们所追求的结果的结论。经过深思熟虑之后,我们决定尝试使用Vaadin构建UI,因为虽然我们的应用程序无法在网络上运行(它是p2p),但Vaadin提供了一个流畅而好看的开箱即用体验。由于这个原因,我们的应用程序没有Vaadin所需的WAR结构。如何将WAR结构嵌入到桌面应用程序中?

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

+0

如果您喜欢基于HTML的界面...为什么不去[Adobe Air](http://www.adobe.com/products/air.html)之类的东西? – Luxspes 2012-07-13 04:13:00

+0

或者[Appcelerator's Titanium](http://www.appcelerator.com/) – Luxspes 2012-07-13 04:14:33

+0

Linux支持对我们来说是必须的,我不相信任何提供这样的服务。两者的缺点也是它们是专有的。 – nomel7 2012-07-13 04:29:25

回答

1

您可以嵌入码头:这里是how

例子:

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

如果你想运行一个WARhere是如何做到这一点

下面是相关的代码示例:

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

我们的应用程序不是RIA,因此没有WAR结构。我们不想改变我们的应用程序的结构,因为用户界面是一个相对较小的部分。主要问题不是在本地运行服务器,而是允许我们在整个项目中使用没有WAR结构的Vaadin,而是可能将其嵌入到其中。 – nomel7 2012-07-13 05:06:19

+0

您不需要WAR结构。你只需要你的应用的.jar和.war(或嵌入在.jar中) – Luxspes 2012-07-13 05:07:50

+0

在你的问题中,你问:“我们仍然有问题 - 如何嵌入一个WAR结构**到一个现有的项目中。“好吧,假设你的应用程序在一个.jar中,你只需将.war复制到与。jar和使用相对路径从你的.jar应用程序中找到它 – Luxspes 2012-07-13 05:09:06

0

Vaadin 一个Web应用程序框架 - 并且Web应用程序将期望有一个WAR s tructure。

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

但是,您将不得不在Jetty中构建和配置Web应用程序。我想象了在类路径(或创建同级WAR)中使用所有其他Web资源(例如WEB-INF/web.xml,VAADIN/themes等)在JAR中创建WAR结构的最简单方法 - 但没有WEB-INF/lib和WEB-INF/classes - 这正是我想要避免的认为

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

相关问题