我们学习过很多的Java开发框架,而Spring MVC是其中极具代表性的一个高度可配置的框架,自己想要写一个框架的话,Spring MVC无疑是一个好的选择。本文为大家讲一讲写Spring MVC框架步骤。
在SpringBoot之前,几乎所有的 Web 应用都是已 web.xml 为入口的,Spring MVC 也不例外,学习过 Servlet 的应该都理解,Spring MVC 其实就是对 Servlet 接口,Servlet 规范的一种实现。Servlet 提供了五个接口,其中两个接口最为核心,分别是 init 方法和 service 方法,其实写Spring MVC框架步骤没有你们想的那么复杂,仅三步就可以搞定,费话不多说,直接进入正题,先来看一下写Spring MVC框架步骤1。
一、在写Spring MVC框架之前,必须要知道Spring MVC的工作流程及其核心组件:
1.用户发送请求至前端控制器DispatcherServlet。
2.DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3.处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4. DispatcherServlet通过HandlerAdapter处理器适配器调用处理器。
5.执行处理器(Controller,也叫后端控制器)。
6.Controller执行完成返回ModelAndView。
7.HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
8.DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
9.ViewReslover解析后返回具体View。
10.DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。
11.DispatcherServlet响应用户。
从上面可以看出,DispatcherServlet有接收请求,响应结果,转发等作用。有了DispatcherServlet之后,可以减少组件之间的耦合度。
二、明确Spring MVC设计的思路
由于是自己写的Spring MVC框架,所以在功能上肯定是有所欠缺的。可以根据自己的需求选择最重要的功能来开发。
1、读取配置
SpringMVC本质上是一个Servlet,这个 Servlet 继承自 HttpServlet。FrameworkServlet负责初始化SpringMVC的容器,并将Spring容器设置为父容器。
为了读取web.xml中的配置,我们用到ServletConfig这个类,它代表当前Servlet在web.xml中的配置信息。通过web.xml中加载我们自己写的MyDispatcherServlet和读取配置文件。
2、初始化阶段
在前面我们提到DispatcherServlet的initStrategies方法会初始化9大组件,但是这里将实现一些SpringMVC的最基本的组件而不是全部,按顺序包括:
-加载配置文件
-扫描用户配置包下面所有的类
-拿到扫描到的类,通过反射机制,实例化。
-初始化HandlerMapping
3.运行阶段
每一次请求将会调用doGet或doPost方法,所以统一运行阶段都放在doDispatch方法里处理,它会根据url请求去HandlerMapping中匹配到对应的Method,然后利用反射机制调用Controller中的url对应的方法,并得到结果返回。按顺序包括以下功能:
-异常的拦截
-获取请求传入的参数并处理参数
-通过初始化好的handlerMapping中拿出url对应的方法名,反射调用
不管是 Spring 还是 Spring MVC,又或是 Mybatis,Spring Data等等。其实在阅读源码或者自己实现的过程中会发现,这些提高开发效率的,封装型的框架,从头到尾离不开的就是 Java 的反射以及 Java 的动态代理。
结合反射以及AOP的思想,根据上面 Servlet 接口和 Spring mvc 流程的介绍以及平时对Spring MVC的使用,即使我们不看 Spring MVC 的源码其实也能把我们经常使用的功能简单的实现了。这里对于HandlerMapping 和 HandlerAdapter 我们也不需要设计的如此复杂,只需要实现我们平时最常用的一种就好。
本文我们只介绍思路,由于代码量过于庞大就不细细罗列出来了。总的来说,我们自己写Spring MVC框架步骤就和上面的三个步骤大同小异,了解Spring MVC框架的基本结构和工作原理,然后明确自己的设计思路,最后是代码的实现。至于代码部分,在本站的Spring MVC视频教程中有详细的讲解,想自己写一个Spring MVC框架的小伙伴绝不容错过哦!
QCode09-04 14:38
Code大师09-04 14:50
不写代码你养我啊08-23 11:14
不写代码你养我啊09-17 18:02
要学习了06-18 18:13