2012-07-13 67 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 - 這正是我想要避免的認爲

請注意,我自己並沒有這樣做,但我相信這是可能的,也是阻力最小的路徑。

相關問題