准备春季专业认证。 关于Spring MVC的问题

问候大家。


这是获得Spring Professional认证的一系列培训文章中的第5条。


目录
  1. 依赖注入,容器,IoC,bean
  2. AOP(面向方面​​的编程)
  3. JDBC,事务,JPA,Spring数据
  4. 春季靴
  5. 春季MVC
  6. 春季安全
  7. 休息
  8. 测试中

让我提醒您,这些文章是Pivotal官方指南为认证准备中的问题的答案。





MVC是特殊模式的缩写。 这个模式是什么?它有什么用?

MVC是一个特殊的模板。 他将程序分为3种类型的组件:


  • 模型-模型负责数据存储。
  • 视图-负责前端的数据输出。
  • 控制器-负责与视图交换数据。 他使用模型进行操作。


什么是DispatcherServlet,在哪里使用?

这是MVC进行数据交换的主要部分之一。 这是在常规servlet之间分配请求的主要servlet。


  • 它接收请求并将其发送到注册的处理程序。
  • 通过将视图名称与ViewResolver对象匹配来处理视图
  • 处理引发的异常


请求的生命周期是多少?
  1. 该请求来自DispatcherServlet
  2. DispatcherServlet基于请求中的URL向一个控制器发送请求
  3. 控制器处理请求,将业务逻辑的执行委派给业务层(通常是带有@Service批注的类),并创建一个包含数据的模型,并将其发送回DispatcherServlet
  4. DispatcherServlet基于ViewResolver接口将模型发送到视图的前端(更多信息请参见下文)

DispatcherServlet的创建如何完成?

DS是在创建ApplicationContext之前创建的。
从Spring 3.2开始,使用称为AbstractAnnotationConfigDispatcherServletInitialize的WebApplicationInitializer接口的实现。


AbstractAnnotationConfigDispatcherServletInitializer同时创建DispatcherServlet和ContextLoaderListener。


有两种方法可以配置DS:


  • 通过在web.xml中定义特殊属性
  • 覆盖AbstractAnnotationConfigDispatcherServletInitializer

什么是WebApplicationContext? 他带来了什么其他范围?

这是Web应用程序的特殊上下文。
它具有常规ApplicationConext的所有功能(因为它继承自它),但是它也具有标准Servlet API的方法。


注意:范围是范围。


适用范围内容描述
Request范围-1个HTTP请求。 为每个请求创建一个新bean。
Session范围-1节。 为每个会话创建一个新bean。
Application范围-ServletContext生命周期
WebSocket范围-WebSocket生命周期

为什么要使用会话范围?

会话作用域bean是会话存在时存在的bean。 在网上商店等创建购物篮时可以使用它。


MVC中的默认范围是什么?

就像在没有MVC的春季-单身人士一样。


为什么要使用@Controller批注?

Controller批注用于注册http请求处理程序。 这是一个包含Component注释的类级注释。 控制器类看起来像常规的POJO,带有处理程序方法和注释。


传入请求如何映射到处理程序方法?
  1. DispatcherServlet收到请求
  2. DS包含实现HandlerMapping接口的类的列表HandlerMapping
  3. 处理程序在此处找到方法,并在控制器类中向其发送请求
  4. 处理程序方法执行请求

告诉我们有关注释@RequestMapping的信息

该注释主要用于为控制器类指定URI。 以前,类方法使用它来指示URI,http方法,发送的数据类型等。 在较新版本的Spring中,已将其替换为注释@ GetMapping,@ PostMapping等。 现在,它仅用于指示控制器类的URI。


什么是@ GetMapping,@ PostMapping,@ DeleteMapping和其他注释?

这些是用于映射http方法的较窄注释。


  • @GetMapping处理请求
  • @PostMapping处理帖子请求
  • @DeleteMapping处理删除请求
  • @PutMapping处理放置请求
  • @PatchMapping处理补丁请求

下面写的所有内容都是其他注释的特征。


注释@GetMapping只是一个包含@RequestMapping(方法= RequestMethod.GET)的注释。
它还允许您微调处理程序方法。
其参数(将它们转换为类似的@RequestMapping参数):


  • path -URI
  • headers -标头
  • name -处理程序名称
  • params - 参数
  • produces -返回数据的类型(JSON,XML,文本)。 在REST中使用
  • consumes -接收到的数据类型。 在REST中使用


    默认情况下,注释采用方法的路径。
    @GetMapping("managers") = @GetMapping(path = "managers")



为什么使用@RequestParam批注?

使用此注释,以便处理程序方法可以从http请求中获取参数。


带有参数的请求: http://localhost:8080/getByName/name=Ivan
以下代码会将字符串Ivan放入变量name


 @GetMapping("getByName") public User getUserByName(@RequestParam("name") String name) { //some logic } 

为什么使用@PathVariable批注?

该注释从URI中获取特定部分。


URI: http://localhost:8080/getById/23


以下代码将23放入id变量中。


 @GetMapping("getById/_{id}_") public User getUserById(@PathVariable("id") String id) { //some logic } 

处理程序方法可以接受哪些参数?

控制器类中的方法可以使用某些类型的对象作为接受的参数。 然后Spring将自动实现它们。 例如,所需的HttpSession对象,安全性等。


 @GetMapping public User getUserById(HttpSession session) { //some logic //      } 

可以使用哪些对象(英语)


方法参数旁边还有哪些其他注释可供使用?
  • @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接口的容器


查看显示过程:


  1. 控制器在DispactherServlet中返回名称视图
  2. 名称映射到ViewResolver名称
  3. 如果ViewResolver了合适的ViewResolver ,它将返回在渲染时应使用的View。
  4. DS会将模型中的数据与视图一起传递,并显示输出(HTML页面)

什么是模型?

这是一个类对象,可实现Model接口并表示键/值对的集合。
模型的内容用于在视图中显示数据。
例如,如果View显示有关Customer对象的信息,则它可以引用模型键,例如customerNamecustomerPhone ,并获取这些键的值。
模型中的值对象也可以包含业务逻辑。

Source: https://habr.com/ru/post/zh-CN470566/


All Articles