第一阶段-框架源码分析-SpringMVC
2020-07-20 23:03:21 0 举报
AI智能生成
SpringMVC相关笔记
作者其他创作
大纲/内容
SpringMVC应用
SpringMVC介绍
MVC设计模式介绍:MVC全名 (模型)Model-(视图)View-(控制)Controller的缩写,是一种用于设计创建 Web 应用程序表现层的模式。MVC 中每个部分各司其职:
Model(模型):模型包含业务模型和数据模型,数据模型用于封装数据,业务模型用于处理业务。
View(视图):通常指的就是我们的 jsp 或者 html。作用一般就是展示数据的。通常视图是依据模型数据创建的。
Controller(控制器):是应用程序处理用户交互的部分
SpringMVC的执行流程
接收请求->返回响应,跳转页面
SpringMVC工作流程(开发流程)
大致工作流程
1.配置DispatcherServlet的前端控制器
2.开发具体业务逻辑的Handler
3.xml配置Controller扫描器,配置springmvc三大件
4.将springmvc.xml路径告诉springmvc(DispatcherServlet)
请求处理流程
1.用户发送请求到前端控制器DispatcherServlet
2.DispatcherServlet收到请求后调用HandlerMapping处理器映射器
3.HandlerMapping处理器映射器根据传递的Url去找对应的Handler(后端处理器),生成处理器对象和拦截器对象(有则生成),一并返回给DispatcherServlet
4.DispatcherServlet调用HandlerAdapter处理器适配器去调用Handler
5.处理器适配器执行Handler逻辑
6.Handler执行完成后返回ModelAndView给处理器适配器
7.处理器适配器去给前端控制器DispatcherServlet返回ModelAndView
8.前端控制器请求视图解析器进行视图解析
9.视图解析器向前端控制器返回View
10.前端控制器进行视图渲染,就是将模型数据(在ModelAndView对象中)填充到request域中
11.前端控制器向用户响应结果
SpringMVC九大组件
HandlerMapping(处理器映射器):HandlerMapping 是用来查找 Handler 的,也就是处理器,具体的表现形式可以是类,也可以是方法。
HandlerAdapter(处理器适配器):HandlerAdapter 是一个适配器。因为 Spring MVC 中 Handler 可以是任意形式的,只要能处理请求即可。但是把请求交给 Servlet 的时候,由于 Servlet 的方法结构都是doService(HttpServletRequest req,HttpServletResponse resp)形式的,要让固定的 Servlet 处理方法调用 Handler 来进行处理,便是 HandlerAdapter 的职责。
HandlerExceptionResolver:HandlerExceptionResolver 用于处理 Handler 产生的异常情况。它的作用是根据异常设置ModelAndView,之后交给渲染方法进行渲染,渲染方法会将 ModelAndView 渲染成页面。
ViewResolver:即视图解析器,用于将String类型的视图名和Locale解析为View类型的视图,只有一个resolveViewName()方法。
RequestToViewNameTranslator:RequestToViewNameTranslator 组件的作用是从请求中获取 ViewName.因为 ViewResolver 根据ViewName 查找 View,但有的 Handler 处理完成之后,没有设置 View,也没有设置 ViewName,便要通过这个组件从请求中查找 ViewName。
LocaleResolver:ViewResolver 组件的 resolveViewName 方法需要两个参数,一个是视图名,一个是 Locale。LocaleResolver用于从请求中解析出 Locale,比如中国 Locale 是 zh-CN,用来表示一个区域。这个组件也是 i18n 的基础。
ThemeResolver:ThemeResolver 组件是用来解析主题的。
MultipartResolver:MultipartResolver用于上传请求,通过将普通的请求包装成 MultipartHttpServletRequest 来实现。
FlashMapManager:FlashMap 用于重定向时的参数传递,比如在处理用户订单时候,为了避免重复提交,可以处理完post请求之后重定向到一个get请求,这个get请求可以用来显示订单详情之类的信息。
配置文件中相关配置
springmvc.xml
配置扫描包路径
自动注册最合适的处理器映射器,处理器适配器(调用handler方法)
配置springmvc的视图解析器
静态资源配置的两种方案
web.xml
配置DispatcherServlet
请求参数绑定
默认支持ServletAPI作为方法参数
绑定基本参数
绑定基本参数,传参和形参名称不一致
绑定pojo类参数
绑定Pojo包装对象参数
绑定日期类参数
Restful风格支持
概念:Restful 是一种 web 软件架构风格,它不是标准也不是协议,它倡导的是一个资源定位及资源操作的风格。
和原本的请求url的区别
原本:http://localhost:8080/user/queryUserById.action?id=3
RestFul:http://localhost:8080/user/3
RESTful风格URL:互联网所有的事物都是资源,要求URL中只有表示资源的名称,没有动词。
RESTful风格资源操作:使用HTTP请求中的method方法put、delete、post、get来操作资源。分别对应添加、删除、修改、查询。不过一般使用时还是 post 和 get。put 和 delete几乎不使用。
RESTful风格资源表述:可以根据需求对URL定位的资源返回不同的表述(也就是返回数据类型,比如XML、JSON等数据格式)。
Restful应用场景
Get
Post
Put
Delete
与Ajax之间进行交互
@RequestBody: 用于获取请求体中的内容,如{"id":"1","name":"李四"}
@ResponseBody:用于直接返回,就不会再走视图解析器了,类似response.getWriter().write()
SpringMVC高级应用
拦截器(Inteceptor)使用
监听器、过滤器和拦截器对比
过滤器(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)。
总结:从配置的角度能够发现:servlet、filter、listener是配置在web.xml中的,而interceptor是配置在表现层框架自己的配置文件中的
拦截器的几个拦截的点
在Handler业务逻辑执行之前拦截一次
在Handler逻辑执行完毕但未跳转页面之前拦截一次
在跳转页面之后拦截一次
拦截器的执行流程
程序先执行preHandler()方法,如果该方法的返回值为true,则程序会继续向下执行处理器中的方法,否则将不再向下执行。
在业务处理器(即控制器Controller类)处理完请求后,会执行postHandle()方法,然后会通过DispatcherServlet向客户端返回响应
在DispatcherServlet处理完请求后,才会执行afterCompletion()方法。
多个拦截器的执行流程
从图中可以看出,当有多个拦截器同时工作时,它们的preHandle()方法会按照配置文件中拦截器的配置顺序执行,而它们的postHandle()方法和afterCompletion()方法则会按照配置顺序的反序执行
拦截器实战场景
处理multipart形式的数据
配置方面
实战场景
在控制器中处理异常
关键注解
@ControllerAdvice:定义全局异常捕获
@ExceptionHandler:定义拦截哪些异常
场景
单独Controller控制
全局控制
基于Flash属性的跨重定向请求数据传递
第一点:在方法形参中声明RedirectAttributes,调用redireceAttributes.addFlashAttubite()
第二点:在重定向到另一个方法的时候,另一个方法获取参数需要通过@ModelAttriubite("xx")注解获取
手写SpringMVC
具体流程和项目地址
整合SSM
主要注意几点
Mybatis整合Spring时,需要使用一个整合的依赖。配置中,sqlSessionFactory和Mapper代理对象交给Spring进行管理
Springmvc整合SSM时,Spring需要注册到web.xml中,也就是web容器中启动。
0 条评论
下一页