【Springboot入门知识总结】

SpringBoot Web入门

  • 一.Spring
    • 1.springBoot入门程序
    • 2.Spring官方脚手架连接不上的解决方案
    • 3.为什么一个main方法就将web应用
  • 二. HTTP协议
    • 1.http协议的概念和特点
    • 2.Get请求和Post请求的区别
    • 3.http响应状态码分类
    • 4.获取http的参数
  • 三.springBoot中的常用注解
  • 四.分层解耦
  • 五.总结

一.Spring

spring官网

  • Spring发展到今天已经形成了一种开发生态圈,Spring提供了若干个子项目,每个项目用于完成特定的功能。
  • Spring Boot可以帮助我们非常快速的构建应用程序、简化开发、提高效率。
    在这里插入图片描述

1.springBoot入门程序

①. 创建springboot工程,并勾选web开发相关依赖。
②. 定义HelloController类,添加方法 hello,并添加注解。
③. 学会使用Servlet中的HttpServletRequest,获取到请求信息(请求行,请求头,请求体)
④学会使用Servlet中的HttpServletResponse,获取到响应信息(响应行,响应头,响应体)
⑤.学会使用springFramework中的ReponseEntity<返回类型>获取响应信息

package com.dream.controller;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.Enumeration;@RestController
public class HelloController {@RequestMapping("/hello")public String hello(String name) {System.out.println("Controller.............");return "hello:  " + name;}/*** 获取到请求参数* 使用HttpServletRequest对象** @return*/@RequestMapping("/request")public String request(HttpServletRequest request) {//获取请求方式String method = request.getMethod();System.out.println("请求方式: " + method);//获取请求URIString uri = request.getRequestURI();System.out.println("请求URI: " + uri);//获取完整的请求URLString url = request.getRequestURL().toString();System.out.println("请求URL: " + url);//获取所有请求参数String param = request.getQueryString();System.out.println("请求参数: " + param);//获取某个请求参数String name = request.getParameter("name");System.out.println("请求参数name: " + name);/// 获取所有请求头String header = request.getHeader("User-Agent");System.out.println("User-Agent请求头: " + header);//获取所有请求头Enumeration<String> headerNames = request.getHeaderNames();while (headerNames.hasMoreElements()) {String headerName = headerNames.nextElement();String headerValue = request.getHeader(headerName);System.out.println("请求头: " + headerName + "=" + headerValue);}return "Success request";}/*** 响应信息: 使用HttpServletResponse*/@RequestMapping("/response")public String response(HttpServletResponse httpServletResponse) {//设置状态码httpServletResponse.setStatus(200);//设置响应头httpServletResponse.setHeader("User-Agent", "123512512515afafasfasfas");//设置响应的内容字节大小httpServletResponse.setContentLength(200);return "OK";}/*** 响应信息: 使用ResponseEntity<返回的数据类型>*/@RequestMapping("/response2")public ResponseEntity<String> response() {return ResponseEntity.status(200).header("username", "zhangsan").body("<h1>大帅哥</h1>");}
}

2.Spring官方脚手架连接不上的解决方案

在这里插入图片描述

3.为什么一个main方法就将web应用

因为在创建spring项目的时候需要在pom文件中引入spring的起步依赖

  • spring-boot-starter-web:包含了web应用开发所需要的常见依赖。
  • spring-boot-starter-test:包含了单元测试所需要的常见依赖。
  • 官方提供的starter
    在这里插入图片描述

二. HTTP协议

1.http协议的概念和特点

概念: Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则
在这里插入图片描述
特点

  • 基于TCP协议:面向连接,安全
  • 基于请求-响应模型的:一次请求对应一次响应
  • HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。
  • 缺点:多次请求间不能共享数据。
  • 优点:速度快
    在这里插入图片描述

2.Get请求和Post请求的区别

  • 请求方式-GET: 请求参数在请求行中,没有请求体,如:/brand/findAll?name=OPPO&status=1。GET请求大小在浏览器中是有限制的。
  • 请求方式-POST: 请求参数在请求体中,POST请求大小是没有限制的

3.http响应状态码分类

