欢迎光临
我们一直在努力

告别Servlet开发噩梦!Spring MVC入门核心知识一篇吃透


前言

家人们,谁懂啊!刚学JavaWeb的时候,被Servlet支配的恐惧至今难忘:

接收个表单参数,要写十几行request.getParameter(),还要手动做类型转换、判空处理;

就一个用户的增删改查,硬生生写了4个Servlet类,项目稍微大点,直接变成“Servlet海洋”,web.xml配置写到吐,后期改个路径都要翻半天。

而Spring MVC,就是专门来拯救我们于Servlet水火之中的Web开发神器!今天咱就用大白话,把Spring MVC的核心知识点扒得明明白白,新手也能一眼看懂。


一、先搞懂:我们为什么非要用Spring MVC?先聊聊Servlet的致命痛点

很多新手会问:有Servlet了,为啥还要学Spring MVC?咱直接戳中Servlet的两大致命短板,你瞬间就懂了。

1.1 接收参数?简直是手动地狱!

Servlet接收请求参数,真的是纯纯的体力活。

比如我们要接收一个用户注册的请求,包含用户名、密码、年龄、手机号4个参数,Servlet里得这么写:

就这?4个参数写了十几行,要是参数有十几个,光接收参数就能写半页代码,还特别容易写错、漏判空,纯纯的无效劳动。

而Spring MVC直接用反射机制帮我们搞定了参数自动封装,同样的场景,一行代码就搞定了,后面我们会看到。

1.2 一个请求一个Servlet?项目直接变成“Servlet海洋”!

Servlet的设计逻辑是:一个Servlet实例,只能处理一个请求。

什么意思?比如我们要做一个用户管理模块,需要:新增用户、删除用户、修改用户、查询用户列表、根据ID查询用户,5个功能就得写5个Servlet类:UserAddServlet、UserDeleteServlet、UserUpdateServlet、UserListServlet、UserGetByIdServlet。

一个模块就5个类,一个项目几十个模块,那就是上百个Servlet类,类爆炸就算了,每个Servlet都要在web.xml里配置路径,后期维护、改路径、加功能,简直是灾难。

而Spring MVC直接打破了这个限制,一个Controller类,就能处理N个相关请求,再也不用写一堆重复的Servlet类了。


二、搞懂Spring MVC之前,先吃透MVC设计模式

很多人会把MVC和Spring MVC搞混,这里先划重点:MVC是一套软件设计模式,是思想;而Spring MVC是这套思想的落地实现框架。

2.1 MVC到底是什么?大白话拆解

MVC是三个单词的缩写,分别对应了代码的三个分层,核心目的就是解耦,让代码各司其职,后期好维护、好扩展。

分层

全称

中文名称

核心职责

对应代码

M

Model

模型层

负责数据处理和业务逻辑,是整个程序的核心

数据模型:实体类POJO/JavaBean;业务模型:Service层、Mapper/Dao层

V

View

视图层

负责和用户交互,展示数据、接收用户操作

JSP、HTML页面,现在也包括前端Vue/React页面

C

Controller

控制层

负责请求调度,是视图和模型之间的“中转站”

Servlet、Spring MVC的Controller

给大家举个生活化的例子,一下子就懂了:

我们去餐厅吃饭,View就是餐厅的前台/点餐界面,我们在这里下单;Controller就是服务员,接了我们的订单,告诉后厨要做什么菜;Model就是后厨,负责做菜(处理业务逻辑、操作数据),做好了再交给服务员,服务员再把菜端给我们。

2.2 MVC的完整调用流程

一次完整的用户请求,在MVC模式里的流转是这样的:

  • 用户在View视图层发起请求(比如点击注册按钮、查询按钮)

  • 请求交给Controller控制层,它不处理业务,只负责接收请求,告诉Model要做什么

  • Model模型层执行业务逻辑、操作数据库,返回处理结果给Controller

  • Controller拿到结果后,交给对应的View视图层

  • View把结果渲染成页面,展示给用户

  • 2.3 新手必懂:MVC和经典三层架构,到底啥关系?

    很多新手还会搞混MVC和三层架构(表现层、业务层、持久层),这里一句话讲明白:

    两者的核心目标是一致的,都是为了代码分层解耦,只是划分的粒度和维度不一样。

    • 经典三层架构:把后端代码分为表现层(WEB层)、业务层(Service层)、持久层(Dao/Mapper层),它的划分是全后端的,没有包含页面层。

    • MVC设计模式:核心聚焦在WEB层的细分,其中Controller和View属于三层架构里的表现层,而Model则覆盖了业务层和持久层。

    简单说,三层架构是大的分层,MVC是对表现层的更精细化拆分,两者完全不冲突,反而经常一起配合使用。


    三、Spring MVC本尊登场:到底是什么神仙框架?

    3.1 Spring MVC到底是什么?

    一句话定义:Spring MVC是Spring框架原生的一个模块,是一套基于MVC设计模式的轻量级Web开发框架,底层深度封装了Servlet。

    划重点:

    • 它是Spring全家桶的亲儿子,和Spring的IOC、AOP等特性无缝衔接,不用额外整合

    • 它工作在WEB控制层,专门解决Servlet的各种痛点,帮我们简化Web开发

    • 它是目前Java后端Web开发的绝对主流框架,现在的Spring Boot、Spring Cloud项目,WEB层底层用的还是Spring MVC

    3.2 Spring MVC到底有多香?对比Servlet直接降维打击

    前面我们说了Servlet的两大痛点,Spring MVC直接完美解决,甚至还送了一堆超实用的功能:

  • 参数自动封装,告别手动getParameter

  • 前面Servlet里十几行的参数接收代码,Spring MVC里这么写就够了:

      不管多少个参数,直接用实体类接收,一行代码搞定,香不香?

  • 一个Controller搞定N个请求,告别类爆炸

  • 还是用户的增删改查,Spring MVC里只需要一个UserController类,写5个方法就行,不用再创建5个Servlet类,代码量直接锐减,维护起来也超级方便。

  • 无缝衔接Spring生态

  • 直接用Spring的依赖注入、AOP切面,事务管理也能直接用,不用自己写一堆整合代码。

  • 超多开箱即用的强大功能

  • 拦截器(做登录校验、权限控制超方便)、统一异常处理、数据校验、视图解析、文件上传下载、RESTful风格支持等等,这些功能Servlet都要自己手写,Spring MVC直接给你封装好了,拿来就能用。


  • 四、新手入门总结

    最后给大家梳理一下核心逻辑,帮大家把知识点串起来:

  • Servlet有两大致命痛点:接收参数麻烦、一个请求一个Servlet导致类爆炸,开发和维护成本极高

  • MVC是一套分层解耦的设计模式,把代码分为Model模型层、View视图层、Controller控制层,让代码各司其职

  • Spring MVC是基于MVC模式的Web框架,是Spring的原生模块,底层封装了Servlet,完美解决了Servlet的痛点,是JavaWeb开发的主流框架

  • 很多新手会问,现在都用Spring Boot了,还要学Spring MVC吗?答案是:必须要!Spring Boot只是帮我们做了自动配置,简化了搭建流程,底层的核心还是Spring MVC,吃透Spring MVC,才能真正搞懂JavaWeb请求的全流程,遇到问题也能快速定位解决。

    创作不易,觉得有用的家人们,点赞、收藏、关注走一波呀~ 后续会继续更新Spring MVC的执行流程、核心注解、实战用法!

    赞(0)
    未经允许不得转载:171主机测评 » 告别Servlet开发噩梦!Spring MVC入门核心知识一篇吃透
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址