12|再回首:如何实现Spring MVC?
MVC 重点回顾
那我们在课程中是怎么实现 MVC 的呢?
- 深入了解
- 翻译
- 解释
- 总结
Spring MVC是Spring框架的核心组成部分之一,负责实现Web应用程序的模型视图控制器模式。本文通过回顾MVC的重点内容,介绍了如何在Spring框架中实现MVC。首先,利用Servlet机制实现了原始的MVC结构,然后将MVC和IoC结合,实现了在Servlet容器启动时向上下文环境注入IoC容器,使得在Servlet中可以访问IoC容器中的Bean。接着,通过解耦MVC结构,独立出请求处理器,并使用注解方式将Web请求定位到后台处理的类和方法中,实现了Spring的RequestHandler。此外,还实现了数据参数的自动转换和数据绑定功能,以及将处理结果返回到前端的功能。文章还提出了一些思考题,引导读者深入思考和交流讨论。总的来说,本文通过具体的实现细节和思考题,帮助读者更好地理解了Spring MVC的实现原理和技术特点。
《手把手带你写一个 MiniSpring》,新⼈⾸单¥59
全部留言(4)
- 最新
- 精选
- Geek_320730https://github.com/kuifir/practice/tree/master/miniSpring 跟着老师每节课程跟着学完都很有收获,完成一个课程的内容并且测试成功后也很有成就感。
作者回复: 动手是诀窍,事情要经过手才行。
2023-04-11归属地:北京4 - 欧阳利怎么感觉越到后面,内容越简单了
作者回复: 这就是我希望的效果,跟一遍之后就懂了Spring框架。
2023-04-11归属地:广东1 - peter请教老师几个问题: Q1:SpringMVC与Spring是什么关系? SpringMVC是Spring的一个子模块或子组件吗?或者两者不是包含关系,是平等、相互独立的两个东西? Q2:SpringMVC是基于servlet,可以基于其他的吗? Q3:SpringMVC需要依赖于一个容器,比如tomcat,但spring不需要依赖tomcat,是这样吗? Q4:servlet具体是一个进程还是一个线程? Redis速度快,因为是单线程,现在servlet处理全部请求,是不是类似于redis的单线程? Q5:前后盾分离开发,前端用vue,应该会有一个“vue引擎”一类的东西。前端开发完成后,页面会打包放到后端idea项目中,那么,此时,后端会有一个“vue引擎”吗? Q6:wac访问不到servlet,是不需要吗?还是技术上不可行?可以把wac放到ServletContext中,为什么不可以把DispatchServlet放到wac中?
作者回复: 一并回答如下。spring mvc是spring的一个模块。它的实现是用的servlet,也可以使用filter来实现的。Spring mvc是web框架,所以要在web容器具体来讲是servlet容器如Tomcat中运行。Spring是一个大体系,狭义的核心Spring IoC是不依赖于Tomcat的。servlet是一个线程,不是单线程的。前后端分离了,后端不需要vue引擎的。wac和dispatcherservlet的关系是上下游的关系或者说是上下层的关系,软件体系结构是一层层的,一般是上层访问下层。Visual Basic的发明人说过:软件是一个地质学堆积过程。
2023-04-08归属地:北京2 - Jay请教老师,有个问题一直没想明白,RequestMappingHandlerMapping和RequestMappingHandlerAdapter都是配置在applicationContext.xml里面由IOC容器管理的,DispatcherServlet中通过wac.getBean()方法获取,这一步没有问题。但是,RequestMappingHandlerMapping依赖的WebApplicationContext必须是MVC容器(initMapping方法中需要获取MVC容器中维护的controllerNames),我一直没有看到RequestMappingHandlerMapping依赖的这个wac是如何注入的。master代码里面实现了ApplicationContextAware接口,但是我想即便实现了这里也只能得到IOC容器对应的ApplicationContext,好像依然不能解决这个问题?不知道到我理解的有没有问题?
作者回复: refresh的时候初始化这两个东西: protected void Refresh() { initHandlerMappings(this.webApplicationContext); initHandlerAdapters(this.webApplicationContext); initViewResolvers(this.webApplicationContext); } 而这个wac是在dispatcherservlet init的时候创建的: public void init(ServletConfig config) throws ServletException { super.init(config); this.parentApplicationContext = (WebApplicationContext) this.getServletContext().getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE); this.sContextConfigLocation = config.getInitParameter("contextConfigLocation"); this.webApplicationContext = new AnnotationConfigWebApplicationContext(this.sContextConfigLocation,this.parentApplicationContext);
2023-04-07归属地:美国