当前位置: 首页 > news >正文

Spring 基础核心 - SpringMVC 入门与请求流程

本文是介绍 Spring 技术的第四篇入门级文章,前面已经介绍了 Spring 入门案例、IOC 容器、AOP 切面编程。

阅读本文了解:

  • 无 MVC 时如何开发 web 项目
  • 前后端分离来源
  • MVC 架构模式
  • Spring MVC 请求流程

引言

早期的 web 应用开发开发存在一个极其普遍且致命的问题:代码的混乱与耦合。在 MVC 普及之前,开发者使用 JSP 、PHP 等技术开发 web 应用,那会的技术会把代码都混在一起,比如一个登录功能的代码是这样:

<%@ page import="java.sql.*" %><html><body><h1>Login</h1><%// w问题1:业务逻辑、数据访问、UI展示代码全部纠缠在一起String username = request.getParameter("username");String password = request.getParameter("password");// 问题2:直接在页面里写数据库连接和查询(数据访问逻辑)Connection conn = null;try {conn = DriverManager.getConnection("jdbc:mysql://localhost/mydb", "user", "pass");Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery("SELECT * FROM users WHERE username='" + username + "' AND password='" + password + "'");// 问题3:在页面里判断业务逻辑if (rs.next()) {// 痛点4:直接在页面里输出HTML(视图逻辑)out.println("<h2>Welcome, " + username + "!</h2>");} else {out.println("<h2>Login Failed! Please try again.</h2>");}} catch (SQLException e) {out.println("<h2>System Error!</h2>");} finally {// ... 关闭连接}%></body></html>

这种职责混乱、高度耦合的代码非常难以维护,所谓“牵一发而动全身”。

MVC 架构的出现拯救了这种混乱的局面,像一把利剑一样强制分离关注点,拆分为 Model(数据/业务)、View(视图)、Controller(控制器)三部分,各司其职,前端和后端的岗位源自于 MVC 的架构模式。可以说,没有MVC奠定的“分离”思想,就不会有现代的前后端分离。前端专注于 View(视图)职责,后端专注于 Model 和 Controller 职责,并行开发,互不干扰。

看一张 Spring 的架构图:

作为 Spring 使用者,Core Container 模块应该都不陌生,@Bean 注解,Context 上下文类等都见过,而 AOP 或多或少也熟悉,问题来了,这两个模块是 Spring 的底层模块,如何利用它们构建上层应用?如 web 引用?

针对上层的 Web 应用,SpringMVC 诞生了,它也是 Spring 技术栈中最为重要的一个框架。

所以为了更好的帮助你串联整个知识体系,我列出了几个问题,通过如下几个问题帮你深入浅出的构建对SpringMVC的认知

  • Java技术栈的 Web 应用是如何发展的?
  • 什么是 MVC,什么是 SpringMVC ?
  • SpringMVC 主要的请求流程是什么样的?
  • SpringMVC 中还有哪些组件?
  • 如何编写一个简单的 SpringMVC 程序呢?

什么是 MVC?

MVC英文是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计规范。本质上也是一种解耦。

软件设计规范:为了解决某一类反复出现的问题,总结出一套被广泛认可的、行之有效的结构和模式。具有结构性的特点:通常定义了组件的角色、职责以及它们之间的交互方式,很像在某类问题、某个场景下的方法论。相似的概念是设计思想,这两个概念经常互用,不过设计思想更抽象一点。

设计思想:软件设计的核心原则和理念,回答的是“为什么要这么设计?”的问题。具有普适性,不局限于某个具体的问题或场景,可以应用在各种场景。比如高内聚、低耦合就是一种设计思想,任何编程语言都可以用。

回归到 MVC 学习,MVC 三个重点概念:模型、视图、控制器。看的出来这是一种数据、界面显示、业务逻辑分离的方法。

  • Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。
  • View(视图)是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。
  • Controller(控制器)是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据

什么是 Spring MVC ?

