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默认是按照名称注入