JAVA学习-Web基础1 SpringBoot

能走到哪里就算是哪里吧,毕竟我也不知道自己还能走不走得动了,以及这一切是否值得

SpringBoot

SpringBoot可以帮助我们非常快捷高效地构建程序开发,提升效率

SpringBoot入门程序

我们基于SpringBoot开发一个web依赖的应用程序,定义一个类并同浏览器进行简单的交互操作,而且添加注解

创建时,勾选Web选项,从而保证Web依赖
image

创建完后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方法(启动类)
image

在启动类同一目录中创建一个请求处理类,用于定义请求处理方法

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
image
随后在编辑器端也返回收到了name,并且在终端打印出来
image

HTTP协议

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

HTTP协议特点:

①基于TCP协议,面向连接,安全
②基于请求-响应模型,一次请求对应一次响应
③无状态‌协议,每次请求独立,服务器不保存会话信息。为实现状态管理,常借助Cookie或Session机制

优点:速度快
缺点:多次请求之间不能共享数据

HTTP协议-请求协议

请求数据格式

在浏览器中点击F12查看HTTP协议的请求标头
image
image
如果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!";
    }
}

效果如下:
image
image

HTTP协议-响应数据

响应数据格式

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

常见的响应状态码如下:
image
其中3xx表示重定向,也就是当前访问A服务器时发现需求资源不在A服务器而重定向到了B服务器
image

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

如果我们之前的访问路径出现了错误,那么我们就会得到错误的响应状态码,责任在于客户端(客户端访问出错)
image
如果我们的程序抛出异常,那么此时就会是服务器错误状态码(服务端代码出错)
image
image

常见的状态码如下:
image

响应数据设置

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.");
    }
}

效果如下:
image
image

除了使用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>");
    }
}

效果如下:
image

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

posted @ 2026-03-18 11:55  tcswuzb  阅读(1)  评论(0)    收藏  举报