2010-11-23 62 views
1

我想通過Web界面使用Tomcat和servlet來設想將來在服務器上運行的(現在是本地的)程序。我對如何將現有的應用程序與HTTPRequests集成到servlet中感到困惑。如何將servlet Web界面附加到本地客戶端應用程序?

我的應用程序是否應該已經運行,並且servlet可以傳輸控制權? 或者我的程序將成爲servlet本身? 還是我的應用程序包含一個servlet,Tomcat只知道我的應用程序中有一個servlet?

我只需要一些關於如何將所有東西放在一起的建議,以及servlet如何調用應用程序邏輯......謝謝!

我想象的是這樣的:

  1. 的HTTPRequest涉及到Tomcat的,它通過所謂Servlet.service(...)(如果不存在Servlet的創建)
  2. 其路由到的Servlet
  3. Servlet.service()檢查應用程序是否在運行,如果沒有,爲應用程序創建新的進程
  4. servlet可以HttpRequest中頁眉/主體發送到新的進程,或者通命令行或通過標準輸入
  5. Servlet可以等待新的過程完成,或者理所當然發送一個HTTPResponse並讓進程運行(應用程序需要線程化,因此請立即發送響應並讓它運行)。
  6. 如果另一個請求到達這個servlet,步驟2

這聽起來合理嗎?

我想不是做一個單獨的過程,而是我可以在Servlet中對我的應用程序進行線程化,並讓它以這種方式運行。

回答

1

不完全知道你的應用程序是什麼,我的建議是儘可能多地隔離當前應用程序中的邏輯。這將是您的「業務」邏輯。把它作爲一個獨立的項目打包成一個jar包。

創建一個新項目作爲您的Web層(最有可能打包爲WAR)。這將包括您的servlet和jsp頁面以與您的業務邏輯進行交互。例如,你有一個創建某種類型的業務對象的表單。該表單將是一個由servlet「提供」的jsp頁面。當您提交表單時,servlet將處理業務項目(jar)中的表單提交和調用代碼。

網絡的東西只是作爲一個單獨的層,並保持所有的業務邏輯獨立於視覺網絡的一面,也可以讓你在它之上建立一個服務層,最終也可以在你的web項目和實際之間業務邏輯,雖然取決於你的目的可能會有點過頭。

+0

謝謝。這就是我們最終做的事情; Web應用程序和應用程序的單獨項目(在我們的例子中它們是非常不同的東西)。我們創建了一個使用JMS進行兩者之間通信的服務層。 – 2011-04-30 04:26:54

0

考慮到您的應用程序是一個線性的非線程程序,它在實例化類的對象時執行某些操作,而對象具有某些外部接口(公共方法)。然後,servlet容器將啓動,並且必須編寫一個新的servlet類,它將創建對象的實例並從標準servlet方法(service(),doGet()等)調用您的方法。請記住將您的類放在servlet容器或webapp的類路徑中。

1

servlet是Java爲Web服務器實現通用網關接口程序的方式。因此,您正在編寫的這個程序(您可能希望提供更多信息)應該提供某種輸入的程序類型,處理輸入,然後提供響應。

我建議你將當前寫入控制器和模型類的應用程序分解。處理輸入和輸出的任何東西都是你的控制器。任何涉及業務邏輯的東西都是模型。 (所有打印出來的東西都是視圖,而且我說的是模型 - 視圖 - 控制器模式MVC)。

因此,您的應用程序中的控制器(將所有內容移動到servlet之前)可能需要一堆來自命令行的參數,檢查它們的正確性,正確的組合類型等等。

您的模型代碼應該有一個不依賴於控制器的漂亮而簡單的接口。 (它不應該知道它是從您的應用程序還是從servlet層被調用)。它應該提供一種方法,通過採用對您的業務邏輯有意義的參數來執行業務邏輯。所以,如果你正在編寫計算兩個數字總和的servlet,那麼模型層應該有一個方法,它接受兩個數字參數並返回總和。這樣你就可以將模型放到應用程序或者servlet中,並且它可以正常工作。只有你的控制器需要改變。

我不會介紹如何編寫一個servlet和一個應用程序 - 這是一個涉及的主題,這裏有很多例子。但是servlet調用應用程序邏輯的方式很簡單:您實例化您的模型類,然後在該實例上調用一個方法。就像其他任何Java應用程序一樣。

相關問題