问候大家。
这是获得Spring Professional认证的一系列培训文章中的第5条。
让我提醒您,这些文章是Pivotal官方指南为认证准备中的问题的答案。

MVC是特殊模式的缩写。 这个模式是什么?它有什么用?MVC是一个特殊的模板。 他将程序分为3种类型的组件:
- 模型-模型负责数据存储。
- 视图-负责前端的数据输出。
- 控制器-负责与视图交换数据。 他使用模型进行操作。

什么是DispatcherServlet,在哪里使用?这是MVC进行数据交换的主要部分之一。 这是在常规servlet之间分配请求的主要servlet。
- 它接收请求并将其发送到注册的处理程序。
- 通过将视图名称与ViewResolver对象匹配来处理视图
- 处理引发的异常

请求的生命周期是多少?- 该请求来自DispatcherServlet
- DispatcherServlet基于请求中的URL向一个控制器发送请求
- 控制器处理请求,将业务逻辑的执行委派给业务层(通常是带有
@Service
批注的类),并创建一个包含数据的模型,并将其发送回DispatcherServlet - DispatcherServlet基于ViewResolver接口将模型发送到视图的前端(更多信息请参见下文)
DispatcherServlet的创建如何完成?DS是在创建ApplicationContext之前创建的。
从Spring 3.2开始,使用称为AbstractAnnotationConfigDispatcherServletInitialize的WebApplicationInitializer接口的实现。
AbstractAnnotationConfigDispatcherServletInitializer同时创建DispatcherServlet和ContextLoaderListener。
有两种方法可以配置DS:
- 通过在web.xml中定义特殊属性
- 覆盖AbstractAnnotationConfigDispatcherServletInitializer
什么是WebApplicationContext? 他带来了什么其他范围?这是Web应用程序的特殊上下文。
它具有常规ApplicationConext的所有功能(因为它继承自它),但是它也具有标准Servlet API的方法。
注意:范围是范围。
为什么要使用会话范围?会话作用域bean是会话存在时存在的bean。 在网上商店等创建购物篮时可以使用它。
为什么要使用@Controller批注?Controller批注用于注册http请求处理程序。 这是一个包含Component注释的类级注释。 控制器类看起来像常规的POJO,带有处理程序方法和注释。
传入请求如何映射到处理程序方法?- DispatcherServlet收到请求
- DS包含实现
HandlerMapping
接口的类的列表HandlerMapping
- 处理程序在此处找到方法,并在控制器类中向其发送请求
- 处理程序方法执行请求
告诉我们有关注释@RequestMapping的信息该注释主要用于为控制器类指定URI。 以前,类方法使用它来指示URI,http方法,发送的数据类型等。 在较新版本的Spring中,已将其替换为注释@ GetMapping,@ PostMapping等。 现在,它仅用于指示控制器类的URI。
什么是@ GetMapping,@ PostMapping,@ DeleteMapping和其他注释?这些是用于映射http方法的较窄注释。
@GetMapping
处理请求@PostMapping
处理帖子请求@DeleteMapping
处理删除请求@PutMapping
处理放置请求@PatchMapping
处理补丁请求
下面写的所有内容都是其他注释的特征。
注释@GetMapping只是一个包含@RequestMapping(方法= RequestMethod.GET)的注释。
它还允许您微调处理程序方法。
其参数(将它们转换为类似的@RequestMapping参数):
为什么使用@RequestParam批注?使用此注释,以便处理程序方法可以从http请求中获取参数。
带有参数的请求: http://localhost:8080/getByName/name=Ivan
。
以下代码会将字符串Ivan
放入变量name
。
@GetMapping("getByName") public User getUserByName(@RequestParam("name") String name) {
为什么使用@PathVariable批注?该注释从URI中获取特定部分。
URI: http://localhost:8080/getById/23
以下代码将23
放入id
变量中。
@GetMapping("getById/_{id}_") public User getUserById(@PathVariable("id") String id) {
处理程序方法可以接受哪些参数?控制器类中的方法可以使用某些类型的对象作为接受的参数。 然后Spring将自动实现它们。 例如,所需的HttpSession对象,安全性等。
@GetMapping public User getUserById(HttpSession session) {
方法参数旁边还有哪些其他注释可供使用?@MatrixVariable
指示该参数应与URI中的名称/值对关联。@RequestHeader
指示参数应与Web请求的标头关联。@CookieValue
指示该参数应与cookie关联。
该参数可以声明为cookie类型或cookie值类型(字符串,整数等)。@ModelAttribute
指示参数与可用于视图的命名模型属性关联。@SessionAtribute
指示参数与会话中的属性关联。
什么是@RequestBody批注?它用于指示该方法不是针对模型,而是针对数据。 也就是说,它发送JSON,XML,文本等。 通常,它在REST服务中隐式使用。
什么是视图?视图用于向用户显示应用程序数据。
Spring MVC支持多个View提供程序(它们称为模板引擎)-JSP,JSF,Thymeleaf等。
View接口将对象转换为常规servlet。
在渲染阶段如何选择视图? 视图如何显示?DispatcherServlet包含一个用于视图的特殊“映射器”列表,该列表基于Servlet的配置将包含实现ViewResolver接口的容器 。
查看显示过程:
- 控制器在DispactherServlet中返回名称视图
- 名称映射到
ViewResolver
名称 - 如果
ViewResolver
了合适的ViewResolver
,它将返回在渲染时应使用的View。 - DS会将模型中的数据与视图一起传递,并显示输出(HTML页面)
什么是模型?这是一个类对象,可实现Model接口并表示键/值对的集合。
模型的内容用于在视图中显示数据。
例如,如果View显示有关Customer
对象的信息,则它可以引用模型键,例如customerName
, customerPhone
,并获取这些键的值。
模型中的值对象也可以包含业务逻辑。