SpringMVC程序开发

1.什么是Spring MVC?

Spring Web MVC是基于Servlet API构建的原始的Web框架,从一开始是就包含在Spring框架中。它的正式名称“Spring Web MVC"来自其源模板的名称(Spring-webmvc),但通常被称为“Spring MVC"

从上述的定义我们可以得到两个关键的信息:

  1. Spring MVC是一个Web框架
  2. Spring MVC是基于Servlet API搭建的
  3. Spring MVC一开始就包含在Spring框架中

1.1MVC定义

MVC是Model View Controller的缩写,它是软件工程中一种软件架构模式,它把软件系统分为模型、视图、控制器三个基础部分

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

2.为什么要学Spring MVC?

现在绝大多数项目是基于Spring(或Spring Boot)的,而Spring的核心是Spring MVC.Spirng MVC是Spring框架的核心模块,而Spring Boot是Spring的脚手架。

3.怎么学Spring MVC?

  1. 链接的功能:将用户(浏览器)和Java程序连接起来,也就是访问一个地址能够调用到我们的Spring程序
  2. 获取参数的功能:用户访问的时候会带有一些阐述,我们在程序中想办法获取这些参数。
  3. 输出数据的功能:执行了业务逻辑以后,要把程序执行的结果返回给用户。

我们需要掌握以上三个功能。

3.1Spring MVC创建和连接

 Spring MVC项目创建和Spring Boot创建项目相同,在创建的时候我们选择Spring Web就相当于创建了Spring MVC的项目。

在Spring MVC中使用@RequestMapping来实现URL路由映射,也就是浏览器连接作用

3.1.1创建Spring MVC项目

Spring MVC可以基于Spring Boot创建,也就是创建一个Spring Boot项目,勾选Spring Web即可。

我们创建一个UserController类,实现用户到Spring程序的互联网互通,具体实现代码如下:

@Controller //让Spring框架启动
@ResponseBody //返回非页面数据
@RequestMapping("/user") //路由器规则注册
public class UserController {

    //路由器规则注册
    @RequestMapping("/hi")
    public String sayHi() {
        return "<h1>你好,SpringBoot</h1>";
    }
}

 3.1.2@RequestMapping注解介绍

@RequestMapping时Spring Web应用程序中最常被用到的注解之一,它是被用来注册接口的路由映射的。

从3.1.1的代码中可以看出@RequestMapping既可以修饰类,也可以修饰方法,当修饰类和方法时,访问的地址是类+方法

3.1.3@RequestMapping是post还是get请求

我们使用PostMan来测试以下@RequestMapping是post请求还是get请求

 我们发现不管是post还是get都是可以的

指定get/post方法类型

我们可以显示的指定@RequestMapping来接收Post的情况,如下所示:

@Controller //让Spring框架启动
@ResponseBody //返回非页面数据
@RequestMapping("/user") //路由器规则注册
public class UserController {

    //路由器规则注册
    //@RequestMapping("/hi")
    //指定响应的方法
    @RequestMapping(value = "/hi", method = RequestMethod.GET)
    public String sayHi() {
        return "<h1>你好,SpringBoot</h1>";
    }
}

此时我们只能用get方法访问得到

3.1.4@GetMapping和@PostMapping

get请求的三种写法:

//写法一
@RequestMapping("/index")

//写法二
@RequestMapping(value = "/index", mextod = RequestMethod.GET)

@写法三
@GetMapping("/index")

post的三种写法:

//写法一
@RequestMapping("/index")

//写法二
@RequestMapping(value = "/index", method = RequestMethod.POST)

//写法三
@PostMapping("/index")

3.2获取参数

3.2.1获取单个参数

在Spring MVC中可以直接用方法中参数来实现传参,比如以下代码:

    @RequestMapping("/getone")
    public String getOne(String name) {
        return "获取的参数为:" + name;
    }

 多个参数的获取也是相同的方法,我们只要保持参数名字和传过来的键名字相同即可。

3.2.2传递对象

我们在Spring MVC中可以自动实现参数对象的赋值,

package com.example.demo.model;

import lombok.Data;

/**
 * Describe:
 * User:lenovo
 * Date:2023-07-26
 * Time:11:15
 */
@Data
public class Person {
    private int id;
    private String name;
    private String password;
}

    @RequestMapping("/getobject")
    public String getObject(Person person) {
        return person.toString();
    }

 URL传递的参数会自动与对象中的属性相匹配,进行自动的赋值

3.2.3后端参数重命名

在一些特殊的情况下,前端传递的参数key和我们接收key名称可能不一样,比如前端使用的id,但是在后端的代码中使用名称为uid,这样就会出现参数接收不到的情况,我们可以使用RequestParam来重命名前后端参数

