文章目录
- Spring MVC
- 1、Spring MVC介绍
- 2、Spring MVC的核心组件
- 3、Spring MVC工作流程
- 4、Spring MVC Restful风格的接口的流程?
- 5、Spring MVC请求参数的种类
- 1. 请求参数(传递json数据)
- 2. 日期类型参数传递
- 6、Spring MVC开发中用到的工具
- 7、Spring MVC中的异常处理器
- 8、拦截器
- Q:拦截器与过滤器区别
- Q:多拦截器的执行顺序
- 9、Spring MVC注解
- Q:@RequestBody、@RequestParam以及@PathVariable区别
Spring MVC
1、Spring MVC介绍
Spring MVC和Servlet技术类似,均属于 web层开发技术(表现层框架)。
Spring MVC是一种基于Java实现MVC模型的轻量化Web框架,相较于Servlet,使用更加简单、灵活性更强。
2、Spring MVC的核心组件
- DispatcherServlet:前置控制器,是整个流程控制的核心,控制其他组件的执行,进行统一调度,降低组件之间的耦合性,相当于总指挥。
- Handler:处理器,完成具体的业务逻辑,相当于 Servlet 或 Action。
- HandlerMapping:DispatcherServlet接收到请求之后,通过HandlerMapping将不同的请求映射到不同的Handler。
- HandlerInterceptor:处理器拦截器,是一个接口,如果需要完成一些拦截处理,可以实现该接口。
- HandlerExecutionChain:处理器执行链,包括两部分内容:Handler 和 HandlerInterceptor(系统会有一个默认的 HandlerInterceptor,如果需要额外设置拦截,可以添加拦截器)。
- HandlerAdapter:处理器适配器,Handler 执行业务方法之前,需要进行一系列的操作,包括表单数据的验证、数据类型的转换、将表单数据封装到 JavaBean 等,这些操作都是由 HandlerApater 来完成,开发者只需将注意力集中业务逻辑的处理上,DispatcherServlet 通过 HandlerAdapter 执行不同的 Handler。
- ModelAndView:装载了模型数据和视图信息,作为 Handler 的处理结果,返回给 DispatcherServlet。
- ViewResolver:视图解析器,DispatcheServlet 通过它将逻辑视图解析为物理视图,最终将渲染结果响应给客户端。
3、Spring MVC工作流程
- 客户端向服务端发送一次请求,这个请求会先到前端控制器DispatcherServlet(也叫中央控制器)。
- DispatcherServlet接收到请求后会调用HandlerMapping处理器映射器。由此得知,该请求该由哪个Controller来处理(并未调用Controller,只是得知)。
- DispatcherServlet调用HandlerAdapter处理器适配器,告诉处理器适配器应该要去执行哪个Controller。
- HandlerAdapter处理器适配器去执行Controller并得到 ModelAndView(数据和视图),并层层返回给DispatcherServlet。
- DispatcherServlet将ModelAndView交给ViewReslover视图解析器解析,然后返回真正的视图。
- DispatcherServlet将模型数据填充到视图中。
- DispatcherServlet将结果响应给客户端。
4、Spring MVC Restful风格的接口的流程?
Restful接口,响应格式是json,这就用到了一个常用注解:@ResponseBody 。加入了这个注解后,整体的流程上和使用 ModelAndView 大体上相同,但是细节上有一些不同:
- 客户端向服务端发送一次请求,这个请求会先到前端控制器 DispatcherServlet 。
- DispatcherServlet 接收到请求后会调用 HandlerMapping 处理器映射器。由此得知,该请求该由哪个 Controller 来处理。
- DispatcherServlet 调用 HandlerAdapter 处理器适配器,告诉处理器适配器应该要去执行哪个 Controller。
- Controller被封装成了ServletInvocableHandlerMethod,HandlerAdapter处理器适配器去执行invokeAndHandle方法,完成对 Controller的请求处理
- HandlerAdapter执行完对Controller的请求,会调用 HandlerMethodReturnValueHandler 去处理返回值,主要的过程:
①调用RequestResponseBodyMethodProcessor,创建 ServletServerHttpResponse(Spring 对原生 ServerHttpResponse 的 封装)实例。
②使用 HttpMessageConverter 的 write 方法,将返回值写入 ServletServerHttpResponse 的 OutputStream 输出流中。
③在写入的过程中,会使用 JsonGenerator(默认使用 Jackson 框架)对 返回值进行 Json 序列化。 - 执行完请求后,返回的ModealAndView为null,ServletServerHttpResponse里也已经写入了响应,所以不用关心View的处理。
5、Spring MVC请求参数的种类
补充:
1. 请求参数(传递json数据)
json数组、json对象(POJO)、json数组(POJO)
2. 日期类型参数传递
日期类型数据基于不同系统格式也不尽相同,接收形参时,根据不同的日期格式设置不同的接收方式。
6、Spring MVC开发中用到的工具
PostMan(可以用来进行接口的测试)
7、Spring MVC中的异常处理器
出现异常现象的常见位置与常见诱因如下:框架内部抛出的异常(因使用不合规导致)、数据层抛出的异常(因外部服务器故障导致,如服务器访问超时)、业务层抛出的异常(因业务逻辑书写错误导致,如遍历业务书写操作,导致索引异常等)、表现层抛出的异常(因数据收集、校验等规则导致,如不匹配的数据类型间导致异常)、工具类抛出的异常(因工具类书写不严谨不够健壮导致,如必要释放的连接长期未释放等)
解决思路:AOP思想(避免再每个方法中单独书写)。异常处理器,集中统一的处理项目中出现的异常。
8、拦截器
拦截器(Interceptor)是一种动态拦截方法调用的机制。主要在指定的方法调用前后执行预先设定后的的代码,阻止原始方法的执行。
Q:拦截器与过滤器区别
- 归属不同:过滤器属于Servlet技术;拦截器属于SpringMVC技术。
- 拦截内容不同:过滤器对所有访问进行增强;拦截器仅针对SpringMVC的访问进行增强。
Q:多拦截器的执行顺序
拦截器链的运行顺序:preHandle(与配置顺序相同,必定运行)、postHandle(与配置顺序相反,可能不运行)、afterCompletion(与配置顺序相反,可能不运行)。
9、Spring MVC注解
Q:@RequestBody、@RequestParam以及@PathVariable区别
- 区别
① @RequestParam用于接收url地址传参或表单传参;
② @RequestBody用于接收json数据(application/json);
③ @PathVariable用于接收路径参数,使用{参数名称}描述路径参数应用。 - 应用
① 后期开发中,发送请求参数超过1个时,以发送json格式数据为主,@RequestBody应用较广;
② 如果发送非json格式数据,选用@RequestParam接收请求参数;
③ 采用RESTful进行开发,当参数数量较少时,例如1个,可以采用@PathVariable接收请求路径变量,通常用于传递id值。