  • 1xx:响应中,临时状态码
  • 2xx:成功
  • 3xx:重定向
  • 4xx:客户端错误
  • 5xx:服务端错误
  • 通常情况下,我们无需手动制定,服务器会根据请求逻辑自动设置

4.获取http的参数

  • 使用HttpServletRequest类
 @RequestMapping("/request")public String request(HttpServletRequest request){//获取请求方式String method = request.getMethod();System.out.println("请求方式: " + method);//获取请求URIString uri = request.getRequestURI();System.out.println("请求URI: " + uri);//获取完整的请求URLString url = request.getRequestURL().toString();System.out.println("请求URL: " + url);//获取所有请求参数String param = request.getQueryString();System.out.println("请求参数: " + param);//获取某个请求参数String name = request.getParameter("name");System.out.println("请求参数name: " + name);/// 获取所有请求头String header = request.getHeader("User-Agent");System.out.println("User-Agent请求头: " + header);//获取所有请求头Enumeration<String> headerNames = request.getHeaderNames();while (headerNames.hasMoreElements()){String headerName = headerNames.nextElement();String headerValue = request.getHeader(headerName);System.out.println("请求头: " + headerName + "=" + headerValue);}return "Success request";}

在这里插入图片描述

三.springBoot中的常用注解

  • 静态资源文件的存放位置
    resource/static
  • @ResposeBody
    ① 将controller方法的返回值直接写入HTTP响应体
    ② 如果是对象或集合,会先转为json,再响应
    ③ @RestController = @Controller + @ResponseBody
    ④ @ResponseBody它可以将实体类/集合转换成json字符串响应给前端
  • @RequestMapping
    ① 拦截请求路径,执行对应的程序代码
  • @Component
    ① 在类上添加,启动spring项目后自动创建类对象,并且将对象添加到IOC容器中管理
  • component衍生注解
    ① @Service,@Repository(@Mapper)@Service 是放在业务逻辑层
    ② @Repository(@Mapper)放在数据层(持久层)
    ③@Service层是添加在业务逻辑层的注解
    @AutoWired用法和可能出现的问题
    ① 注解要放到他们的实现类上面
    ② @AutoWired 依赖注入,将IOC容器中的指定对象赋值给成员变量
    ③ 当某个接口有多个实现类对象都注入到了IOC容器中,那么直接使用@AutoWired会报错
  • 如果想要解决接口两个实现类对象注入冲突问题有三种解决方案
    ① 在需要优先使用的类上面加上一个@primary注解
    ② 在依赖注入接口的实现对象的时候除了使用@AutoWired外还需要加上一个@qualifier(“IOC的bean名称”),bean名称就是类名首字母小写
    ③ 直接在依赖注入的时候加上一个@Resource(“Bean名称”)

四.分层解耦

三层架构

1.数据访问 dao层 ,(Data Access Object)(持久层),负责数据访问操作,包括数据的增、删、改、查
2.逻辑处理 service层 , 处理具体的业务逻辑
3.接受请求,响应数据 controller, 接收前端发送的请求,对请求进行处理,并响应数据。

拆分的好处

  • 复用性强
  • 解耦
  • 方便维护
  • 耦合:衡量软件中各个层/各个模块的依赖关联程度。
  • 内聚:软件中各个功能模块内部的功能联系。
  • 软件设计原则:高内聚低耦合。
    在这里插入图片描述

分层解耦

  • 控制反转: Inversion Of Control,简称IOC。对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转。
  • 依赖注入: Dependency Injection,简称DI。容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。
  • Bean对象:IOC容器中创建、管理的对象,称之为Bean。
  • 在将类注入到IOC容器的时候可以通过注解的value属性给bean指定名字,如果没有指定,默认是类名首字母小写
  • 声明bean的四大注解想要注入到IOC容器中,还需要被组件扫描注解@ComponentScan扫描,该注解它包含在了启动类,默认可以扫描到启动类所在包及其子包,也可以自己指定包的位置

IOC控制反转的必要性

  • 就是为了让模块之间的类文件之间解耦,修改其他模块类文件的实现类类名,不会影响到其他模块,使用控制反转技术,在启动项目的时候将会用到的对象创建好,放到IOC容器中

DI的必要性

  • 依赖注入就是用来获取到注入到IOC容器中的指定对象,赋值给成员变量,然后去调用对象里面的方法

五.总结

本篇文章主要总结了springboot入门的一些知识点,创建springboot项目,如何通过导入坐标的方式引入第三方的依赖,如何进行架构分层,常用注解,以及通过IOC和DI对分层后的架构进行解耦

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为IPD流程学习之——深入解读123页华为IPD流程体系设计方法论PPT

该方案全面介绍了华为IPD流程体系设计方法论&#xff0c;包括流程体系建设的背景、理念、架构、核心特征、构建模型、与组织和战略的关系、运营机制、数字化转型以及流程管理组织等内容&#xff0c;旨在为企业提供一套系统的流程体系建设指导&#xff0c;以提升运营效率、质量和…

使用docker搭建hysteria2服务端

原链接&#xff1a;https://github.com/apernet/hysteria/discussions/1248 官网地址&#xff1a;https://v2.hysteria.network/zh/docs/getting-started/Installation/ 首选需要安装docker和docker compose 切换到合适的目录 cd /home创建文件夹 mkdir hysteria创建docke…

力扣hot100

文章目录 力扣hot100-哈希题目&#xff1a;两数之和方法1-暴力方法2-哈希 题目&#xff1a;字母异位词分组题解 题目&#xff1a;最长连续序列题解解释代码 力扣hot100-双指针题目&#xff1a;移动零题解 题目&#xff1a;盛最多水的容器题解 题目&#xff1a;三数之和题解 题目…

Scala身份证上的秘密以及Map的遍历

object test {def main(args: Array[String]): Unit {val id "42032220080903332x"//1.生日是&#xff1f;//字符串截取val birthday id.substring(10,14) //不包括终点下标println(birthday)val year id.substring(6,10) //println(year)//性别&#xff1a;倒数第…

设置ip和代理DNS的WindowsBat脚本怎么写?

今天分享一个我们在工作时&#xff0c;常见的在Windows中通过批处理脚本&#xff08;.bat 文件&#xff09;来设置IP地址、代理以及DNS 相关配置的示例&#xff0c;大家可以根据实际需求进行修改调整。 一、设置静态IP地址脚本示例 以下脚本用于设置本地连接&#xff08;你可…

【机器学习】—逻辑回归

逻辑回归实现详解 介绍 逻辑回归&#xff08;Logistic Regression&#xff09;是一种广泛应用于分类问题的统计模型&#xff0c;尤其适用于二分类问题。本文将通过一个简单的例子&#xff0c;使用Python和PyTorch库实现逻辑回归&#xff0c;并通过可视化展示模型的训练过程和…

华为仓颉编程环境搭建

1、仓颉介绍 摘自华为官方&#xff1a;仓颉编程语言作为一款面向全场景应用开发的现代编程语言&#xff0c;通过现代语言特性的集成、全方位的编译优化和运行时实现、以及开箱即用的 IDE 工具链支持&#xff0c;为开发者打造友好开发体验和卓越程序性能。 其具体特性表现为&am…

Vue.js当中v-if和v-show的区别

作者&#xff1a;CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 使用环境&#xff1a;WebStorm 目录 v-if和v-show举例 v-if 定义 特点 v-show 定义 特点 代码示例 v-if和v-show区别 原理 性能 适用性 v-if和v-show举例 首先我们还是简单回顾一下vue当中两…

【iOS】知乎日报总结

文章目录 前言首页网络请求轮播图上滑加载图片请求 文章详情页WKWebView的使用点赞、收藏持久化——FMDB的使用 其他问题沙盒问题单元格点击其他 总结 前言 在系统学习了OC语言和UI控件后&#xff0c;知乎日报是第一个比较大的项目&#xff0c;耗时一个多月时间&#xff0c;里面…

NLP信息抽取大总结:三大任务(带Prompt模板)

信息抽取大总结 1.NLP的信息抽取的本质&#xff1f;2.信息抽取三大任务&#xff1f;3.开放域VS限定域4.信息抽取三大范式&#xff1f;范式一&#xff1a;基于自定义规则抽取&#xff08;2018年前&#xff09;范式二&#xff1a;基于Bert下游任务建模抽取&#xff08;2018年后&a…

【Linux】网络连接模式,VM:桥接、NAT、仅主机如何选择?

1、网络类型 虚拟机建立时的常见网络类型有3种&#xff1a;桥接、NAT&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09;、仅主机&#xff08;Host Only&#xff09; 桥接&#xff1a;VM直接连接路由器&#xff0c;与物理机地位相同&#xff1b;N…

Spring Boot 3启动加载器详解(含源码解析)

一、引言 Spring Boot 3启动加载器是提升开发效率和应用程序启动速度的关键组件。本文将详细介绍Spring Boot 3的启动加载器&#xff0c;包括其实现方式、应用场景及工作原理等。 说明&#xff1a;本文分析使用的Spring Boot源码版本为3.3.5 二、启动加载器简介 启动加载器…

UDP客户端服务器通信

在这篇博客中&#xff0c;我们将探索 UDP&#xff08;用户数据报协议&#xff09; 通信&#xff0c;简要地说&#xff0c;UDP 是一种无连接、快速但不可靠的通信协议&#xff0c;适用于需要快速数据传输但对丢包容忍的场景&#xff0c;比如视频流和在线游戏。就像《我是如此相信…

手机实时提取SIM卡打电话的信令声音-智能拨号器的双SIM卡切换方案

手机实时提取SIM卡打电话的信令声音 --智能拨号器app的双SIM卡切换方案 一、前言 在蓝牙电话的方案中&#xff0c;由于采用市场上的存量手机来做为通讯呼叫的载体&#xff0c;而现在市面上大部分的手机都是“双卡双待单通”手机&#xff0c;简称双卡双待手机。即在手机开机后…

Spring Boot 同时接受文件和实体及 Postman 测试实战

Spring Boot 文件上传及 Postman 测试指南 在本文中&#xff0c;我们将介绍如何使用 Spring Boot 上传文件并通过 Postman 测试接口。我们会基于以下接口作为示例&#xff1a; Boolean importDevicePushConfig(RequestParam("file") MultipartFile file,DevicePush…

Paddle Inference部署推理(一)

一&#xff1a;Paddle Inference推理 简介 Paddle Inference 是飞桨的原生推理库&#xff0c;提供服务器端的高性能推理能力。由于 Paddle Inference 能力直接基于飞桨的训练算子&#xff0c;因此它支持飞桨训练出的所有模型的推理。 Paddle Inference 功能特性丰富&#xff…

搭建文件服务器并使用Qt实现文件上传和下载(带账号和密码)

文章目录 0 背景1 搭建文件服务器2 代码实现文件上传和下载2.1 在pro文件中添加网络支持2.2 创建网络管理类2.3 文件上传2.4 文件下载 3 扩展&#xff08;其他方法实现文件上传和下载&#xff09;3.1 python3.2 npm3.3 ftp服务器 4 完整的代码 0 背景 因为需要使程序具备在远程…

社交新零售模式下“2+1 链动模式 S2B2C 商城小程序”的创新实践与发展策略

摘要&#xff1a;随着实体商业与社交网络深度融合&#xff0c;社交新零售蓬勃兴起&#xff0c;“21 链动模式 S2B2C 商城小程序”作为其中创新典范&#xff0c;融合独特激励机制与数字化运营优势&#xff0c;重塑零售生态。本文剖析该模式架构、运作逻辑&#xff0c;探讨其在私…

【Git】Git 完全指南:从入门到精通

Git 完全指南&#xff1a;从入门到精通 Git 是现代软件开发中最重要的版本控制工具之一&#xff0c;它帮助开发者高效地管理项目&#xff0c;支持分布式协作和版本控制。无论是个人项目还是团队开发&#xff0c;Git 都能提供强大的功能来跟踪、管理代码变更&#xff0c;并保障…

华为E9000刀箱(HWE9000V2)服务器硬件监控指标解读

随着数据中心规模的不断扩大&#xff0c;服务器的稳定性和可靠性变得尤为重要。华为E9000刀箱&#xff08;HWE9000V2&#xff09;作为一款高性能的服务器设备&#xff0c;其硬件状态的实时监控对于保障业务的连续性和系统的稳定运行至关重要。 监控易作为一款专业的IT基础设施监…