SpringBoot学习笔记(1)

news2024/12/26 3:53:10

1.Web技术基础

        BS:(Browser/Server,浏览器/服务器架构模式)。C/S架构主要特点是交互性强,具有安全访问模式,网络流量低,响应速度快,因为客户端负责大多数业务逻辑和UI演示,所以也被称为胖客户端,C/S结构的软件需要针对不同的操作系统开发不同版本的软件。

        CS:(Client/Server,客户端/服务器架构模式)。随着互联网的兴起,CS架构不适合Web,最大的原因是Web应用程序的修改和升级非常迅速,而CS架构需要每个客户端逐个升级桌面App,因此,Browser/Server模式开始流行,简称BS架构。B/S架构的主要特点是分散性高、维护方便、开发简单、共享性高、总拥有成本低。

2.BS架构原理

        在BS架构下,客户端只需要浏览器,应用程序的逻辑和数据都存储在服务器端。浏览器只需要请求服务器,获取Web页面,并把Web页面展示给用户即可。

3.SpringBoot

        遵循“约定优于配置”的原则,只需要很少的配置或使用默认的配置。

        能够使用内嵌的Tomcat、Jetty服务器,不需要部署war文件。

        提供定制化的启动器Starters,简化Maven配置,开箱即用。

        纯Java配置,没有代码生成,也不需要XML配置。

        提供了生产级的服务监控方案,如安全监控、应用监控、健康检测等。

3.1 pom.xml

        pom.xml是Maven项目的核心配置文件,它是 项目对象模型 - Project Object Model(POM)的缩写。

全面详解Maven的配置文件pom.xml(含常用plugin)_maven pom.xml-CSDN博客

3.2 resources目录

        存放web资源。static主要存放静态资源,如图片、css、js等;templates主要存放html等;        

application.properties:

05全局配置文件application.properties详解-CSDN博客

        application.properties与 application.yaml都可以作为Spring Boot的配置文件,只是书写格式不同而已,在 Spring Boot 启动时被自动读取。当然也可以同时使用,但同级目录下读取的顺序是先读取application.properties,读取application.yaml。该配置文件的存放路径如下图所示。

3.3 控制器

        Spring Boot提供了@Controller@RestController两种注解来标识此类负责接收和处理HTTP请求。

        如果请求的是页面和数据,使用@Controller注解即可;

        如果只是请求数据,则可以使用@RestController注解(本文使用)。

3.3.1 @RestController注解使用

        默认情况下,@RestController注解会将返回的对象数据转换为JSON格式。

3.3.2 实践

        在包下创建Controller包,再创建controller的class,@RestController是对控制器的标记,代表这个类已经变成了一个控制器,可用于接收客户端的请求了;

        加上请求@GetMapping("/hello")来访问这个方法,括号内的是链接地址:"/hello"

        浏览器:        /http://localhost:8080/hello        (这是本地访问,后续如果部署到云端后可以写别的域名。)

@RestController    //控制器的标记
public class contrller {

    //http://localhost:8080/hello?nickname=xinge&phone=123456
    @RequestMapping(value = "/hello",method = RequestMethod.GET)
    //该方法等价于:
    //@GetMapping("/hello")
    public String Hello(){    //添加方法

        return "你好";

    }
}

        如果使用@Controller注解,则需要返回一个html页面,即在return中去找一个名为hello的html文件。

4. web入门

        Spring Boot将传统Web开发的mvc、json、tomcat等框架整合,提供了spring-boot-starter-web组件,简化了Web应用配置。

        创建SpringBoot项目勾选Spring Web选项后,会自动将spring-boot-starter-web组件加入到项目中。

        spring-boot-starter-web启动器主要包括web、webmvc、json、tomcat等基础依赖组件,作用是提供Web开发场景所需的所有底层依赖。        

        webmvc为Web开发的基础框架,json为JSON数据解析组件,tomcat为自带的容器依赖。

 4.1 路由映射

        控制器通过路由映射接收请求。

        @RequestMapping注解主要负责URL的路由映射。它可以添加在Controller类或者具体的方法上。

        如果添加在Controller类上,则这个Controller中的所有路由映射都将会加上此映射规则,如果添加在方法上,则只对当前方法生效。

