簡體   English   中英

每個webapp一個或多個servlet?

[英]One or multiple servlets per webapp?

我知道,這取決於webapp。 但是在正常情況下,你做什么:一個servlet,它服務於不同的頁面(比如一個具有不斷變化的內容的獨立應用程序),或者每個頁面都有一個servlet。

以博客為例。 有一個包含最新博客條目的起始頁面,一個用於顯示一個博客條目和一個存檔的文章視圖。 您是使用三個不同的servlet實現此功能,還是將其分配給函數。 至少有很多東西是共享的,比如http-headers。

那么,你的經歷是什么,最有效的是什么?

通常,您將根據用例創建一個servlet。 Servlet就像您的應用程序的控制器。 當您從用戶識別交互時,然后實現servlet來控制該交互。

也就是說,如果您使用普通的servlet / JSP來構建站點。 如果您使用像struts這樣的框架,您會發現它們實現了前端控制器模式,並使用單個servlet來接收所有請求,並將這些請求轉發給實現用戶請求的實際邏輯的操作類。 這對你自己來說要難得多,但這是一個很好的做法......這就是為什么這么多人使用這些框架的原因。

簡而言之,您將為每個webapp創建許多servlet,因為每個webapp都會暴露幾個用例。

[編輯]重新閱讀您的問題,似乎您使用術語網站表示頁面或視圖。 同樣,這取決於該觀點上發生的事情。 例如,要顯示最新的博客條目,您可以擁有一個servlet,用於構建數據庫中的條目列表以供顯示。 如果用戶單擊某個條目,則另一個servlet可以檢索該單個條目以供查看,依此類推。 主要是,每個動作都是一個用例,因此是一個不同的servlet。

大多數Web框架使用調度程序servlet(例如:Spring MVC)來處理將請求路由到適當的類/控制器。

當你開始擁有大量頁面時,這種方法效果最好,因為你有一種更加用戶友好的方式(關於web.xml)來聲明/管理一個處理http請求及其url的類。 示例(再次彈簧mvc):

@Controller
public class MyController {
 @RequestMapping("/viewPosts")
 public void doViewPosts(HttpRequest r, HttpResponse res) {
  //...
 }
}

此外,擁有一個調度程序servlet可以使代碼流集中。

這取決於。

在我最近的項目中,我實現了一個servlet,它委托給幾個類似servlet的對象,這些對象以依賴注入方式實例化。 例如,我的s​​ervlet中有類似的東西(偽代碼):

for(Handler handler : handlers) {
    if(handler.handle(request, response)) {
         return;
    }
}

其中Handler是一個帶有布爾句柄(請求,響應)方法的接口。 我從容器中獲取處理程序(無論是Spring還是更輕量級的東西)。

這樣做的原因是我真的很喜歡依賴注入,而且很難在Servlets中實現它; 對於提供web組件依賴注入的大多數框架,我真的不太感到賓至如歸 - 我喜歡servlet的簡單性。

如果沒有這個,我會選擇多個servlet,盡管有一個權衡; 你有一個龐大的web xml有很多(和很多)servlet映射,或者你有一個非常復雜的servlet(除非你使用像我的di方法)。

暫無
暫無

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

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