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对分层后的架构进行解耦