2012-01-17 59 views
6

我有一個運行着某些特定硬件的Web應用程序。這在下面的步驟來實現:從Web應用程序提供硬件支持

  1. 用戶運行一個小的安裝程序,在客戶機上放置Java文件(一對夫婦 等)。主要件是一個名爲「hardwareManager」的罐子
  2. 用戶訪問網絡應用程序。該Web應用程序運行一個java applet,該applet由於在安裝期間放置了一個.java.policy文件,因此 有權與 與瀏覽器沙箱外的客戶端計算機進行交互。
  3. 該applet檢查以確保hardwareManager正在運行, 並且如果沒有運行命令來啓動它。
  4. 用戶與通過 javascript將命令發送到小程序的web應用進行交互。該小程序然後將命令寫入客戶端機器上的文本文件 。該文本文件是由不斷監測的硬件管理器,它運行它讀取的任何命令。

這工作,但似乎笨重。我對如何改進它有一些想法,但我不知道哪些是值得嘗試的。

將hardwareManager設置爲socketServer並讓applet直接連接到它,而不是通過文本文件會更好嗎?這甚至有可能嗎?

有沒有一種方法可以完全消除applet,並讓javascript直接與hardwareManager交談?也許通過編寫hardwareManager作爲本地http服務器?它應該運行什麼端口? JavaScript xss限制在這裏適合嗎?

+3

如果您讓hardwareManager接受HTTP請求,那麼他肯定可以直接被JS訪問,甚至可以將其設計爲實現作爲REST Web服務的命令。 XSS:這裏不是問題。您當然需要運行hardwareManager來接受這些命令,以及瞭解哪個端口的方法。 – Viruzzo 2012-01-17 11:14:01

+0

添加到@Viruzzu的答案,您可以使用[Jetty](http://docs.codehaus.org/display/JETTY/Embedding+Jetty),它允許輕鬆地將HTTP服務器嵌入到Java應用程序中。那麼您只需將JavaScript代碼指向本地主機,以便與Viruzzo的hardwareManager – 2012-01-18 03:46:50

+1

進行交互,請將該答案作爲答案,以便我可以爲其投票。 – pkh 2012-01-25 00:07:36

回答

2

使用Java Web Start啓動Java應用程序將不那麼笨重。這將消除需要守護進程或安裝Java硬件管理器。

另一種選擇是使用Java內置的瀏覽器。我認爲這不是一個選項,因爲你很大程度上依賴Javascript(我想提供豐富的客戶端體驗)。

如果您已經在客戶端機器上安裝了某些東西,您爲什麼選擇使用Web應用程序?

從經驗談:我們有一個Java EE應用程序需要在客戶端打印到PoS打印機。我們安裝了一個通過SSH連接的小型「同步器」應用程序,並同步所有客戶端文件。之後,它加載JAR並執行程序。該程序通過RMI與服務器連接並訂閱JMS隊列以接收打印指定。

適用於您的案例:爲什麼不讓Java應用程序直接連接到服務器?您可以通過RMI使用HTTP,SOAP甚至JMS。然後可以從服務器啓動硬件命令(而不是從有限的JavaScript瀏覽器環境中啓動)。通過這種方式,您可以獲得許多功能:身份驗證,命令緩衝,甚至可以在多個客戶端之間共享硬件。

原理:

    <----AJAX------> Web browser 
ApplicationServer     
        <---HTTP/SOAP--> Java hardware manager application 

可以啓動使用Java Web Start的Java應用程序,它可以自動更新應用程序(而不是需要通過每一個客戶一個新的安裝程序)。

+0

'如果您已經在客戶機上安裝了某些東西,您爲什麼選擇使用Web應用程序?'它主要是一個Web應用程序,現在需要爲某些用戶提供可選的硬件支持。 – 2012-01-25 21:21:36

相關問題