首页 >Java >java教程 >Spring MVC 餐厅

Spring MVC 餐厅

DDD
DDD原创
2024-10-24 04:40:30281浏览

想象一下 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn