2013-01-21 86 views
0

我有一個基於JSP和Spring MVC,我需要解決這個任務的Web應用程序:替代會話Bean

用戶必須能夠使用添加嚮導對話框的主要實體的新實例。嚮導包括3個步驟:

  1. 在第一步驟,必須有一個形式,其允許填充主實體的領域,包括與涉及作爲多到一個實體關聯(它建議使用下拉場)。表單應該包含不同類型的字段:文本,數字,日期,單選按鈕等。一些字段應該是必需的,而另一些則不是。 示例:輸入姓名,姓氏,出生日期,電話號碼,孩子數量,選擇性別(單選按鈕),部門(下拉)等。

  2. 第二步用戶填寫其他屬性,包括與實體與當前的實體相關爲多對多。 示例:將員工與他擁有的技能(複選框)關聯起來,添加一些註釋(textarea)。

  3. 在第三步中,前兩步中的所有字段應顯示爲只讀字段。用戶應確認將此數據保存到數據庫中。用戶確認保存後,應將數據保存到數據庫中,並將用戶重定向到帶有對象列表的頁面。

如何在不使用會話的情況下傳輸和保存信息(Http會話,會話範圍)?

回答

1

您需要保持跨多個服務器交互的狀態。有幾種可能性,一般來說,諸如保留的州數據的大小等因素會影響我們的決策。

聽起來你在這裏有幾百個字節的小數量,所以你沒有特別限制的大小 - 幾兆字節將是一個更大的挑戰。

第一種可能性,將它全部保存在JavaScript變量的瀏覽器中,不需要將任何內容發送到服務器。這是典型的現代動態Web UI,服務器提供數據而不是頁面。聽起來像你在一個多頁面的世界,所以折扣這個選項。其次,只需要將一些數據(可能是加密的,放在一個cookie中)有效地讓瀏覽器爲你保存數據,但它是在頁面之間共享的。

第三次使用Http會話狀態 - 你的情況聽起來非常像一個會話的典型候選人。你爲什麼要避免它?根據您的服務器的能力,這種方法可能無法提供出色的彈性行爲(如果狀態位於一個服務器實例上,則會話的所有請求都必須由同一服務器提供服務)。請注意,HTTP會話和EJB會話Bean不是一回事,HttpSession的重量更輕。

使用自定義會話「數據庫」 - 也許字面上SQL數據庫可能更輕。對於大規模數據錄入的情況,用戶可能需要10分鐘才能完成多個頁面,這可能是最好的選擇 - 如果用戶需要中斷並稍後恢復,則可以節省用戶的工作。這是更多的開發工作,你也需要看管家,但它有時是最好的選擇。

總之:要清楚爲什麼你拒絕「明顯的」HTTP會話技術,就簡單而言,它是我開始的地方。

+0

它是架構要求的一部分。這個要求來自於一個事實,即現代高負載Web應用程序通常部署在許多應用程序服務器(組成羣集)上,並且任何下一個Web請求都可以由不同於服務於先前請求的服務器的任何服務器來處理。 –

+0

沒錯,有些應用程序服務器會以犧牲一些開銷爲代價在實例之間傳播會話,而且大多數基礎架構還提供簡單的會話親和力,所以實際上,實用方法通常只是使用Http會話。 – djna