2012-03-27 84 views
1

我在我的應用程序下面的架構。Spring事務的Bean作爲Servlet的

客戶端(GWT)< --calls - > Servlet的< --calls - >服務< --calls - >道

我想使這個架構更容易更改。 例如:當我想從DAO層返回一個對象的插入ID,因爲我需要它在客戶端,我必須更新服務和Servlet層爲好。所以對於這個小改動,我必須更新所有3層(3個班級和3個接口),對6個地方進行更改。 我明白了爲什麼我需要Dao層。 我也明白爲什麼我需要的服務層。 我不明白的是爲什麼服務層也不能是一個servlet。目前,我所有的servlet都將請求轉發給服務層。

關於Java Servlet的維基百科的文章說:

Servlet的最經常使用到從HTML表單提交
1的過程或存儲數據
2提供動態內容,如的結果數據庫查詢
3管理不無狀態的HTTP協議

1和2都只是數據庫調用,這是我在做存在狀態信息我的dao層和服務層使得額外的業務邏輯已經成爲可能。 3我目前沒有使用會話。我沒有登錄,到目前爲止,我只是玩弄我的架構,但我認爲,服務層可以處理這一點。

我想知道這個架構變化的COS和優點:

優點:

  • 一層少,如果發生變更,更新。

利弊

  • 服務層得到絡合劑。

THX你的答案。

回答

2

您需要servlet層,因爲這是允許訪問會話的原因。

此外,由於您希望能夠在其他應用程序中重新使用服務和DAO層,因此您不希望服務層需要了解有關HTTP的任何信息(例如,如果您編寫的桌面應用程序重新使用這些層),並需要包含servlet API在那裏沒有意義。

如果需要,您可以直接從servlet調用DAO層以獲得簡單情況,以便不重複服務和DAO層中的方法。

servlet API具有過濾器,它們是在Web應用程序中實現安全性的好地方。

如果您已經爲您的Web應用程序使用Spring框架,則可以使用Spring Security

+0

我也可以在服務層上使用Spring Security,因爲它是一個servlet層,或者我錯過了? – SCBoy 2012-03-27 10:17:07

+1

Spring Security的主入口點實現了來自servlet規範的過濾器,因此它構建在servlet層上。它本身不是一個servlet層。 – 2012-03-27 10:22:27

+0

您還可以使用Spring Security在服務層中註釋方法:http://static.springsource.org/spring-security/site/docs/3.0.x/reference/springsecurity-single.html#ns-method-security。您可以使用AOP或使用常規代碼並在服務層中傳遞用戶對象來完成這一切。 – 2012-03-27 10:32:03