后端代码如下:

    @RequestMapping("/m4")
    public String method4(@RequestParam("time") String createtime) {
        return createtime;
    }

 我们尝试不传这个参数试试

 我们查看@RequestParam注解的具体实现细节:

 这一行代码,表示我们必须传递这个参数,我们也可以将它设置为false来改变。具体代码如下:

    @RequestMapping("/m4")
    public String method4(@RequestParam(value = "time", required = false) String createtime) {
        return createtime;
    }

 3.2.4@RequestBody接收JSON对象

 后端接收代码:

    @RequestMapping(value = "/m5", method = RequestMethod.POST)
    public String method_5(@RequestBody Person person) {
        return person.toString();
    }

 3.2.5获取URL中参数@PathVariable

 我们发现传递参数有的网站不是使用 ?:key=value 的方式,而是像上图一样,是在URL后面加上/...的形式我们要怎么获取参数呢?

    @PostMapping("m6/{name}/{password}")
    public String method6(@PathVariable String name, @PathVariable String password) {
        return name + ", " + password;
    }

3.2.6上传文件@RequestPart

    @PostMapping("/param9")
    public String param9(String name, @RequestPart("myfile") MultipartFile file) throws IOException {
        //文件名
        String fileName = UUID.randomUUID().toString().replace("-", "");
        //获取文件的后缀名
        fileName += name;
        fileName += file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));

        //文件保存路径
        String filePath = "E:\\image\\" + fileName;
        //保存文件
        file.transferTo(new File(filePath));
        return filePath + "上传成功";
    }

 

 3.2.7获取Cookie/Session/header

简介的获取Cookie——@CookieValue

    @RequestMapping("/cookie")
    public String cookie(@CookieValue("name") String name) {
        return "cookie: " + name;
    }

 简介获取Header——@RequestHeader


    @RequestMapping("/header")
    public String header(@RequestHeader("User-Agent") String userAgent) {
        return userAgent;
    }

 简介获取session

    @RequestMapping("session")
    public String session(@SessionAttribute(value = "username", required = false) String userName) {
        if(userName == null) {
            userName = "zhangsan";
        }
        return userName;
    }

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity游戏源码分享-ARPG游戏Darklight.rar

Unity游戏源码分享-ARPG游戏Darklight.rar 玩法 项目地址&#xff1a;https://download.csdn.net/download/Highning0007/88105464

Android Studio 的版本控制Git

Android Studio 的版本控制Git。 Git 是最流行的版本控制工具&#xff0c;本文介绍其在安卓开发环境Android Studio下的使用。 本文参考链接是&#xff1a;https://learntodroid.com/how-to-use-git-and-github-in-android-studio/ 一&#xff1a;Android Studio 中设置Git …

Flowable-服务-微服务任务

目录 定义图形标记XML内容界面操作 定义 Sc 任务不是 BPMN 2.0 规范定义的官方任务&#xff0c;在 Flowable 中&#xff0c;Sc 任务是作为一种特殊的服务 任务来实现的&#xff0c;主要调用springcloud的微服务使用。 图形标记 由于 Sc 任务不是 BPMN 2.0 规范的“官方”任务…

在腾讯云服务器OpenCLoudOS系统中安装mysql(有图详解)

1. 创建MySQL安装目录 mkdir -p app/soft//mysql 2. 进入MySQL安装目录&#xff0c;下载&#xff0c;安装 cd /app/soft/mysql/ wget http://dev.mysql.com/get/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar 得到安装包&#xff1a; 解压安装包&#xff1a; 查看系统是否自带…

ts一些常用符号

非空断言操作符(!) 具体是指在上下文中当类型检查器无法断定类型时&#xff0c;一个新的后缀表达式操作符 ! 可以用于断言操作对象是非 null 和非 undefined 类型。具体而言&#xff0c;x! 将从 x 值域中排除 null 和 undefined 。 1. 赋值时忽略 undefined 和 null function…

JVM源码剖析之JIT工作流程

版本信息&#xff1a; jdk版本&#xff1a;jdk8u40思想至上 Hotspot中执行引擎分为解释器、JIT及时编译器&#xff0c;上篇文章描述到解释器过度到JIT的条件。JVM源码剖析之达到什么条件进行JIT优化 这篇文章大致讲述JIT的编译过程。在JDK中javac和JIT两部分跟编译原理挂钩&a…

游游的排列构造

示例1 输入 5 2 输出 3 1 5 2 4 示例2 输入 5 3 输出 2 1 4 3 5 #include<bits/stdc.h> using namespace std; typedef long long ll; const int N1e55; int n,k; int main(){scanf("%d%d",&n,&k);int xn-k1;int yn-k;int f1;for(int i1;i&l…

【前端】javascript+html+css 家具销售网站(代码+报告)

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

工业RFID读写器在食品饮料加工生产的应用!

