什么是SpringMVC:
SpringMVC 是Springframework中基于Java实现的Model-View-Controller框架,用于管理web应用程序的请求处理流程,并遵循MVC设计原则。
什么是MVC:
MVC是Model-View-Controller的缩写,是一种设计原则,广泛应用在web应用开发中。
Controller-控制器:接受http请求,解析、映射并转发给对应的model处理;中转站,获取model的返回结果返回给view;在SpringMVC中,@Controller注解标注的类起到controller的作用。
Model-模型:封装业务逻辑和数据,包括调用dao层,在JavaEE环境中,模型通常由Java bean或实体类组成,并通过dao层或Service层与数据库交互。
View-视图:是用户界面,负责展示和接受数据;将Model中的数据展示在View上;在web应用中可以是Thymeleaf页面,或jsp页面,HTML页面等。
SpringMVC工作流程:
借来一张图:
博客:【SpringMVC】SpringMVC原理和工作流程_springmvc原理及流程-CSDN博客
1、前端控制器(DispatcherServlet)-接受、分发请求,协助
所有的HTTP请求首先由Spring MVC的核心组件DispatcherServlet接收。
DispatcherServlet是整个MVC架构的入口点,它负责接收、分发请求,并协调其他组件来完成请求处理。
2、处理器映射器(HandlerMapping)-找到URL对应的controller
DispatcherServlet查询已注册的HandlerMapping组件,这些组件用于根据请求的URL找到对应的处理器(Controller)。HandlerMapping会将请求映射到相应的Controller及其处理方法上。在controller中使用@RequestMapping注解标识路径。
3、Controller处理请求:
当找到合适的Controller后,DispatcherServlet会调用该Controller中的相应方法进行业务逻辑处理。
Controller可以访问服务层(Service Layer)处理业务逻辑,并从数据访问层(DAO Layer)获取或更新数据模型(Model)。
4、ModelAndView创建:
处理完业务逻辑后,Controller通常会返回一个ModelAndView对象,其中包含了视图名称以及需要展示的数据模型。
5、视图解析器(ViewResolver):
DispatcherServlet接下来会将ModelAndView对象传递给ViewResolver,用于解析实际的视图技术(如JSP、Thymeleaf、FreeMarker等)及视图路径。
ViewResolver基于返回的视图名称选择并实例化一个具体的视图对象。
就是说DispatcherServlet不是亲自去解析视图,而是交给ViewResolver类。
6、视图渲染与响应:
最后,选中的视图对象会使用Controller提供的模型数据进行渲染,并生成最终的HTML页面或者其他类型的响应内容。
渲染完成后,DispatcherServlet将这个响应内容发送回客户端。
第1、2步相当于MVC中的C;3、4步相当于M;5、6步相当于V;
关于dispatcherServlet:
从上面的流程中,我们发现dispatcherServlet在springMVC 中启动非常重要的作用,接收、分发请求,中转,视图解析,将结果返回给客户端。提到dispatcherServlet,我们自然会想到Servlet。
Servlet为Web服务器提供了扩展HTTP协议请求和响应处理的能力。Servlet是一个实现了javax.servlet.Servlet接口或继承自javax.servlet.http.HttpServlet类的Java类,它可以接收并响应客户端发送的HTTP请求,执行相应的业务逻辑,并将结果以HTTP响应的形式返回给客户端。
dispatcherServlet我认为可以理解为是Servlet的一个变体,不仅具有Servlet的功能,还提供了分发请求,视图解析以及SpringMVC框架集成的能力。
以上就是我对SpringMVC原理和流程的梳理。经过本次梳理,再结合项目实战,对SpringMVC,DispatcherServlet,Servlet技术,MVC模型有了更加深刻理解。
无限感慨前人架构设计之伟大,无限感恩前人对软件设计做出的贡献,太厉害了。
其他:
1、关于SSH(Struts2-Spring-Hibernate)和SSM(SpringMVC-Spring-Mybatis)中Struts和SpringMVC的对比:
Struts是一个单独且非常著名的Java Web框架,主要用于处理MVC(Model-View-Controller)设计模式中的控制层。
Struts的主要作用是在Web应用开发中提供一种结构化的、可扩展的方式来组织和管理业务逻辑以及页面展示。它通过ActionServlet作为前端控制器接收HTTP请求,并根据配置文件(如struts-config.xml)将请求映射到相应的Action类进行处理。Struts提供了丰富的标签库来简化JSP页面的开发,同时具备异常处理、数据校验、国际化等功能。
而在SSM框架体系中,SpringMVC替代了Struts的角色,承担起处理HTTP请求、转发到Service层进行业务逻辑处理、并返回视图渲染的任务。虽然Struts曾经非常流行,但在现代Web开发中,由于Spring MVC以及其他轻量级框架的兴起,Struts的使用已相对减少。
2、SpringBoot中对SpringMVC的应用:
在Spring Boot中,虽然没有明确地配置和使用Spring MVC的XML配置文件,但Spring Boot默认集成了Spring Web MVC框架,因此处理HTTP请求时仍然是基于Spring MVC的机制。当你在Spring Boot应用中创建一个Controller来接收和处理HTTP请求时,实际上就是在利用Spring MVC的功能。