一、SpringMVC概述

1、什么是Spring MVC ?

Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。

2、Spring MVC主要组件

  •  DispatcherServlet(前端控制器):作用:接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。
  •  HandlerMapping(处理器映射器):作用:根据请求的URL来查找Handler
  •  HandlerAdapter(处理器适配器):注意:在编写Handler的时候要按照HandlerAdapter要求的规则去编写,这样适配器HandlerAdapter才可以正确的去执行Handler。
  •  处理器Handler(需要程序员开发)
  • ViewResolver(视图解析器):作用:进行视图的解析,根据视图逻辑名解析成真正的视图(view)
  •  视图View(需要程序员开发jsp):View是一个接口, 它的实现类支持不同的视图类型(jsp,freemarker,pdf等等)

3、Spring MVC 请求处理流程

springboot使用适配器模式 springmvc中适配器的作用_mvc

  • 第⼀步:⽤户发送请求⾄前端控制器DispatcherServlet
  • 第⼆步:DispatcherServlet收到请求调⽤HandlerMapping处理器映射器
  • 第三步:处理器映射器根据请求Url找到具体的Handler(后端控制器),⽣成处理器对象及处理器拦截 器(如果 有则⽣成)⼀并返回DispatcherServlet
  • 第四步:DispatcherServlet调⽤HandlerAdapter处理器适配器去调⽤Handler
  • 第五步:处理器适配器执⾏Handler
  • 第六步:Handler执⾏完成给处理器适配器返回ModelAndView
  • 第七步:处理器适配器向前端控制器返回 ModelAndView,ModelAndView 是SpringMVC 框架的⼀个 底层对 象,包括 Model 和 View
  • 第⼋步:前端控制器请求视图解析器去进⾏视图解析,根据逻辑视图名来解析真正的视图。
  • 第九步:视图解析器向前端控制器返回View
  • 第⼗步:前端控制器进⾏视图渲染,就是将模型数据(在 ModelAndView 对象中)填充到 request 域
  • 第⼗⼀步:前端控制器向⽤户响应结果

4、Spring MVC优点

(1)可以支持各种视图技术,而不仅仅局限于JSP;
(2)与Spring框架集成(如IoC容器、AOP等);
(3)清晰的角色分配:前端控制器(dispatcherServlet) , 请求到处理器映射(handlerMapping), 处理器适配器(HandlerAdapter), 视图解析器(ViewResolver)。
(4) 支持各种请求资源的映射策略。

二、Spring MVC应用

1.拦截器(Inteceptor)使用

监听器、过滤器和拦截器对比

  • Servlet:处理Request请求和Response响应
  • 过滤器(Filter):对Request请求起到过滤的作⽤,作⽤在Servlet之前,如果配置为/*可以对所 有的资源访问(servlet、js/css静态资源等)进⾏过滤处理
  • 监听器(Listener):实现了javax.servlet.ServletContextListener 接⼝的服务器端组件,它随 Web应⽤的启动⽽启动,只初始化⼀次,然后会⼀直运⾏监视,随Web应⽤的停⽌⽽销毁

         作⽤⼀:做⼀些初始化⼯作,web应⽤中spring容器启动ContextLoaderListener,

         作⽤⼆:监听web中的特定事件,⽐如HttpSession,ServletRequest的创建和销毁;变量的创建、 销毁和修改等。可以在某些动作前后增加处理,实现监控,⽐如统计在线⼈数,利⽤ HttpSessionLisener等。

  • 拦截器(Interceptor):是SpringMVC、Struts等表现层框架⾃⼰的,不会拦截 jsp/html/css/image的访问等,只会拦截访问的控制器⽅法(Handler)。

从配置的⻆度也能够总结发现:serlvet、filter、listener是配置在web.xml中的,⽽interceptor是 配置在表现层框架⾃⼰的配置⽂件中的

在Handler业务逻辑执⾏之前拦截⼀次

在Handler逻辑执⾏完毕但未跳转⻚⾯之前拦截⼀次

在跳转⻚⾯之后拦截⼀次

springboot使用适配器模式 springmvc中适配器的作用_spring_02