当前食品饮料加工行业快速发展&#xff0c;得益于科技的应用&#xff0c;科技不仅提高了生产效率&#xff0c;还提升了食品生产质量和食品安全水平。其中&#xff0c;RFID技术在食品饮料行业中的应用对于加工生产帮助很大&#xff0c;RFID技术未来在食品饮料行业仍有巨大的潜力…

Mac 定时重启 TouchBar 脚本(缓解闪烁问题)

背景 Mac 笔记本 TouchBar 是真的脆啊&#xff0c;合盖使用一段时间就废了&#xff0c;右侧一直闪烁简直亮瞎眼 &#x1f602; 经过观察&#xff0c;总结出闪烁规律如下&#xff1a; 工作状态&#xff1a;不断操作电脑时&#xff0c;触控栏处于工作状态&#xff0c;几乎不闪…

明晚直播:可重构计算芯片的AI创新应用分享!

大模型技术的不断升级及应用落地&#xff0c;正在推动人工智能技术发展进入新的阶段&#xff0c;而智能化快速增长和发展的市场对芯片提出了更高的要求&#xff1a;高算力、高性能、灵活性、安全性。可重构计算区别于传统CPU、GPU&#xff0c;以指令驱动的串行执行方式&#xf…

5.开发DAO组件 -- Spring Data JPA

开发DAO组件 作用&#xff1a;用来访问数据库 持久化技术&#xff1a;Spring Data, JPA, Mybaits&#xff0c;jOOQ 等 Spring Boot为常见持久化技术提供了支持。 现在使用 Spring Data JPA Spring Data JPA 使用Spring Data JPA来访问数据库&#xff0c;需要再项目添加两个…

Python工具箱系列(三十九)

使用zlib对数据进行压缩 现实世界中&#xff0c;大量存在着对数据压缩的需求。为此&#xff0c;python内置了zlib压缩库&#xff0c;可以方便的对任意对象进行压缩。 下述代码演示了对字符串进行压缩&#xff1a; import zlib# 压缩一段中文 originstr 神龟虽寿&#xff0c…

Mysql触发器

1.触发器 触发器是与表有关的数据库对象&#xff0c;指在 insert / update / delete 之前或之后&#xff0c;触发并执行触发器中定义的SL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性&#xff0c;日志记录&#xff0c;数据校验等操作。 使用别名 OLD 和 …

python将多张图片拼成一张矩阵图,合成一张大图

用Python实现将多张图片排列成n*m的图像矩阵图 目录 引言环境准备代码实现效果演示总结 引言 在图像处理和图像展示的应用中&#xff0c;将多张图片排列成一个图像矩阵图是一个常见的需求。本博客介绍如何使用Python实现将12张图片排列成n*m的图像矩阵图。 环境准备 为了实…

【C# 6.0】云LIS平台源码

基于云计算的区域LIS平台为医疗机构改善患者服务质量提供了强有力的支持&#xff0c;“以患者为核心”这一理念得到了充分实现&#xff0c;可以解决各医院LIS建设水平参差不齐的现状&#xff0c;并完善各医院内LIS系统的功能&#xff0c;实现数据标准统一、功能完善、性能可靠&…

F5 LTM 知识点和实验 2-负载均衡基础概念

第二章&#xff1a;负载均衡基础概念 目标&#xff1a; 使用网页和TMSH配置virtual servers&#xff0c;pools&#xff0c;monitors&#xff0c;profiles和persistence等。查看统计信息 基础概念&#xff1a; Node一个IP地址。是创建pool池的基础。可以手工创建也可以自动创…

【计算机网络】应用层协议 -- 安全的HTTPS协议

文章目录 1. 认识HTTPS2. 使用HTTPS加密的必要性3. 常见的加密方式3.1 对称加密3.2 非对称加密3.3 非对称加密对称加密 4. 引入CA证书4.1 CA认证4.2 数据签名4.3 非对称机密对称加密证书认证4.4 常见问题 5. 总结 1. 认识HTTPS HTTPS全称为 Hyper Text Tranfer Protocol over …

页面访问控制远程仓库

页面访问权限控制 什么是jwt身份认证 在前后端分离模式的开发中&#xff0c;服务器如何知道来访者的身份呢&#xff1f; 在登录后&#xff0c;服务器会响应给用户一个 令牌 &#xff08;token&#xff09;令牌中会包括该用户的id等唯一标识浏览器收到令牌后&#xff0c;自己…

【极大似然性】不同函数(均方误差、交叉熵、KL 散度)不同结局(1/2)

Kowshik chilamkurthy 一、说明 很多时候&#xff0c;数据科学家和机器学习从业者并不欣赏不同损失指标之间的数学和直观关系&#xff0c;如负对数似然、交叉熵、最大似然估计、Kullback-Leibler &#xff08;KL&#xff09; 散度&#xff0c;以及最重要的均方误差。如果我说KL…