SpringMVC详情

news/2024/11/19 7:28:18/

JavaEE体系结构包括四层,从上到下分别是应用层、Web层、业务层、持久层。Struts和SpringMVC是Web层的框架,Spring是业务层的框架,Hibernate和MyBatis是持久层的框架。

为什么要使用SpringMVC?

很多应用程序的问题在于处理业务数据的对象和显示业务数据的视图之间存在紧密耦合,通常,更新业务对象的命令都是从视图本身发起的,使视图对任何业务对象更改都有高度敏感性。而且,当多个视图依赖于同一个业务对象时是没有灵活性的。

SpringMVC是一种基于Java,实现了Web MVC设计模式,请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将Web层进行职责解耦。基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,SpringMVC也是要简化我们日常Web开发。


Spring MVC实现原理

核心组件

  • DispatcherServlet:前置控制器,负责调度其他组件的执行,可以降低不同组件之间的耦合性,是整个Spring MVC的核心模块
  • Handler:处理器,完成具体的业务逻辑,相当于Servlet
  • HandlerMapping:DispatcherServlet是通过 HandlerMapping把请求映射到不同的Handler
  • HandlerInterceptor:处理器拦截器,是一个接口,如果我们需要进行一些拦截处理,可以通过实现该接口完成
  • HandlerExecutionChain:处理器执行链,包括两部分内容:Handler和HandlerInterceptor(系统会有一个默认的HandlerInterceptor,如果有额外拦截处理,可以添加拦截器进行设置)
  • HandlerAdapter:处理器适配器,Handler执行业务方法之前,需要进行一系列的操作包括表单的数据验证、数据类型转换、把表单数据封装到POJO等,这些一系列的操作都是由HandlerAdapter完成,DispatcherServlet通过HandlerAdapter执行不同的Handler
  • ModelAndView:封装了模型数据和视图信息,作为Handler的处理结果,返回给DispatcherServlet
  • ViewResolver:视图解析器,DispatcherServlet通过它把逻辑视图解析为物理视图,最终把渲染的结果响应给客户端

工作流程

  1. 客户端请求被DispatcherServlet接收
  2. 根据HandlerMapping映射到Handler
  3. 生成Handler和HandlerInterceptor
  4. Handler和HandlerInterceptor以HandlerExecutionChain的形式一并返回给DispatcherServlet
  5. DispatcherServlet通过HandlerAdapter调用Handler的方法完成业务逻辑处理
  6. 返回一个ModelAndView对象给DispatcherServlet
  7. DispatcherServlet把获取的ModelAndView对象传给ViewResolver视图解析器,把逻辑视图解析成物理视图
  8. ViewResolver返回一个View进行视图渲染(把模型填充到视图中)
  9. DispatcherServlet把渲染后的视图响应给客户端

Spring MVC数据绑定

  • 数据绑定:在后台业务方法中,直接获取前端HTTP请求中的参数
  • HTTP请求传输的参数都是String类型的,Handler业务方法中的参数是开发者指定的参数类型,比如int,Object,所以需要进行数据类型的转换
  • Spring MVC的HandlerAdapter组件会在执行Handler业务方法之前,完成参数的绑定,开发者直接使用即可

Spring MVC视图层解析

调用Web资源给域对象传值

  • page
  • request
  • session
  • application

业务数据的绑定是指把业务数据绑定给JSP域对象,业务数据的绑定是由ViewResolver来完成的,开发时,我们先添加业务数据,再交给ViewResolver来绑定,我们重点是学习如何添加业务数据,Spring MVC提供了下面几种方式来添加业务数据:

  • Map
  • Model
  • ModelAndView
  • @SessionAttribue
  • @ModelAttribute
  • Servlet的API
     

http://www.ppmy.cn/news/89203.html

相关文章

Spring Cloud Feign 是什么?如何使用它来简化 RESTful 调用?

Spring Cloud Feign 是什么?如何使用它来简化 RESTful 调用? 在分布式系统中,服务之间的通信是非常常见的场景。通常情况下,服务之间的通信是通过 RESTful API 实现的。但是,手动编写 RESTful 调用代码非常繁琐&#…

云渲染平台为什么越来越多的效果图公司开始使用?

随着3dmax版本的不断更迭,包括常用的V-Ray渲染器和Corona渲染器的不断更新,室内设计行业对于 效果图的渲染要求越来越高。而要求更高的渲染精度和更真实的渲染效果,所需要付出的代价则是不断增长的参数,这会使渲染一张效果图的时间…

vscode插件推荐

Vuter vue代码高亮区分VueHelper 代码提示vue3-snippets-for-vscode 生成vue3模板vue3-snippets 生成vue模板Vue VSCode Snippets 生成vue模板Vue Language Features (Volar) vue高亮区分Vue 3 Support - All In One 生成vue模板Vue 2 Snippets 生成vue模板vscode-icons 文件图…

2023-05-26 mysql列存储引擎-外连接相比内连接过于耗时-分析

摘要: 外连接相比内连接过于耗时,本文记录其分析过程 参考: https://en.wikipedia.org/wiki/Venn_diagram 查询SQL 外连接: SELECTa.ROW_IDFROMc1md_bank_acct aLEFT JOIN (SELECTxx.account_id,xx.fiscal_date,xx.balanceFROM(SELECTaccount_id,MAX(fiscal_date) fiscal_da…

C++ 代码整洁之道

NOTICE: 这篇文章的框架条目来自《C代码整洁之道:C17可持续软件开发模式实践》,作者: [德] 斯提芬罗特。书籍原名"Clean C: Sustainable Software Development Patterns and Best Practices with C 17"。 文章目录 编码基本原则保持简单和直接…

三网91话费API接口源码分享

今天给大家分享一个小项目:话费CPS,也就是代充服务。 与我们日常的充值方式(快充)不同,今天要讲的这种充值方式属于“慢充”。 我们平时需要充值的时候,大都是通过微信、支付宝、营业厅等官方渠道进行充值…

虹科干货|创新求变:虹科Redis企业版数据库驱动金融实时业务

BDO调查显示,43%的金融企业正计划全力加速数字化转型,互联网巨头与金融科技初创公司正在颠覆传统。”与此同时,客户行为、消费习惯和期望持续变化,以客户为中心的快速金融服务已成趋势,企业微服务、云原生应用亟需一组…

2023年电工杯 | 2023年电工杯数学建模数学建模竞赛思路(A题、B题)

电工数学建模竞赛 “中国电机工程学会杯”全国大学生电工数学建模竞赛是全国性大学生学科竞赛活动,目的在于按照紧密结合教学实际,着重基础、注重前沿的原则,促进电气类专业建设;引导学生注重动手能力、创新能力和协作精神的培养;提高学生针对实际问题进行数学建模及分析的…