当前位置: 首页 > news >正文

SpringBoot Web 入门

Spring

官网:spring.io

Spring发展到今天已经形成了一种开发生态圈,Spring提供了诺干个子项目,每个项目用于完成特定的功能

Spring Boot

Spring Boot可以帮助我们非常快速的构建应用程序、简化开发、提高效率。

快速入门

第一步

创建springboot的模块

注意:这里创建启动不了并且右边没有maven,请按Ctrl+shift+a搜索maven有个add maven project把你的项目路径加进去就好了

创建好之后main目录下会自动有个启动类

第二步

创建一个请求处理类

HTTP协议

概念: Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。

特点:

1.基于TCP协议:面向连接,安全

2.基于请求-响应模型的:一次请求对应一次响应

3. HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。

        缺点:多次请求间不能共享数据。

        优点:速度快

请求协议

请求数据的格式

其中请求头中的格式

两种请求方式的区别

请求数据的获取

Web服务器(Tomcat)对HTTP协议的请求数据进行解析,并进行了封装(HttpServletRequest),在调用Controller方法的时候传递给了该方法。这样,就使得程序员不必直接对协议进行操作,让web开发更加便捷。

使用HttpServletRequest对象获取请求的格式

package org.example.springboot_web_quicklystart;import jakarta.servlet.MultipartConfigElement;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class RequestController {@RequestMapping("/request")public String request(HttpServletRequest request){//1·获取请求方式String method = request.getMethod();System.out.println(method);//2·获取请求url地址String url = request.getRequestURL().toString();//完整的路径System.out.println(url);String uri = request.getRequestURI();//资源访问的路径System.out.println(uri);//3·获取请求协议String protocol = request.getProtocol();//HTTP/1.1System.out.println(protocol);//4·获取请求参数String name = request.getParameter("name");System.out.println(name);//5·获取请求头 - AcceptString accept = request.getHeader("Accept");System.out.println(accept);return "ok";}
}

响应协议

响应的数据格式

状态码

响应头

响应数据的设置

Web服务器对HTTP协议的响应数据进行了封装(HttpServletResponse),并在调用Controller方法的时候传递给了该方法。这样,就使得程序员不必直接对协议进行操作,让web开发更加便捷。

第一种方式设置响应HttpServletResponse体的内容

package org.example.springboot_web_quicklystart;import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.io.IOException;@RestController
public class ResponseController {@RequestMapping("/response")public void response(HttpServletResponse response) throws IOException {//设置状态码response.setStatus(401);//设置响应头response.setHeader("name", "wei");//设置响应体response.getWriter().write("<h1>response</h1>");}
}

第二种方式设置-  ResponseEntity 是Spring Web中用于构建HTTP响应的强大工具,它不仅可以设置响应体数据,还能方便地设置响应状态码、响应头信息等。

@RequestMapping("/response2")public ResponseEntity<String> response2() {return ResponseEntity.status(401).header("name","aj").body("<h1>response2</h1>");}

实际开发中一般使用这个方法来读取resource目录的文件,可以防止地址变化而文件读取失败

分层解耦

三层架构

controller:控制层,接收前端发送的请求,对请求进行处理,并响应数据。

service:业务逻辑层,处理具体的业务逻辑。

dao:数据访问层(Data Access 0bject)(持久层),负责数据访问操作,包括数据的增、删、改、查。

调用流程

分层解耦

耦合:衡量软件中各个层/各个模块的依赖关联程度。

内聚:软件中各个功能模块内部的功能联系。

软件设计原则:高内聚低耦合

解耦

需要的方法:

控制反转:Inversion 0f Control,简称IOC。对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转。

依赖注入:Dependency Injection,简称DI。容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。

Bean对象:IOC容器中创建、管理的对象,称之为Bean。

通过加入注解来自动管理IOC,和自动注入

IOC

要把某个对象交给IOC容器管理,需要在对应的类上加上如下注解之一:

例如:

扫描

前面声明bean的四大注解,要想生效,还需要被组件扫描注解@ComponentScan扫描。
该注解虽然没有显式配置,但是实际上已经包含在了启动类声明注解SpringBootApplication中,默认扫描的范围是启动类所在包及其子包。

DI

三种注入方式

如果当前构造器只有一个

//aAutowired --->如果当前类中只存在一个构造函数,@Autowired可以省略

注意

@Autowired注解,默认是按照类型进行注入的。

如果存在多个相同类型的bean,将会报出如下错误:

三种解决方案

@Resource 与@Autowired区别?

@Autowired是Spring框架提供的注解,而@Resource是JavaEE规范提供的Autowired默认是按照类型注入,而@Resource默认是按照名称注入

相关文章:

  • 线上问题排查
  • 年度工作计划总结述职报告PPT模版一组分享
  • 第19天-Python自动化生成PPT图文教程(基于python-pptx)
  • 5-码蹄集600题基础python篇
  • 人工智能解析:技术革命下的认知重构
  • C语言—Linux环境下CMake设置库(动态/静态)
  • 前端面经-WebGL/threeJS
  • 【Java高阶面经:微服务篇】9.微服务高可用全攻略:从架构设计到自动容灾
  • Java 实现四种单例(都是线程安全)
  • 工程优化大纲
  • 高并发架构设计之限流
  • Linux查 ssh端口号和服务状态
  • 通过 curl 精准定位问题
  • 什么是实时流数据?核心概念与应用场景解析
  • 如果教材这样讲--单片机IO口Additional Functions和 Alternate Functions的区别
  • PaddleOCR的Pytorch推理模块
  • PostgreSQL使用
  • SQL 查询来查看 PostgreSQL的各连接数
  • 海康NVR录像回放SDK原始流转FLV视频流:基于Java的流媒体转码(无需安装第三方插件ffmpeg)
  • upload-labs通关笔记-第16关 文件上传之exif_imagetype绕过(图片马)
  • 微商做网站/企业关键词优化公司