SpringMVC之简介

news2024/11/19 3:45:33

           看到SpringMVC这个名字我们会发现其中包含Spring,那么SpringMVC和Spring之间的会有关系么?答案是肯定有,SpringMVC隶属于Spring,是Spring技术中的一部分。那么SpringMVC到底是用来做什么的呢?

  • 回想web阶段,我们学习过Servlet,而SpringMVC与Servlet技术功能等同,均属于web层或者说表现层开发技术。

那么既然已经有了Servlet为什么还需要花时间再学习一个SpringMVC技术?要回答这个问题,我们就需要搞清楚SpringMVC与Servlet相比,有什么优势:

框架我们都知道是用来简化开发的,所以SpringMVC与Servlet相比,开发起来更简单快捷,用更少的代码完成表现层代码的开发,那么问题又来了,到底有多简单呢?我们通过一个例子来体验一把吧。

将资料中的项目导入到IDEA中,打开后格式如下:

  • UserSaveServlet:使用Servlet开发的用户新增模块

@WebServlet("/user/save")
public class UserSaveServlet extends HttpServlet{

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.接收请求参数
        String name = req.getParameter("name");
        System.out.println("servlet save name ==> " + name);
        //2.生产响应
        resp.setContentType("text/json;charset=utf-8");
        PrintWriter pw = resp.getWriter();
        pw.write("{'module':'servlet save'}");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req,resp);
    }
}

 

  • UserUpdateServlet:使用Servlet开发的用户修改模块

@WebServlet("/user/update")
public class UserUpdateServlet extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.接收请求参数
        String name = req.getParameter("name");
        System.out.println("servlet update name ==> " + name);
        //2.生产响应
        resp.setContentType("text/json;charset=utf-8");
        PrintWriter pw = resp.getWriter();
        pw.write("{'module':'servlet update'}");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req,resp);
    }
}
  • UserDeleteServlet:使用Servlet开发的用户删除模块

@WebServlet("/user/delete")
public class UserDeleteServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.接收请求参数
        String name = req.getParameter("name");
        System.out.println("servlet delete name ==> " + name);
        //2.生产响应
        resp.setContentType("text/json;charset=utf-8");
        PrintWriter pw = resp.getWriter();
        pw.write("{'module':'servlet delete'}");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req,resp);
    }
}
  • UserSelectServlet:使用Servlet开发的用户查询模块

@WebServlet("/user/select")
public class UserSelectServlet extends HttpServlet{

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.接收请求参数
        String name = req.getParameter("name");
        System.out.println("servlet select name ==> " + name);
        //2.生产响应
        resp.setContentType("text/json;charset=utf-8");
        PrintWriter pw = resp.getWriter();
        pw.write("{'module':'servlet select'}");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req,resp);
    }
}

启动项目,测试结果如下:

上面就是通过Servlet的方式来实现的用户模块的增删改查功能。那么如果使用SpringMVC来开发相同的功能,做出来是什么样子的呢?

打开项目springmvc包下的UserController类,内容如下:

@Controller
public class UserController {

    @RequestMapping("/save")
    @ResponseBody
    public String save(String name){
        System.out.println("springmvc save name ==> " + name);
        return "{'module':'springmvc save'}";
    }

    @RequestMapping("/delete")
    @ResponseBody
    public String delete(String name){
        System.out.println("springmvc delete name ==> " + name);
        return "{'module':'springmvc delete'}";
    }

    @RequestMapping("/update")
    @ResponseBody
    public String update(String name){
        System.out.println("springmvc update name ==> " + name);
        return "{'module':'springmvc update'}";
    }

    @RequestMapping("/select")
    @ResponseBody
    public String select(String name){
        System.out.println("springmvc select name ==> " + name);
        return "{'module':'springmvc select'}";
    }
}

 启动项目,测试结果如下:

通过两种技术对相同功能的实现,我们会发现打印输出的结果是一样的,但是对比编写的代码会发现SpringMVC这种开发方式==更简单、更高效==。

所以接下来我们就需要来学习下SpringMVC这门技术,主要学习那些内容呢?

学习之前大家需要记住一件事是,SpringMVC是用来替换Servlet的,所以Servlet能实现的,SpringMVC就能实现,主要学习的内容包含如下模块:

  • SpringMVC简介

  • ==请求与响应==

  • ==REST风格==

  • ==SSM整合(注解版)==

  • 拦截器

SpringMVC简介:主要是来认识下到底什么是SpringMVC。