上述介绍了 MVC 是一种设计思想,本质上是个抽象的东西,类似于“蓝图”,开发者无法直接使用。Spring MVC 便是基于 MVC 思想设计出来的开发框架,一个具体、可运行的产品,或者理解成一套“web应用开发工具包”,Spring MVC 目的是简化 Java 栈的 Web 开发。

Spring MVC 概念并不难理解,那 Spring MVC 是如何工作的呢?

Spring MVC 请求流程

看Spring MVC 的流程要将前后端串起来看,不能仅思考后端流程。

它的核心工作流程可以概括为:

  1. 首先用户发送请求——>DispatcherServlet前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行 处理,作为统一访问点,进行全局的流程控制;
  2. DispatcherServlet——>HandlerMapping, HandlerMapping 将会把请求(如 user/list)映射为 HandlerExecutionChain 对象(包含一 个Handler 处理器(页面控制器)对象、多个HandlerInterceptor 拦截器)对象,通过这种策略模式,很容易添加新的映射策略;
  3. DispatcherServlet——>HandlerAdapter,HandlerAdapter 将会把处理器包装为适配器(适配器设计模型,便于调用),从而支持多种类型的处理器, 即适配器设计模式的应用,从而很容易支持很多类型的处理器;
  4. HandlerAdapter——>处理器功能处理方法的调用,HandlerAdapter 将会根据适配的结果调用真正的处理器的功能处理方法(Controller 方法),完成功能处理;并返回一个ModelAndView 对象, 前后端分离项目返回的是一个 业务对象(如:List );
  5. ModelAndView 的逻辑视图名——> ViewResolver,ViewResolver 将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术,**如果是前后端分离项目,此步骤跳过,**没有 ModelAndView 对象,那就没东西解析;
  6. View——>渲染,View 会根据传进来的Model 模型数据进行渲染,此处的Model 实际是一个Map 数据结构,因此很容易支持其他视图技术;
  7. 返回控制权给DispatcherServlet,由DispatcherServlet 返回响应给用户,到此一个流程结束。

一个基本的请求流程就是如此实现,如果涉及到Filter、文件上传还会多一两步流程,不做深入学习。

参考文章

https://pdai.tech/md/spring/spring-x-framework-springmvc.html#spring-mvc%E6%A1%88%E4%BE%8B

http://www.dtcms.com/a/435554.html

相关文章:

  • 【小沐学GIS】基于C++瓦片地图下载工具(高德/天地图/谷歌/必应/OSM/MapBox/ArcGIS)第十三期
  • 东方建设集团有限公司网站外国公司做网站
  • 微信里面如何做网站WordPress discuz 仿站
  • 【RabbitMq】七种工作模式
  • 官方网站下载cad建设部监理协会网站
  • 万方智能体投票火热进行中~
  • 不可见系统(Invisibility)
  • 建设读书网站的意义黄冈网站推广平台
  • SpringAI-Alibaba 快速开始
  • 网站制作费用一览表自己怎么设计公主房
  • 西安网站建设缑阳建中文搜索引擎排名
  • 五种IO模型,同步IO和异步IO
  • 网站开发环境安装程序nodejs wordpress
  • wordpress跨站脚本攻击漏洞网站风格的表现形式
  • html个人网站怎么做搜狗推广管家
  • 【读书笔记】《Linux内核设计与实现》(第1章-第5章)
  • C++中继承的理解与应用
  • 深圳有哪些网站是做餐饮沙龙的如何进行网站制作
  • Linux基本使用(Ubuntu)
  • 张家港网站制作公司专业建网站 成都
  • 线性代数 · SVD | 几何本质、求解方法与应用
  • 网站建设 phpwordpress 文章参数
  • 网站建设ppt答辩安徽六安有哪些区县
  • 《操作系统真象还原》 第九章 第二部分
  • 网站开发服务器的选择wordpress自动添加视频
  • 外贸网站源码自己建站模板
  • 网站开发制作公司宁波商城网站开发设计
  • 做网站的主要内容公司图标设计logo
  • 郑州七彩网站建设公司网络架构设计方案
  • 408之二叉树(一)