源码:git@gitee.com:dandan77/springmvc.git
什么是SpringMVC SpringMVC是一个WEB层、控制层框架,主要用来负责与客户端交互,业务逻辑的调用.
SpringMVC是Spring家族的一大组件.Spring整合SpringMVC可以做到无缝集成.
特点 简单易用性能佳。
为什么有了Servlet还要学SpringMVC 1:Servlet的开发配置相对麻烦,servlet特别多的时候web.xml文件将会非常臃肿
2:每个Servlet都只能处理一个功能,如果需要多个功能就需要开发多个Servlet,项目中存在大量Servlet显得臃肿。
3:获取请求参数 进行类型转换 封装数据到bean的 过程比较繁琐。
4:其他开发中不方便的地方,例如,乱码问题,数据格式处理,表单校验
SpringMVC的组件 1:前端控制器(DispatcherServlet)
本质上是一个Servlet,相当于一个中转站,所有的访问都会走到这个Servlet中,再根据配置进行中转到相应的Handler中进行处理,获取到数据和视图后,在使用相应视图做出响应。
2:处理器映射器(HandlerMapping)
本质上就是一段映射关系,将访问路径和对应的Handler存储为映射关系,在需要时供前端控制器查阅。
3:处理器适配器(HandlerAdapter)
本质上是一个适配器,可以根据要求找到对应的Handler来运行。前端控制器通过处理器映射器找到对应的Handler信息之后,将请求响应和对应的Handler信息交由处理器适配器处理,处理器适配器找到真正handler执行后,将结果即model和view返回给前端控制器
4:视图解析器(ViewResolver)
本质上也是一种映射关系,可以将视图名称映射到真正的视图地址。前端控制器调用处理器适配完成后得到model和view,将view信息传给视图解析器得到真正的view。
5:视图渲染(View)
本质上就是将handler处理器中返回的model数据嵌入到视图解析器解析后得到的jsp页面中,向客户端做出响应
6:图解如下:
文章图片
SpringMVC案例 1:创建项目,如图:
文章图片
文章图片
2:在web-inf下创建lib文件夹并导报
3:
文章图片
3:配置前端控制器
本质上是一个servlet,在当前web项目中配置该servlet
文章图片
生成SpringMVC的核心配置文件
SpringMVC默认会自动在web应用的WEB-INF目录下去寻找[前端控制器ServletName]-servlet.xml作为当前SpringMVC的核心配置文件。
创建这个文件,这个文件本身其实就是Spring的配置文件,所以导入Spring相关的约束信息,包括 beans、context、mvc
文章图片
创建处理器,编写代码
想要开发一个处理器,在其中的handlerRequest中编写代码处理请求,并将处理好的数据和目标视图封装到ModelAndView中返回
文章图片
配置处理器映射器中的路径和处理器的映射关系 和配置视图解析器
文章图片
开发视图
文章图片
发布应用,通过浏览器访问
【java|SpringMVC-核心组件】
文章图片
整体流程
文章图片
SpringMVC注解方式工作原理
1:当服务器启动时,先会加载web.xml,创建前端控制器Servlet,前端控制器加载并解析SpringMVC的配置文件。
2:当解析到包扫描时,扫描指定的包,并将含有@Controller注解的类解析为处理器
如果配置过mvc:annotation-driven/ 就会解析Spring-MVC注解
解析@RequestMapping(value="https://www.it610.com/my01/test01.action"),将指定的地址和当前方法的映射关系进行保存
当用户发出请求访问一个地址时,SpringMVC寻找该地址映射关系,如果存在,则找到响应处理器相应方法执行,如果找不到,则报404。
推荐阅读
- java|史上最强SpringMVC请求处理流程解析(通俗易懂)
- 技术交流|#SpringMvc 了解请求处理的流程,简化说明(图解)
- java|SpringMvc请求流程详解及核心组件(面试题)
- Spring|Spring MVC学习(3)—Spring MVC中的核心组件以及请求的执行流程
- 前端|前端食堂技术周刊第 44 期(Bun、Vue.js 挑战、React 状态管理的新浪潮、Can I DevTools、函数式编程)
- python|他来了!性能吊打 Node.js 和 Deno 的新一代 javaScript 运行时!
- 前端|越来越快的jsRuntime——Bun
- javascript|性能吊打 Node.js 和 Deno 的新一代 javaScript 运行时-Bun.js
- Java刷题记录|【刷题记录15】Java工程师丨腾讯面试真题(3)