请求与相应:SpringMVC是替换Servlet处于Web的框架,所以其主要的作用就是用来接收前端发过来的请求和数据然后经过处理并将处理的结果响应给前端,所以如何处理请求和响应是SpringMVC中非常重要的一块内容。

REST风格:是一种软件架构风格,可以降低开发的复杂性,提高系统的可伸缩性,在以后开发中非常重要和常用。

SSM整合:是把咱们所学习的SpringMVC+Spring+Mybatis整合在一起来完成业务开发,是对我们所学习这三个框架的一个综合应用。

拦截器:是SpringMVC中的一个小知识点。

对于SpringMVC的学习,最终要达成的目标:

  1. ==掌握基于SpringMVC获取请求参数和响应json数据操作==

  2. ==熟练应用基于REST风格的请求路径设置与参数传递==

  3. 能够根据实际业务建立前后端开发通信协议并进行实现

  4. ==基于SSM整合技术开发任意业务模块功能==

 

SpringMVC概述

我们要学习的SpringMVC究竟是一门什么技术呢?

当前WEB程序的工作流程:

三层架构

  • web程序通过浏览器访问前端页面,发送异步请求到后端服务器

  • 后台服务器采用三层架构进行功能开发

    • 表现层负责接收请求和数据然后将数据转交给业务层

    • 业务层负责调用数据层完成数据库表的增删改查,并将结果返给表现层

    • 表现层将数据转换成json格式返回给前端

  • 前端页面将数据进行解析最终展示给用户。

表现层与数据层的技术选型:

  • 数据层采用Mybatis框架

  • 变现层采用SpringMVC框架,SpringMVC==主要==负责的内容有:

    • controller如何接收请求和数据

    • 如何将请求和数据转发给业务层

    • 如何将响应数据转换成json发回到前端

介绍了这么多,最后我们来对SpringMVC一个概述:

  • SpringMVC是一种基于Java实现MVC模型的轻量级Web框架

  • 优点

    • 使用简单、开发便捷(相比于Servlet)

    • 灵活性强

    这里所说的优点,就需要我们再使用的过程中慢慢体会。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/194968.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Atlas中间件快速入门(实现数据库读写分离)

一、Atlas简介 1 2 3 41. Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目 2. 它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性 3. 目前该项目在360公司内部得到了广泛应…

屏幕录制没有声音怎么办?看看你有没有打开这个设置

电脑是我们学习和办公不可或缺的工具,有时我们需要使用工具对电脑屏幕进行录制。但很多小伙伴录制的电脑录屏文件只有画面没有声音。屏幕录制没有声音怎么办?不用慌!有可能你只是忘了在录制前打开这个设置。今天小编就来教大家录制前需要开启…

公司企业如何制作微信小程序店铺?

​微信小程序除了可以为公司企业充当展示官网之外,有些主打线上销售商品的公司企业也会借助小程序来卖货,那就是我们常说的微信小程序店铺。那么公司企业如何制作微信小程序店铺?下面给大家做个讲解。 一、注册小程序账号 微信小程序店铺也属…

有效管理 Kubernetes 的流行解决方案,7 款 DevOps 工具管理 Kubernetes ,集群管理更加的轻松顺畅和高效

