首頁 > Java > java教程 > 主體

Spring MVC 餐廳

DDD
發布: 2024-10-24 04:40:30
原創
195 人瀏覽過

想像 Spring MVC 不只是一個框架,而是一種餐廳。你來到餐廳(發送 HTTP 請求),然後魔法就開始了,這就是 Spring MVC 世界中發生的事情:

您進入一家餐廳 - DispatcherServlet 正在值守
想像一下走進 Spring MVC 餐廳。但在您上桌之前,首席門童 - DispatcherServlet 會向您打招呼。他代表前端官員並管理所有訂單。您的 HTTP 請求就像您對門衛的第一次問候:您想要一些美味的東西。

Ресторан Spring MVC

DispatcherServlet 本身並不准備食物,它只是將請求傳遞給所需的“廚師”,即您的控制器,由他來準備菜餚。但稍後會詳細介紹。首先,門衛會查看菜單,看看哪位廚師可以為你準備你想要的東西。

尋找配方的處理程序 - HandlerMapping
一旦你說:“我想要一些好吃的!”,門衛(我們勇敢的 DispatcherServlet)不會立即衝向廚房。不,首先他打開 HandlerMapping,其中有所有可能的餐廳菜餚以及可以準備這些菜餚的廚師。

你想要一塊蛋糕。門童檢視他的筆記,發現約翰廚師正在透過 ChefController 製作蛋糕。

Ресторан Spring MVC

門童將訂單送到廚房 - HandlerAdapter
一旦門衛找到了合適的廚師,他就會使用他的助手HandlerAdapter,幫助打包訂單並將其傳輸到廚房交給廚師。就好像門童在低聲說:「約翰,為顧客做個蛋糕,快來吧!」

廚師準備菜餚 – 控制器

Ресторан Spring MVC
現在約翰廚師接任。他是我們的主控,負責煮飯。根據客戶的要求,他可以製作不同的蛋糕。例如,如果請求是 GET,那麼 John 可以簡單地展示現成的蛋糕(將它們從冰箱中取出)。如果要求是 POST,那麼也許您想要一個鮮奶油蛋糕,John 就會開始做飯。

範例:

@GetMapping("/cakes")
公用列表 getCakes() {
return List.of("拿破崙", "提拉米蘇", "起司蛋糕");
}
這位廚師也不猶豫,立刻就給了一份蛋糕清單!

菜餚裝飾 - ViewResolver
菜餚準備好後,您需要精美地呈現它。這就是 ViewResolver 發揮作用的地方。他就像一個盤子設計師:他決定以什麼形式將菜餚提供給客戶。你不想只看到一堆配料,你想要一個裝飾精美的蛋糕!

ViewResolver 可以決定將蛋糕放在金盤 (JSP) 上,或放在盒子 (JSON) 中(如果您訂購了蛋糕)。

瞧! 餐桌上的菜餚 - HTTP 回應
最後,菜準備好了並上桌。您的客戶端(瀏覽器)收到餐廳的回應。根據您的訂單,這可能是包含蛋糕的 HTML 頁面,或者如果您透過外帶應用程式訂購,則可能是 JSON 物件。

例如,廚師 John 決定以 JSON 格式提交蛋糕清單:

@GetMapping("/cakes")
@ResponseBody
公用列表 getCakes() {
return List.of("提拉米蘇", "拿破崙", "閃電泡芙");
}
客戶收到了帶有蛋糕的 JSON,他的生活變得更好了!

如果出了問題怎麼辦? — 異常處理

Ресторан Spring MVC
與任何餐廳一樣,有時會出現問題。例如,約翰廚師突然把你的蛋糕掉到了地板上!在 Spring MVC 世界中,這相當於異常(例如請求無法處理)。

不過別擔心,Spring Restaurant 有一位特別的服務生叫 ExceptionHandler,他會快速回覆並給你帶來道歉或新訂單。

@ExceptionHandler(NoCakesAvailableException.class)
公共 ResponseEntity handleNoCakes(NoCakesAvailableException e){
return new ResponseEntity("抱歉,所有蛋糕都出來了!", HttpStatus.NOT_FOUND);
}
這樣,如果突然沒有蛋糕了,他們會告訴你一切都結束了並請求原諒。

結論
現在你明白了Spring MVC就像一家餐廳,有一個結構清晰的服務系統。在這裡,門童(DispatcherServlet)接受您的訂單,找到準備菜餚(處理請求)的合適廚師(控制器),服務員(HandlerAdapter 和 ViewResolver)將精美呈現的結果呈現出來。即使出現問題,ExceptionHandler 也始終準備好進行備份。

以上是Spring MVC 餐廳的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!