实现一个自定义MVC
在Spring核心思想之 AOP:在自定义容器基础上实现AOP功能的容器上实现类似SpringMVC的功能。先分析下SpringMVC功能,在Spring MVC快速搭建初体验中:
1、web.xml配置的功能被实现了WebApplicationInitializer的类替代,即不用解析web.xml配置文件直接执行WebApplicationInitializer实现类即可。
2、关于访问路径与页面的匹配,直接在控制类中实现,也不用进行xml文件相关配置。
3、使用@EnableWebMvc使WebMvc可用。其中使用Java Bean的方式,配置了页面路径、处理方式等相关内容。
本质就是处理url匹配应用服务,如何匹配的问题。自定义实现中通过LFDispatcherServlet,其实现关系图如下:
在看看其类图:
其中:
1)handlerMappings(list)保存控制类中关于requestMapping的解析内容;
2)handlerAdapters(map)保存handlerMapping与handler(实际处理业务逻辑)的映射;
3)viewResolvers(list)保存渲染页面的resolver——即处理页面相关内容。
以上关于配置文件及页面等资源文件的处理结束后,就是等待用户访问请求。
接受访问请求:重写Servelet中的doPost的方法,具体内容如下:
这个方法的作用就是访问的url与handlerMappings中的匹配,如果匹配获取handlerAdapters中的处理对象,利用这个对象中的处理逻辑得到处理页面和模块,最后返回给客户端。
这个过程中就体现了dispatch,看下图:
最早使用Servelet时在配置文件中需要将servelet与其对应执行类一一映射,访问请求没问题就直接调用执行对象了。而MVC中映射在控制类中配置,同时多了一步就是将所有的映射全部保存在一个servelet中DispatcherServlet,这样一个全局的servelet就可以处理接受到的所有请求。
SpringMVC就是在表现层干了这么一件事,却优势多多——是不是精兵简政了。
看看@EnableWebMvc:
看类中的方法是不是与自定义中的的配置类似。在这个类中还有很多其他方法,比如addInterceptors(Spring MVC拦截器(Interceptor)使用)等增加额外的功能。
实现源码及测试代码:https://gitee.com/duckinpool/homework_2021/tree/master/1.3_springmvc
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2022-03-21 MongoDB集群高可用实战之复制集replica sets搭建