【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);

        //获取请求URI
        String uri = request.getRequestURI();
        System.out.println("请求URI: " + uri);
        //获取完整的请求URL
        String 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);

        //获取请求URI
        String uri = request.getRequestURI();
        System.out.println("请求URI: " + uri);
        //获取完整的请求URL
        String 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对分层后的架构进行解耦

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Transcend oneself

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值