前言:
小伙伴们,大家好,我是狂奔の蜗牛rz,当然你们可以叫我蜗牛君,我是一个学习Java半年多时间的小菜鸟,同时还有一个伟大的梦想,那就是有朝一日,成为一个优秀的Java架构师。
这个SpringMVC基础学习系列是用来记录我学习SpringMVC框架基础知识的全过程 (这个系列是参照B站狂神的SpringMVC最新教程来写的,由于是之前整理的,但当时没有发布出来,所以有些地方可能有错误,希望大家能够及时指正!)
之后我将尽量以两天一更的速度更新这个系列,还没有学习SpringMVC框架的小伙伴可以参照我的博客学习一下;当然学习过的小伙伴,也可以顺便跟我一起复习一下基础。最后,希望能够和大家一同进步吧,加油吧,编程人!
1.Spring MVC 学习 1.1 知识回顾今天我们来到了SpringMVC基础学习的第一站:简单回顾MVC架构和Servlet的使用。废话不多说,让我们开始今天的学习内容吧。
-
SSM:MyBatis + Spring + SpringMVC (延续了MVC三层架构思想)
-
JavaSE:认真学习,老师带,入门快
-
JavaWeb:认真学习,老师带,入门快
-
SSM框架:研究官方文档,锻炼自学能力,锻炼笔记能力,锻炼项目能力
-
SpringMVC + Vue - + SpringBoot + SpringCloud + Linux
-
SSM 整合:JavaWeb做项目
-
Spring:IOC(控制反转) 和 AOP(面向切面编程)
-
SpringMVC:SpringMVC的执行流程 (面试可能会问到)
-
SpringMVC:SSM框架整合!
- MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范
- 是将业务逻辑、数据、显示分离的方式来组织代码
- MVC主要作用是降低了视图与业务逻辑间的双向耦合
- MVC不是一种设计模式,而是一种架构模式,当然不同的MVC存在差异
1.2.2 了解MVC各层简单来说,所谓MVC就是Model 模型(包括Pojo、Dao和Service,即数据和业务)+ View 视图(JSP/HTML,展示数据)+ Controller 控制器(Servle,获取请求和返回响应)
Model(模型):数据模型,提供要展示的数据,包含数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行为)。不过一般都分开来写:数据Dao层(Value Object)和服务层(行为Service),也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务
View(视图):负责进行模型的展示,一般就是我们见到的用户界面,客户想要看到的东西
Controller(控制器):接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示,也就是控制器做了个调度员的工作
- Dao和Service
- Servlet:转发和重定向
- JSP/HTML
1.2.3 MVC执行流程图 1.2.4 知识扩充最典型的MVC就是JSP + Servlet + JavaBean的模式
例如有个User实体类:该实体类有用户名,密码,生日,爱好 … 等20个字段,而前端需要用户名和密码字段的数据
- 前端:进行数据传输 (传递实体类的数据)
- Pojo:User实体类
- Vo:UserVo(用户视图对象)比如只写两个字段:用户名和密码,然后传给前端 (相当于将实体类进行了细分,本质上还是实体类对象)
- Dto:UserDto (用户数据传输对象) 数据传输目标往往是Dao(数据访问对象)从数据库中检索数据
- 在web早期的开发中,通常采用的都是Model1,而在Model1中,主要分为两层,视图层和模型层
Model1优点:架构简单,只有模型层和视图层,比较适合小型项目开发
Model1缺点:JSP职责不单一,相当于即担任控制层,又担任视图层,不便于维护
2.简单了解Model2时代 2-1 Model2基本概念注意::JSP本质上就是一个Servlet
Model2把一个项目分成三部分,包括视图、控制、模型
职责分析:
Controller:控制器
- 取得表单数据
- 调用业务逻辑
- 转向指定的页面
Model:模型
- 业务逻辑
- 保存数据的状态
View:视图
- 显示页面
Model1:
- Model1模式的实现比较简单,适用于快速开发小规模项目
- Model1中JSP页面身兼View和Controller两种角色,将控制逻辑和表现逻辑混杂在一起,从而导致代码的可读性非常差
Model2:
- Model2不仅提高了代码的复用率与项目的扩展性,且大大降低了项目的维护成本
- 增加了应用的扩展性和维护的难度,Model2消除了Model1的缺点
MVC:M:Model (模型层) ; V:View (视图层); C:Controller (控制层)
MVVM:M:Model (模型层) ;V:View (视图层) ;VM: ViewModel(视图模型层),即双向数据绑定
3.知识扩充面试常见问题:
问:你的项目的架构是设计好的,还是演进的?
答:
项目架构是演进的,因为没有任何一个项目可以一开始就设计很好的架构,底层架构都是在不断的进行演变的,包括像阿里这样的大公司也不例外
- Alibaba 刚开始使用PHP,一般用于个人页面网站,但是当并发量成百上千万时就会存在问题了
- 随着用户数量增加,无奈转向Java
- 王坚 提出要去IOE,即不使用IBM和Orcale的企业软件服务,然后就是使用MySQL数据库
- MySQL:MySQL是一个开源小巧,可拔插,组件化的数据库,SQL底层其实还有一层架构,阿里经过修改,将MySQL更新为了AliSQL以及AliRedis
- All in one —> 微服务
- 创建一个普通的Maven项目,其他都不需要勾选
- 在项目的pom.xml配置文件中导入相关的资源依赖
1-3 删除父项目的src文件 2.创建子项目和导入资源依赖 2-1 创建Module子项目org.springframework spring-webmvc 5.2.4.RELEASE javax.servlet servlet-api 2.5 javax.servlet.jsp jsp-api 2.2 javax.servlet jstl 1.2 junit junit 4.12 test
- 右击父工程名字,点击【New】新建,然后选择【Module】模块
- 与父工程相同,子模块还是选择创建一个普通的Maven项目,不用勾选任何选项,然后给子项目起名字就可以了
- 在子项目的pom.xml配置文件中引入相关的资源jar包
3.解决src目录下的java文件变灰问题 2-1 查看src文件目录下的java文件javax.servlet servlet-api 2.5 javax.servlet.jsp jsp-api 2.2
- 点开src文件目录下的main文件,发现main文件下的java文件是灰色的
- 右击项目名称,选择【Add framework Support…】,即添加项目支持
- 进入【Add framework Support…】界面,接着勾选JavaEE目录下的【Web Application】
- 再次查看src文件目录下的main文件,发现main文件下的java文件已经变为蓝色了,然后也添加了web文件夹,并且web文件上有个蓝点
- 在src目录下的main文件下的java文件下,创建一个com.kuang.cotoller包,来存放控制层的HelloServlet类
package com.kuang.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String method =req.getParameter("method");
// 判断调用的请求是add方法还是delete方法
if(method.equals("add")) {
// 执行add方法
req.getSession().setAttribute("msg","执行了add方法");
}
if(method.equals("delete")) {
// 执行delete方法
req.getSession().setAttribute("msg","执行了delete方法");
}
// 1.3.1 使用转发请求
req.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(req,resp);
// 1.3.2 或者使用重定向
// resp.sendRedirect();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
}
2.编写web.xml配置文件
- 找到web目录下的WEB-INF文件下的web.xml配置文件,进行servlet以及映射的相关配置
1.3.3 编写视图层JSP页面hello com.kuang.servlet.HelloServlet hello /hello 15 index.jsp
- 在web文件夹下的WEB-INF文件下,创建一个jsp文件夹,用来存放视图层的相关页面文件
- 用来展示Servlet中调用方法后的信息
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
${msg}
2.编写form.jsp表单页面
- 用来进行提交数据信息的表单页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
1.3.4 配置TomCat服务器
1-1 编辑配置信息
- 点击IDEA编译器左上方的工具栏图形一行,找到那个锤子图标的后面,点击选择【Add Configurations】,因为我已经配置过了,所以这里显示的是【Edit Configurations】
- 点击左上角的“+”号,即添加新配置,找到选项中的【Tomcat Server】即Tomcat服务器,然后选择【Local】,即使用本地的Tomcat
- 添加本地的Tomcat服务器后,接着进行Tomcat服务器的相关信息配置,找到【Server】下的【Application server】,点击后面的【Configure…】
- 然后进行【Tomcat Home】的信息配置,找到本地的Tomcat文件位置,然后IDEA会进行自动识别Tomcat版本信息
- 再次回到【Server】页面后,会发现HTTP port和JMX port都已经自动匹配了,Tomcat默认端口号正常情况下是8080,但这里本地的Tomcat服务器端口号被我修改了,所以显示是8888
- 在【Deployment】下点击右侧的“+”号,选择【Artifact…】
- 然后添加发布项目信息,最后点击右下角的【Apply】即应用此配置
- 启动Tomcat服务器后,会自动跳转到默认的index.jsp欢迎页面
- 在原本默认的URL链接后面加上hello?method=add后,即http://localhost:8888/springmvc_01_servlet_war_exploded/hello?method=add,会跳转到test.jsp页面,然后页面会显示调用对应方法的信息
- 在原本默认的URL链接后面加上hello?method=delete,即http://localhost:8888/springmvc_01_servlet_war_exploded/hello?method=delete,会跳转到test.jsp页面,然后页面会显示调用对应方法的信息
好了,今天的有关 简单回顾MVC架构和Servlet的使用 的学习就到此结束啦。欢迎小伙伴们积极学习和讨论,喜欢的可以给蜗牛君点个关注,顺便来个一键三连。我们下期见,拜拜啦!
参考视频链接:【狂神说Java】SpringMVC最新教程IDEA版通俗易懂



