SpringMVC知识
一、SpringMVC流程:
-
什么是SpringMVC?
SpringMVC是一个基于Java实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model、View、Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的及部分,简化开发,减少出错,方便组内开发人员之间的配合。
-
啥是MVC设计模式?
- MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范。
- MVC是业务逻辑、数据、显示分离的方法来组织代码
- MVC主要作用是降低了视图与业务逻辑间的双向耦合
- MVC不是一种设计模式,MVC是一种架构模式,当然不同的MVC存在差异。
Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据Dao)和服务层(行为Service).
**View(视图):**负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。
**Controller(控制器)😗*接收用户请求,委托给模型进行处理,处理完毕把返回的模型数据返回给试图,由试图负责展示。也就是说控制器做了个调度员的工作。
常见的服务器端MVC框架:Struts、SpringMVC、ASP.NET MVC、Zend Framework、JSF;
**常见的前端MVC框架:**vue、angularjs、react、backbone;
由MVC演化出的另外一些模式:MVP、MVVM…
-
SpringMVC特点:
-
轻量级,简单易学,简洁灵活
-
高效,基于请求响应的MVC框架
-
与Spring兼容性好,无缝结合
-
约定优于配置
-
功能强大:RestFul、数据验证、格式化、本地化、主题等
-
角色分配清晰:前端控制器(dispatcherServlet)、请求到处理器映射(handlerMapping)、处理器适配器(HandlerAdapter)、视图解析器(ViewResolver)
最重要的是现在用的人很多,使用的公司也比较多
-
-
SpringMVC组件:
- 前端控制器(dispatcherServlet)作用:接收请求,响应结果,相当于转发器,有了DispatcherServlet就减少了其他组件之间的耦合度。
- 处理器映射器(HandlerMapping):作用:根据其你去的url查找Handler(处理程序)
- 处理器映射器(HandlerAdapter)作用:按照特定规则去执行Handler(处理程序)
- 处理器Handler:这个需要我们自己编写哈,数据处理的逻辑代码
- 视图解析器(ViewResolver):进行视图解析,根据逻辑视图名解析成真正的视图(View)
- 视图View:View是一个接口,实现类支持不同的View类型
-
SpringMVC执行流程:
-
DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。
假设:请求的URL为:http://localhost:8080/SpringMVC/hello
这个URL会被拆分为三部分:
- http://localhost:8080服务器域名
- SpringMVC部署在服务器上的Web站点
- hello表示控制器
所以:通过分析,用户的请求时:请求位于服务器localhost:8080上的SpringMVC站点的hello控制器
-
HandlerMapper为处理器映射。DispatcherServlet调用HandlerMapper,HandlerMapper根据请求的url查找自己维护的服务列表信息,在列表信息中找到相应的Handler,如果服务列表中没有找到这个URL的key,则该程序不能处理用户的请求,则返回特定数据,前端控制器接收之后给用户响应404。如果在服务列表中找到了该url的key,则说明请求可以正常执行,将该方法的对象返回给前端控制器。
-
DispatcherServlet前端控制器将返回的方法进行接收,并交给HandlerAdapter(处理器适配器)执行.
-
HandlerAdapter根据方法的类型(XML配置文件/注解/其他方法),HandlerAdapter在自己的处理器库中挑选一个最为合适的处理器去执行该方法,当处理器执行该方法时表示业务开始,将会让具体的Controller进行执行,并将执行结果返回给HandlerAdapter,HandlerAdapter将最终的处理结果通过ModelAndView对象进行包裹,返回给DispatcherServlet.
-
DispatcherServlet调用视图解析器(ViewResolver)对View中的数据进行解析,拼接一个完整的页面路径,前缀/hello后缀
-
视图解析器将解析完的数据传给DispatcherServlet
-
DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图进行渲染,将数据与页面进行绑定,最终将视图呈现给用户
ModeAndView:Model:代表服务器返回的业务员数据;View:服务器端返回的页面的名称
-
-
SpringMVC常用注解:
- @RequestMapping:用于处理请求url映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。以及衍生的@GetMapping、@PostMapping、@PutMapping、@DeleteMapping
- @RequestBody:注解实现接收http请求的json数据,将json转换为java对象
- @ResponseBody:注解实现将controller方法返回对象转化为json对象响应给客户端
- @RestController注解相当于**@ResponseBody**+@Controller,表示的是表现层,用在类上,一般SpringMVC中的控制器一般要加@Controller注解,如果在以前,前后端不分离,Controller里面的handler(处理程序)返回的是某个页面;但到了现在,比较流行前后端分离,前台服务器可能是vue,也可能是别的前端框架,前端框架和后端交互式通过json来交互的,所以需要在Controller层中的handler要返回json数据给前台,要转换成前台就得用@ResponseBody注解,每个方法基本都加,未免有些程序冗余啊,不如直接在类上加@ResponseBody注解,后来@ResponseBody注解可以和@Controller注解合并成一个@RestController注解。
- @RequestParam:绑定单个请求参数值
- @PathVariable:绑定URL模板变量值
-
SpringMVC转发和重定向:
转发:在返回值前面加“forward”,转发是由服务器端进行的页面跳转
转发的特点:
- 地址栏不发生变化,显示的是上一个页面的地址
- 请求次数:只有1次请求
- 请求域中数据不会丢失
重定向:在返回值前面加“redirect”,重定向是客户端浏览器进行的页面跳转
重定向的特点:
- 地址栏会发生变化,显示新的地址
- 请求次数:两次及以上以上
- 请求域中的数据会丢失,因为是两次请求
各位加油嗷~~!