Spring MVC- 原理

1.1 Spring MVC 基本特点

1.1.1 基本概念

  • Spring MVC是 Spring体系的轻量级Web MVC框架。
  • Spring MVC的核心Controller控制器,用于处理请求,产生响应。
  • Spring MVC基于Spring IOC容器运行,所有对象都被IOC管理。

1.1.2 在三层架构中的位置

1.1.3 Springmvc优点

序号 优点 描述
1 清晰的角色划分 前端控制器( DispatcherServlet) 、处理器映射器( HandlerMapping) 、处理器适配器( HandlerAdapter)、 视图解析器( ViewResolver)、 后端控制器( Controller)
2 与Spring 框架无缝集成 这是其它web框架不具备的
3 可扩展性好 可以很容易扩展,虽然几乎不需要
4 单元测试方便 利用 Spring 提供的 Mock 对象能够非常简单的进行 Web 层单元测试
5. 功能强大 RESTful、数据验证、格式化、本地化、主题等
6 jsp标签库 强大的 JSP 标签库,使 JSP 编写更容易

1.1.4 和Struts2比较

共同点

  • 它们都是表现层框架,都是基于 MVC 模型编写的。
  • 它们的底层都离不开原始 ServletAPI。
  • 它们处理请求的机制都是一个核心控制器。

区别

  • Spring MVC 的入口是 Servlet, 而 Struts2 是 Filter。
  • Spring MVC 是基于方法设计的,而 Struts2 是基于类,Struts2 每次执行都会创建一个动作类。所以 Spring MVC 会稍微比 Struts2 快些。
  • Spring MVC 使用更加简洁,同时还支持 JSR303, 处理 ajax 的请求更方便。
  • Struts2 的 OGNL 表达式使页面的开发效率相比 Spring MVC 更高些,但执行效率并没有比 JSTL 提升,尤其是 struts2 的表单标签,没有 html 执行效率高。

1.2 执行原理

1.2.1 前端控制器

Spring的web框架围绕DispatcherServlet设计。 DispatcherServlet的作用是将请求分发到不同的处理器

从Spring 2.5开始,使用Java 5或者以上版本的用户可以采用基于注解的controller声明方式。
Spring MVC框架像许多其他MVC框架一样, 以请求为驱动 , 围绕一个中心Servlet分派请求及提供其他功能,DispatcherServlet是一个实际的Servlet (它继承自HttpServlet 基类)

1.2.2 SpringMVC的原理

当发起请求时被前置的控制器拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,再将结果返回给请求者。

1.2.3 SpringMVC执行原理

实线表示SpringMVC框架提供的技术,不需要开发者实现,虚线表示需要开发者实现。

1.2.4 执行流程

1、DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。
假设请求的url为 : http://localhost:8080/SpringMVC/success

如上url拆分成三部分:http://localhost:8080服务器域名。
SpringMVC部署在服务器上的web站点。success表示控制器.
通过分析,如上url表示为:请求位于服务器localhost:8080上的SpringMVC站点的hello控制器。

2、HandlerMapping为处理器映射。

DispatcherServlet调用HandlerMapping,HandlerMapping根据请求url查找Handler。

3、HandlerExecutionChain表示具体的Handler(处理器)

其主要作用是根据url查找控制器,如上url被查找控制器为:success。

4、HandlerExecutionChain将解析后的信息传递给DispatcherServlet,如解析控制器映射等。

5、HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler。

6、Handler让具体的Controller执行。

7、Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView。

8、HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet。

9、DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。

10、视图解析器将解析的逻辑视图名传给DispatcherServlet。

11、DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图。

12、最终视图呈现给用户。

猜你喜欢

转载自blog.csdn.net/hxy1625309592/article/details/115190332