2011-09-25 51 views
1

我需要經驗豐富的開發人員就項目的軟件架構提供建議。Servlets vs Beans

需要爲API提供REST接口,以便客戶可以:1)自我驗證(這也涉及處理帳戶創建) 2)發出get/add/update/delete()請求資源(例如存儲新書描述[標題+作者..])

WSDL或其他複雜的東西沒有必要(現在)。如果可能的話,我會說我寧願避免使用WSDL,因爲我不會使用它。這不會被用於網站,只有API直接使用。

我讀過很多東西,但需要明確的狀態如下: - 您會使用servlets還是bean? - 處理身份驗證,是有狀態的一個好主意?處理會話的最好和簡單的方法是什麼?

我正在尋找最簡單的方法,因爲我目前對J2EE的瞭解很少。

謝謝你的時間!

回答

1

如果客戶端要使用Web界面訪問您的站點,那麼基於會話的系統是更好的選擇。如果它只是程序使用的服務API,則使用HTTP身份驗證。

如果您打算使用api服務,您最好通過查看其中一個RESTy框架(如JAX-RS)來提供服務。您可以將其用於實際的網站,但通常不會以這種方式使用(所以這些示例並不真正匹配該域)。

如果你正在做一個網站,那麼看看Stripes或Struts 2之類的動作框架。這些動作框架可以讓你綁定到RESTY網址,但它們對於網站也很棒。

對於這些中的任何一個,最好有一個基本的Servlets知識,特別是HTTP,工作流,重定向和轉發之間的差異等。因爲這些框架利用了基本的Servlet模型。

所有這些都可以通過原始Servlet輕鬆完成,框架使事情變得更簡單,而JAX-RS和Stripes/Struts 2對於前進的影響相當小。

+0

我正在尋找服務API。所以如果我理解的很好,你會嘗試一個面向REST的框架(基於servlet),使用HTTP認證和一個Filter,以及一個HttpSession對象來避免有狀態的服務?這聽起來不錯! – SCO

+0

絕對看JAX-RS。 – BalusC

1

總之?都。你想要servlet和基於POJO接口的bean,但不要做同樣的事情。

如果您需要REST,您將使用servlet。這些是Java EE中的HTTP偵聽器,REST基於HTTP。因此,我建議使用基於接口的POJO來實現完成所有工作的代碼。它會讓你的代碼更容易測試和改變。

REST是許多人中的一種部署選擇。如果你堅持使用基於接口的POJO,只需在bean上使用不同的包裝,就可以更改部署策略。

REST層除了身份驗證和授權,綁定和驗證之外不應該做任何事情。讓它遵循POJO bean來完成工作。

Servlets通過URL重寫或cookie處理會話。利用他們給你的東西。

但是REST服務應該是無狀態的;沒有會話,呼叫之間沒有狀態保存。

在撥打電話之前,您可以使用Filter來檢查身份驗證。這是交叉的方式。將過濾器視爲HTTP的方面。

+0

這很有趣,我會直接在servlet中實現業務邏輯。採用圖層方法看起來很聰明。 – SCO

+0

該方法的兩個問題是您需要一個servlet容器來測試您的服務,並且如果Web層消失,您必須重寫您的服務。最好將它保存爲POJO,以便通過SOAP,REST或EJB或其他任何方式將其刪除。將遠程選擇與業務邏輯分開。 – duffymo

1

驗證自己的身份(這也涉及處理帳戶創建)

Servlet的有內置的安全功能,以及幾個庫(春季安全,阿帕奇四郎)。

WSDL或其他複雜的東西沒有必要(現在)。

WSDL最常用於描述SOAP Web服務。

你會使用servlets還是bean? - 處理身份驗證

您是指企業Java bean?他們不會幫助你,你仍然需要一些東西來處理HTTP請求 - servlet在哪裏發揮作用。但是你可能想要實現一些實際的業務邏輯 - servlets只有網關,不要在那裏實現邏輯。從技術上講,你可以通過SOAP(但你想要REST)或使用JAX-RS(Java EE棧的一部分)公開EJB,但顯然它使用下面的servlet。

將會有狀態的一個好主意

原則 - REST是無狀態的,沒有會話狀態。但是,對每個請求進行身份驗證可能會花費太多。所以你會在最後的HTTP會話(使用servlet輕鬆處理)至少存儲JSESSIONID。

+0

沒有SOAP,但是可以定義一下JAX-RS! – SCO