4.1.1 请求方法

        @RequestMapping注解包含很多属性参数来定义HTTP的请求映射规则。常用的属性如下:

        value: 请求URL的路径,支持URL模板、正则表达式

        method: HTTP请求方法

        consumes: 请求的媒体类型(Content-Type),如application/json

        produces: 响应的媒体类型

        params,headers: 请求的参数及请求头的值

4.1.2 value匹配

        @RequestMapping的value属性用于匹配URL映射,value支持简单表达式@RequestMapping("/user")

        @RequestMapping支持使用通配符匹配URL,用于统一映射某些URL规则类似的请求:@RequestMapping("/getJson/*.json"),当在浏览器中请求/getJson/a.json或者/getJson/b.json时都会匹配到后台的Json方法

        @RequestMapping的通配符匹配非常简单实用,支持  “*”  “?”  “**”  等通配符

        符号  “*”  匹配任意字符,符号  “**”  匹配任意路径,符号 “?” 匹配单个字符。

        有通配符的优先级低于没有通配符的,比如/user/add.json比/user/*.json优先匹配。         

        有“**”通配符的优先级低于有“*”通配符的。

4.1.3 Method匹配

        HTTP请求Method有GET、POST、PUT、DELETE等方式。HTTP支持的全部Method

        @RequestMapping注解提供了method参数指定请求的Method类型,包括RequestMethod.GET、RequestMethod.POST、RequestMethod.DELETE、RequestMethod.PUT等值,分别对应HTTP请求的Method

        Method匹配也可以使用@GetMapping、@PostMapping等注解代替。

@RestController    //控制器的标记
public class contrller {

    //http://localhost:8080/hello?nickname=xinge&phone=123456
    @RequestMapping(value = "/hello",method = RequestMethod.GET)
    //只能接受GET请求
    public String Hello(){    //添加方法

        return "你好";

    }
}

4.2参数专递

        @RequestParam将请求参数绑定到控制器的方法参数上,接收的参数来自HTTP请求体或请求url的QueryString,当请求的参数名称与Controller的业务方法参数名称一致时,@RequestParam可以省略。

        @PathVaraible:用来处理动态的URL,URL的值可以作为控制器中处理方法的参数。

        @RequestBody接收的参数是来自requestBody中,即请求体。一般用于处理非 Content-Type: application/x-www-form-urlencoded编码格式的数据,比如:`application/json`、`application/xml`等类型的数据。

4.2.1 参数传递

        zhangsan的名字被传递给了nickname这个的参数。

@RestController
public class contrller {

    //http://localhost:8080/hello?nickname=xinge&phone=123456
    @RequestMapping(value = "/hello",method = RequestMethod.GET)
    //该方法等价于:
    //@GetMapping("/hello")
    public String Hello(String nickname,String phone){
        System.out.println(phone);
        return "你好" + nickname;

    }
}
4.2.2 get请求
4.2.2.1 例1
@RestController
public class TestController {

    @RequestMapping(value = "/getTest01",method = RequestMethod.GET)
    public String getTest01(){

        return "GET请求";
    }
}

4.2.2.2 例2
@RestController
public class TestController {

    @RequestMapping(value = "/getTest01",method = RequestMethod.GET)
    public String getTest01(){

        return "GET请求";
    }
    @RequestMapping(value = "/getTest02",method = RequestMethod.GET)
    //http://localhost:8080/getTest02?nickname=zhagsan&phone=123
    public String getTest02(String nickname,String phone){
        System.out.println(phone);
        return "你好呀" + nickname;
    }
}

 

 如果传递过来的参数名称和方法的名称不一致该怎么办?

4.2.2.3 例3

传过来的是nickname,而方法定义的是name;

        在定义前面加一个注解如下:(@RequestParam(value = "nickname")

注意:如果加了@RequestParam的注解,则代表该参数是必须的,即必须传递这个参数

@RestController
public class TestController {


    @RequestMapping(value = "/getTest03",method = RequestMethod.GET)
    //http://localhost:8080/getTest03?nickname=XXX
    public String getTest03(@RequestParam(value = "nickname") String name){
        //将name与Nickname绑定
        //required = false表示可以不传递
        System.out.println("nackname:" + name);
        return "GET请求";
    }
}

报错:400 

         如果想不一定传递这个参数,那么可以加一个required = false,即(@RequestParam(value = "nickname",required = false)

    @RequestMapping(value = "/getTest03",method = RequestMethod.GET)
    //http://localhost:8080/getTest03?nickname=XXX
    public String getTest03(@RequestParam(value = "nickname",required = false) String name){
        //将name与Nickname绑定
        //required = false表示可以不传递
        System.out.println("nackname:" + name);
        return "GET请求";
    }
 4.2.2.4 例3.5
    @GetMapping("/test/**")
    public String test04(){
        return "通配符请求";
    }

 "**" 代表后面可以跟任意字符、任意级。

"*" 代表后面可以跟任意字符、1级。

4.2.3 post请求
4.2.3.1 例4

模拟前端发送username和password参数

    @RequestMapping(value = "/posttest01",method = RequestMethod.POST)
    public String postTest01(String username,String password){
        System.out.println("username:" + username);
        System.out.println("password:" + password);
        return "post请求";
    }

 终端显示:

也可以把信息放到请求体里,也可以放到url后面(如下)

  4.2.3.2 例5.把许多参数封装到对象里去(实体entity)

        创建entity类User(保证类里的属性名称和传输过来的参数名称一致

User类:

package com.example.demo.entity;

public class User {
    private String username;
    private String password;


    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

 类的传递:

    @RequestMapping(value = "/posttest02",method = RequestMethod.POST)
    public String postTest02(User user){
        System.out.println(user);
        return "POST请求02";
    }

发送请求: 

 

 当然也可以在类里面封装更多对象,方便传递。

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

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

相关文章

【含文档】基于Springboot+微信小程序 的中心医院用户移动端(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

学习之什么是生成器

什么是生成器(Generator) 1、是一种数据类型能源源不断地生成数据 2、"惰性"特点:一次生成一个值,而不是生成一个序列 3、生成器一定是迭代器比迭代器更简洁使用生成器表达式创建生成器 from typing import Generator, Iterator,…

【hot100-java】【柱状图中最大的矩形】

R9-栈篇 面积最大矩形的高度一定是 heights 中的元素 简单解释,就是说,最大高度必然是heights中的一个元素,我们假设是h,然后我们基于h,左右拓展,尽量拓展到h越来越高(符合单调栈)&a…

7.6透视变换

基本概念 在计算机视觉和图像处理领域中,透视变换(Perspective Transformation)是一种重要的几何变换,用于模拟从一个视角到另一个视角的变换,比如从鸟瞰视角到正面视角的变换。透视变换通常用于图像配准、增强现实、…

ubuntu报错you don‘t have enough free space in /var/cache/apt/archivers.

使用df -h命令查看; 扩充前,dev/sda2的大小: 使用gparted工具对dev/sda2进行扩容

Steam黑神话悟空禁止更新进入游戏的解决方案

首先打开该网站:https://steamdb.info/app/2358720/ 2358720即为游戏ID 网页下翻,找到更新历史:https://steamdb.info/app/2358720/history/ 然后在Steam的steamapps下,找到后缀为2358720的文件,右击记事本打开 将St…

老照片修复工具有哪些?怎么让老照片焕发新光彩?

在那些泛黄的相框中,珍藏着我们最珍贵的记忆。 岁月流转,照片上的影像逐渐模糊,但那份情感却愈发深刻。 如何让这些老照片恢复往日的光彩,让那些珍贵的瞬间再次清晰呈现? 本文将带你探索老照片修复高清的技巧&#…

SpringMVC源码-SpringMVC框架中Spring父容器和SpringMVC子容器加载的流程以及SpringMVC九大内置组件的初始

一、Spring父容器启动 SpringMVC 的项目结构如下: applicationContext.xml spring的配置文件 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.o…

Spring Boot 进阶-如何自定义SpringBoot日志配置?

在之前的文章中我们介绍了Spring Boot中的日志框架,并且也介绍了SpringBoot日志框架中日志级别的调整。这篇文章我们主要来介绍关于如何让日志框架更加符合我们自己的需求。那么首先我们就来看一下日志文件输出路径的配置。 如何指定日志文件的输出位置 在Spring Boot中日志是…

Keepalived+MySQL 高可用集群

基础架构如下 准备干净的实验环境 [rootmysql1 ~]# systemctl stop firewalld [rootmysql1 ~]# cat /etc/sysconfig/selinux |grep "SELINUXdisabled" SELINUXdisabled [rootmysql1 ~]# setenforce 0 setenforce: SELinux is disabled [rootmysql1 ~…

动静态库(Linux)

文章目录 前言一、静态库二、动态库三、深入理解动态库总结 前言 我们之前用过c语言的库.Linux中默认的都是使用动态库&#xff0c;如果想要使用静态库&#xff0c;就必须加上-static选项。默认都是安装的动态库&#xff0c;系统中一般没有静态库&#xff0c;如果要使用&#…

算法复杂度之时间复杂度

一 . 数据结构前言 1.1 数据结构 数据结构(Data structure) 是计算机存储&#xff0c;组织数据的方式&#xff0c;指互相之间存在一种或多种特定关系的数据元素的集合。没有一种单一的数据结构对所有用途都有用&#xff0c;所以要学习各式各样的数据结构&#xff0c;如&#…

使用kaggle命令下载数据集

目录 报错 解决方案 报错 使用kaggle命令下载数据集报错了&#xff0c; 解决方案 &#xff08;1&#xff09;首先&#xff0c;确保已经安装 Python 和包管理器 pip。 运行以下命令以使用命令行访问 Kaggle API&#xff1a; pip install kaggle 可能需要在 Mac/Linux 上执行…

【BurpSuite】SQL注入 | SQL injection(1-2)

&#x1f3d8;️个人主页&#xff1a; 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞&#x1f44d;收藏&#x1f497;支持一下哦 【BurpSuite】SQL注入 | SQL injection&#xff08;1-2&#xff09; 实验一 Lab: SQL injection vulnerability in WHERE clause…

Maven项目常见各类 QA

一、pom.xml文件 1.1 there is no POM in this directory [ERROR] The goal you specified requires a project to execute but there is no POM in this directory (/home/cys/SEtesting/example/smartut-report). Please verify you invoked Maven from the correct directo…

如何实现工业设备联网?天拓四方

一、引言 随着信息技术的快速发展&#xff0c;工业设备联网已成为推动工业4.0和智能制造的核心技术之一。工业设备联网通过将传统的工业设备与互联网、云计算、大数据等技术相结合&#xff0c;实现了设备之间的互联互通&#xff0c;数据共享与智能分析&#xff0c;极大地提高了…

【计算机网络 - 基础问题】每日 3 题(二十七)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…

机器学习-KNN

KNN&#xff1a;K最邻近算法&#xff08;K-Nearest Neighbor,KNN&#xff09; 用特征空间中距离待分类对象的最近的K个样例点的类别来预测。 投票法&#xff1a;K 个样例的对数类别。 k1:最近邻分类 k 通常是奇数&#xff08;因为我们根据这个K数据判断类别&#xff0c;如果…

敏感字段加密 - 华为OD统一考试(E卷)

2024华为OD机试(E卷+D卷+C卷)最新题库【超值优惠】Java/Python/C++合集 题目描述 【敏感字段加密】给定一个由多个命令字组成的命令字符串: 1、字符串长度小于等于127字节,只包含大小写字母,数字,下划线和偶数个双引号; 2、命令字之间以一个或多个下划线 进行分割; 3、可…

Spring Cloud Gateway接入WebSocket:实现实时通信

在现代的微服务架构中&#xff0c;实时通信变得越来越重要。Spring Cloud Gateway作为Spring Cloud生态中的API网关&#xff0c;提供了动态路由、监控、弹性、安全等功能。本文将介绍如何通过Spring Cloud Gateway接入WebSocket&#xff0c;实现服务之间的实时通信。 为什么需…