簡體   English   中英

基於java的網站架構

[英]Architecture of Website based on java

我剛剛開始使用Java編程,因此可能看起來很愚蠢,但是我無法在Internet上找到簡單的答案。 在深入開發之前,我必須回答這個“大”問題,因此您可以幫助我節省大量時間嘗試不同的方法。

我目前正在使用Java創建網站。 該網站的重要功能將通過單獨的Java線程(如守護程序)來實現,只要用戶在網站上,該線程就必須在后台運行。 同時,網站小程序必須具有與此線程通信的方式。

我看到了三種可能的解決方案:

  1. 使用每個單獨頁面中的獨立Java小程序創建傳統的多頁網站。 我不確定是否可能出現以下問題:

    • 用戶導航到另一個網頁(在同一網站上)后,java applet創建的java線程能否繼續執行? 我認為是。
    • 新啟動的Java Applet是否有可能與已經在后台運行的Java線程通信? (我看過文檔中涉及通過JavaScript在Java小程序之間進行通信的部分文檔,不確定是否可以在我的情況下使用它。還有其他選擇嗎?)
  2. 用一個Java小程序創建一個單頁網站,負責所有導航和呈現所有頁面。 這解決了后台守護程序的問題,后台守護程序作為單個applet的一部分變得易於實現並與之通信,但又提出了一個問題:

    • 我知道applet可以修改當前網頁。 使用此功能模擬不同頁面之間的導航是否可行?
  3. 創建Java Webstart應用程序,基本上是從第2頁中獲取單個Java小程序並將其轉換為獨立的應用程序。

我希望整個網站都具有網站的外觀和風格,因此我寧願選項3勝過選項2,又要選擇選項1勝於選項2。

感謝您分享的任何想法。

更新:有人知道p1下兩個問題的答案嗎? 是否有可能以上述方式使用Java線程?

現在,我很可能選擇制作Java Webstart應用程序。 這應該是最不痛苦的方法。

更新2:我最終決定使用單個java applet,可以在需要時將其輕松轉換為JWS應用程序。 我的項目的本質是,我需要給與使用網站的印象,這就是為什么我要付出更多努力使它顯示為網站。 對於有知識的人來說,顯而易見的是,它更像是本地應用程序。 在我的情況下,我選擇的解決方案有以下好處:-可以輕松地從JWS應用程序轉換為Java applet,然后再轉換回來。 -運行后台線程並與其通信沒有問題。 -更可靠的安全性(這意味着我不需要使用任何機制將會話ID從一個applet傳遞到另一個applet)

相反:-如果尺寸變大,啟動會很慢-我希望避免這種情況。 -安全問題-我嘗試簽署了applet,這很有幫助。 -瀏覽器中導航按鈕的工作(來回)-我希望能夠在applet中復制它。 認為applet應該能夠捕獲此事件。

Java線程,只要用戶在網站上,它就必須在后台運行

如果派生的線程是在客戶端登錄時保留狀態,那么我將使用數據庫,內存緩存或其他一些持久層來保存客戶端會話狀態。 這是一個更典型的模型。 您還可以具有多個前端,這些前端可以在網絡上共享會話信息。

如果您不使用瀏覽器,那么創建獨立的Web應用程序可能是最佳選擇。 您仍然可以使用HTTP作為傳輸協議,在這種情況下,我建議您使用Java Web實現(如Jetty) 這將大大減少技術和復雜性。

如果您需要實現網頁,那么我當然會使用適當的前端模型和技術。 您應該將頁面分成多個小程序-或MVC模型中的多個控制器/視圖。 使用小程序應該沒問題。 他們(或控制器)應調用集中式服務,該服務根據信息流啟動,與后台線程通信和停止后台線程。

我當然還會有另一個后台線程運行,以使客戶端線程超時,以防客戶端永不返回。 您的工作線程可能在經過一定的等待后才退出。

希望這可以幫助。


用戶導航到另一個網頁(在同一網站上)后,java applet創建的java線程能否繼續執行? 我認為是。

是。 分叉的線程將繼續運行,直到它們終止或(如果是守護程序)進程終止。

新啟動的Java Applet是否有可能與已經在后台運行的Java線程通信?

當然。 他們需要的是一種能夠共享數據的機制。 例如,您的后台線程服務可以保留線程對象的Map ,且密鑰為某種客戶端ID。 每當線程想要與其后台線程進行通信時,它都可以調用服務以通過id查找線程。 就像是:

BackgroundStream thread = threadService.getThread(clientId);
thread.callMethod(...);

如果存在某種同步的問題/響應,那么您將需要一個條件變量之類的東西。 閱讀有關Java線程的更多信息。

Java的網站應用程序中使用了一種架構,稱為Model-View-Controller Java Server Faces(Java EE 5和更高版本上的標准),Struts(1.x或2.x),Spring,Apache Wicket等框架旨在使用MVC模型創建Web應用程序。 問題是,您是否願意使用框架的基於組件的體系結構(例如JSF)(目前您無需擔心)

小應用程序無疑是一個壞選擇,因為小應用程序已下載到客戶端。 某些瀏覽器不支持Applet,尤其是在移動Web瀏覽器中,並且難以將安全設置應用於不受信任的applet,此外,您可能不知道客戶端是否阻止了applet。

小程序是一個錯誤的選擇,原因有兩個:

1)首先,它們在客戶端的瀏覽器而不是服務器上執行。 因此,您無法使用小程序執行任何后端處理(業務邏輯或從服務器數據庫中獲取數據)。

2)小程序非常容易出錯,並且存在安全問題。 這就是為什么小程序現在已經過時了。

現在介紹如何使用Java技術創建網站,為此,您需要開始了解Java Server Side編程。 開始學習Java Servlet和Java Server Pages。 簡而言之,它們是在Web服務器或應用程序服務器上執行的Java程序。

然后開始閱讀有關Java Enterprise Edition的文章。

請參考Java Enterprise Edition的教程

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM