作者:Insist--
个人主页:insist--个人主页
作者会持续更新网络知识和python基础知识,期待你的关注
前言
本文将讲解Spring MVC是什么,它的优缺点与九大组件,以及它的请求流程与常用的注解。
一、Spring MVC是什么?
Spring MVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。
二、Spring MVC的优缺点
SpringMVC是一个典型的轻量级MVC框架,在整个MVC架构中充当控制器框架,相对于之前的struts2框架,SpringMVC运行更快,其注解式开发更高效灵活。
1、优点
①拥有强大的模块化功能,代码可读性高;
②可以通过 POJO (Plain Ordinary Java Object,简单的Java对象)对测试数据进行简单的注入;
③可以灵活使用DI(DependencyInjection,依赖注入,或者叫控制反转);
④不同模块间是低耦合的(上面四点优点归根结底还是耦合度低)。
2、缺点
①对于新手来说,实现的难度比较大;
②学习曲线比较陡峭,即入门比较难。
三、Spring MVC的九大组件
1、HandlerMapping
根据Request找到相应的处理器。因为Handler(Controller)有两种形式,一种是基于类的Handler,另一种是基于Method的Handler(也就是我们常用的)。
2、HandlerAdapter
调用Handler的适配器。如果把Handler(Controller)当做工具的话,那么HandlerAdapter就相当于干活的工人。
3、HandlerExceptionResolver
对异常的处理。
4、ViewResolver
用来将String类型的视图名和Locale解析为View类型的视图。
5、RequestToViewNameTranslator
有的Handler(Controller)处理完后没有设置返回类型,比如是void方法,这是就需要从request中获取viewName。
6、LocaleResolver
从request中解析出Locale。Locale表示一个区域,比如zh-cn,对不同的区域的用户,显示不同的结果,这就是i18n(SpringMVC中有具体的拦截器LocaleChangeInterceptor)。
7、ThemeResolver
主题解析,这种类似于我们手机更换主题,不同的UI,css等。
8、MultipartResolver
处理上传请求,将普通的request封装成
MultipartHttpServletRequest。
9、FlashMapManager
用于管理FlashMap,FlashMap用于在redirect重定向中传递参数。
四、Spring MVC请求流程
在Web应用程序中,请求是必不可少的,每次请求由用户(客户端)发起,到用户(客户端)接收到响应结束,下图展示了一个请求在Spring MVC中所经历的每个流程:
下面我将对图中的每个流程做个讲解:
1、请求离开浏览器时(上图①),会带有用户所请求内容的信息,比如请求的URL和提交的表单信息。
2、然后进入到请求的第一站,即Spring的DispatcherServlet,它的任务是将请求发送给Spring MVC控制器。
3、因为在应用程序中会有多个控制器,因此DispatcherServlet会查询一个或多个处理器映射(handler mapping),处理器映射会根据请求所携带的URL来确定应该将请求发送给哪个控制器(上图②)。
4、确定好控制器后,DispatcherServlet会将请求发送给确定好的控制器,然后等待控制器处理用户提交的信息,不过一般情况下,控制器本身几乎不处理工作,而是将业务逻辑委托给一个或多个服务对象进行处理(图中的③)。
5、控制器完成业务逻辑处理后,通常会产生一些模型(Model)信息,这些信息需要返回给用户并在浏览器上显示,为了更友好的展示这些信息,比如以html形式展示,我们需要将信息发送给一个视图(View),比如JSP。
6、控制器所做的最后一件事就是将模型数据打包,并且标示出用于渲染输出的视图名。它会将请求连同模型和视图名发送回DispatcherServlet(上图④),不过控制器只会返回一个视图的逻辑名称,而不是返回具体的某个特定视图,这个逻辑名称将会用来查找产生结果的真正视图。DispatcherServlet会使用视图解析器(view resolver)来将逻辑视图名匹配为某个特定视图(上图⑤),比如JSP或者Thymeleaf。
7、请求的最后一站是视图的实现(上图⑥),在这里视图将使用模型数据渲染输出,这个输出会通过响应对象传递给用户/客户端(上图⑦)。
五、Spring MVC常用的注解有哪些?
1、@RequestMapping
用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。
2、@RequestBody
注解实现接收http请求的json数据,将json转换为java对象。
3、@ResponseBody
注解实现将conreoller方法返回对象转化为json对象响应给客户。
版权归原作者 Insist-- 所有, 如有侵权,请联系我们删除。