有效管理 Kubernetes 的流行解决方案,7 款 DevOps 工具管理 Kubernetes ,集群管理更加的轻松顺畅和高效。 在新兴的云原生环境中,Kubernetes无处不在。它已成为编排容器的标准。但是,管理多个 Kubernetes 集群(必须以…

前端整理 —— 前端安全

1. XSS(跨站脚本攻击) 什么是XSS 是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如Cookie、SessionID等,进而危害数据安全常见类型…

【并发编程十四】c++原子操作(2)——实现自旋锁

【并发编程十四】c原子操作(2)——实现自旋锁一、自旋锁简介二、使用自旋锁三、不使用自旋锁四、分析简介 在介绍完原子操作,我们这篇使用c提供的原子操作,实现一个自旋锁,并加以利用。 原子操作参见【并发编程十三】…

什么是shell?shell在Linux内怎么编写脚本?

目录 一、概念 二、简单创建脚本 三、shell语法 1.变量 2.环境变量 3.参数变量 4.条件 5.控制结构 if语句 elif语句 for语句 一、概念 什么是shell? shell是一个作为用户与Linux系统间接口的程序,它允许用户向操作系统输入需要执行的命令。 下图显示了sh…

kali之setoolkit使用

kali之setoolkit使用 1 搭建钓鱼网站 钓鱼网站是黑客常用的用于盗取目标用户名与账号的方式,今天主要介绍setoolkit来制作钓鱼网站 setoolkit是kali下的社会工程学工具集。 ①进入setoolkit 命令行输入: setoolkit②选择社会工程学攻击 - 网络攻击 - …

基于Android的二手车交易系统

需求信息: 1、登录功能:用户可以注册登录,管理员可以给销售人员权限,所以销售人员只能登陆。 2、维护车辆信息:主要实现的是客户添加修改查询删除车辆信息,然后发布车辆需要提交,提交给管理员,管理员审核了…

四、Executor执行器【无标题】

Executor Executor 接口定义了数据库操作的基本方法,其中 query*() 方法、update() 方法、flushStatement() 方法是执行 SQL 语句的基础方法,commit() 方法、rollback() 方法以及 getTransaction() 方法与事务的提交/回滚相关,clearLocalCac…

Python快速入门

最近在很多地方都可以看到Python的身影,尤其在人工智能等科学领域,其丰富的科学计算等方面类库无比强大。很多身边的哥们也提到Python非常的简洁方便,比如用Django搭建一个见得网站只需要半天时间即可,因此也吸引了我不小的兴趣。…

二叉树:删除二叉搜索树中的节点

删除二叉搜索树中的结点 一、题目描述 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。 一般来说,删除…

2023牛客寒假算法基础集训营5(通过ABCDHIKL) I题有详解(F已补)

其他题待补中…… 链接:2023牛客寒假算法基础集训营5 简单题 A 小沙の好客(贪心,前缀和,二分) 题意思路 给定nnn个商品的价值,qqq次询问,每次询问k,xk, xk,x即价值不超过xxx的商品最多可以拿…

文件输入输出缓冲流IO综合练习——学生管理系统文件版

综合练习(一) 键盘录入3个学生信息(学号,姓名,年龄,居住城市)存入集合。然后遍历集合把每一个学生信息存入文本文件(每一个学生信息为一行,自己定义分割标记) 学生类: package com.itheima; /** 标准的学生类*/ public class St…

【数据结构 (3)】1.4 算法和算法分析

文章目录1. 算法的定义及特性算法的特性算法设计的要求2. 算法的时间复杂度分析算法时间复杂度的基本方法算法时间复杂度分析例题算法时间复杂度的计算3. 算法的空间复杂度1. 算法的定义及特性 算法的定义 对特定问题求解方法和步骤的一种描述,它是指令的有限序列…

WSL-Ubuntu 安装、移动

设置” 启用或者关闭Windows功能“,勾选如下选项。Hyper-v若存在灰色,可进入BIOS-Configuration,Intel Virtual Technology设置Enable重启2、安装Ubuntu3、移动。Ubuntu默认安装C盘。首先D盘创建移动的目录,例如:D:\Ub…

使用kubeadm搭建高可用k8s集群

使用kubeadm搭建高可用k8s集群方案选型高可用k8s集群部署准备工作服务器统一配置配置hostname打通ssh免密登录部署etcd集群step1 在master01上生成配置相关文件step2 每台服务器上启动etcd服务step3 检查etcd集群是否正常部署负载均衡 (haproxy keepalived)step1 下载haproxy与…

SAP 分析云 2023.012023.02 版新功能抢先看

大家新年好呀!本年度的第一篇推文来啦~本文介绍了SAP 分析云2023.01&2023.02 版本的新功能。这些新功能已经在SAP 分析云FastTrack 客户的系统上线。对于 SAP 分析云季度发布周期 (QRC) 客户,此版本及其功能将作为 QRC 2023 年第1季度版本的一部分提…

[Android开发基础3] Activity的生命周期、创建与配置

文章目录 生命周期 概念 生命周期周期函数 创建Activity 方法一:编译器自动创建与配置 方法二:手动创建与配置 生命周期 概念 生命周期,顾名思义,就是当前的程序单元Activity从启动到销毁之间一系列所经过的状态。 生命周期周…

怎么画室内导航地图,室内地图绘制工具

现在很多楼宇建的越来越大,停车场、商场、展览馆、博物馆、交通枢纽等大型室内场景规模巨大、环境复杂,人们置身其中,一不小心就走错方向,从而多走很多弯路,费时费力。室内导航一直是导航场景的一大难题,如…