JAVA学习-Web基础1 SpringBoot
能走到哪里就算是哪里吧,毕竟我也不知道自己还能走不走得动了,以及这一切是否值得
SpringBoot
SpringBoot可以帮助我们非常快捷高效地构建程序开发,提升效率
SpringBoot入门程序
我们基于SpringBoot开发一个web依赖的应用程序,定义一个类并同浏览器进行简单的交互操作,而且添加注解
创建时,勾选Web选项,从而保证Web依赖

创建完后POM.XML如下所示(版本不同具体内容也会有所差异,创建完后非特殊情况不需要修改):
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 父工程 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>4.0.3</version> //SpringBoot版本,修改版本可直接在POM.XML中修改
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!-- 项目坐标 -->
<groupId>org.example</groupId>
<artifactId>SpringBootTest1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>SpringBootTest1</name>
<description>SpringBootTest1</description>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm>
<properties>
<java.version>17</java.version> //选择JDK版本
</properties>
<dependencies>//下面两项依赖为起步的Web依赖,基本包含了开发所需的全部依赖,其版本已经在父工程中定义
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webmvc-test</artifactId>
<scope>test</scope>//依赖作用范围
</dependency>
</dependencies>
<build>
<plugins>
<plugin>//SpringBoot打包插件
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
SpringBoot的main方法(启动类)

在启动类同一目录中创建一个请求处理类,用于定义请求处理方法
package org.example;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController //当前类是一个请求类
public class HelloController {
@RequestMapping("/hello") //请求路径
public String Hello(String name) {
System.out.println("Now Get name is :"+name);//收到请求之后本地输出内容
return "Now name is :"+name;//浏览器返回输出内容
}
}
运行启动类,效果如下:
可以看到通过在请求路径中设置name,浏览器接受并且输出了请求的name

随后在编辑器端也返回收到了name,并且在终端打印出来

HTTP协议
HTTP协议是超文本传输协议(HyperText Transfer Protocol),是规定了客户端与服务器之间的数据传输规则,客户端与服务器之间通信的基础,用于传输网页、图片、视频等超文本数据。

HTTP协议特点:
①基于TCP协议,面向连接,安全
②基于请求-响应模型,一次请求对应一次响应
③无状态协议,每次请求独立,服务器不保存会话信息。为实现状态管理,常借助Cookie或Session机制优点:速度快
缺点:多次请求之间不能共享数据
HTTP协议-请求协议
请求数据格式
在浏览器中点击F12查看HTTP协议的请求标头


如果POST类型的请求,还会携带POST请求附带的请求数据体,用于存放请求参数
请求数据设置
Web服务器(Tomcat)对HTTP的请求数据协议进行了解析,并进行了封装(HttpServletRequest),在调用Controller方法时候传递给了该方法,从而使得开发时不必直接对该协议进行操作
@RestController
public class RequestController {
@RequestMapping("/request")
public String request(HttpServletRequest request) {
System.out.println("Now we send requests!");
//1.获取请求方法
String method = request.getMethod();
System.out.println("Now we Get Method: "+method);
//2.获取URL地址
String URL = request.getRequestURL().toString();
System.out.println("Now we Get URL: "+URL);
String URI = request.getRequestURI();
System.out.println("Now we Get URI: "+URI);
//3.获取请求协议
String protocol = request.getProtocol();
System.out.println("Now we get protocol: "+protocol);
//4.获取请求参数
String name = request.getParameter("name");
String age = request.getParameter("age");
System.out.println("Now we get name: "+name);
System.out.println("Now we get age: "+age);
//5,获取请求头-accept
String accept = request.getHeader("Accept");
System.out.println("Now we get Accept: "+accept);
return "Now get request!";
}
}
效果如下:


HTTP协议-响应数据
响应数据格式
HTTP协议响应数据格式如下所示:

常见的响应状态码如下:

其中3xx表示重定向,也就是当前访问A服务器时发现需求资源不在A服务器而重定向到了B服务器

例如,我们访问百度网址,输入地址http://www.baidu.com/,然后打开控制台,发现效果如下:
第一次访问时发现地址不对,因此返回的状态码是307重定向状态码

经过重定向之后第二次访问地址正确,返回正确的200状态码

如果我们之前的访问路径出现了错误,那么我们就会得到错误的响应状态码,责任在于客户端(客户端访问出错)

如果我们的程序抛出异常,那么此时就会是服务器错误状态码(服务端代码出错)


常见的状态码如下:

响应数据设置
Web服务器对HTTP的响应数据进行了封装(HttpServletResponse),并在调用Controller方法的时候传递该方法,从而使得开发时不必直接操作,简便开发
使用HttpServletResponse设置响应如下:
@RestController
public class ResponseController {
@RequestMapping("/response") //设置响应路径
public void response (HttpServletResponse response) throws IOException {
//1.设置响应状态码
response.setStatus(401);
//2.设置响应头
response.setHeader("name","tcswuzb");
//3.设置响应体
response.getWriter().write("hello response.");
}
}
效果如下:


除了使用HttpServletResponse也可以使用Spring的ResponseEntity来设置
@RestController
public class ResponseController {
@RequestMapping("/response2")
public ResponseEntity<String> response2() {
return ResponseEntity.status(401).header("name","tcswuzb").body("<h1>Hello tcswuzb</h1>");
}
}
效果如下:

通常情况下,没有特殊需求,不需要我们自己设置响应头和响应状态码,服务器会帮我们设置的

浙公网安备 33010602011771号