SpringBoot - HTTP - Web Server

243 阅读5分钟

SpringBoot - HTTP - Web Server

1 SpringBootWeb

1.1 SpringBootWeb
1.2 开发步骤
1.2.1 创建SpringBoot工程项目

​ 基于Spring官方骨架,创建SpringBoot工程

1.2.2 定义请求处理类
@RestController
// 加上@RestController注解表示这个类被Spring管理, Spring会创建这个类的对象
public class HelloController {

    @RequestMapping("/hello")
    // 此处用@RequestMapping 用于指定处理 "/hello" 路径的 GET 请求。当客户端发送 GET 请求到 "/hello" 路径时,该方法会被调用
    public String hello(){
        System.out.println("Hello World");
        return "Hello World";
    }
    
}    
1.2.3 测试运行

​ 运行SpringBoot自动生成的引导类

1.3 注意
1.3.1 @RestController/ @RequestMapping

​ @RestController是 ResponseBody 和 Controller的结合体, 指当前被注释的类归于Spring管理, 而且可以把返回值return里面的数据响应给前端

​ @RequestMapping 是为方法标记一个特殊唯一映像, 当这个映像被访问, 就调用该方法.

1.3.2 启动类 和Controller

​ 启动类启动时会到所在目录和子目录下寻找Controller, 所以, Controller必须放置于启动类同目录或者子目录下, 否则不会被访问 ,写了白写

1.3.3 端口冲突

​ 修改Resources文件夹下面的application.yml 的server.port = xxxx

​ 如果为空则为默认值80

1.4 Web分析

​ 浏览器:

  • 输入网址:http://192.168.100.11:8080/hello

    • 通过IP地址192.168.100.11定位到网络上的一台计算机

      我们之前在浏览器中输入的localhost,就是127.0.0.1(本机)

    • 通过端口号8080找到计算机上运行的程序

      localhost:8080 , 意思是在本地计算机中找到正在运行的8080端口的程序

    • /hello是请求资源位置

      • 资源:对计算机而言资源就是数据
        • web资源:通过网络可以访问到的资源(通常是指存放在服务器上的数据)

      localhost:8080/hello ,意思是向本地计算机中的8080端口程序,获取资源位置是/hello的数据

      • 8080端口程序,在服务器找/hello位置的资源数据,发给浏览器

    服务器:(可以理解为ServerSocket)

  • 接收到浏览器发送的信息(如:/hello)

  • 在服务器上找到/hello的资源

  • 把资源发送给浏览器

我们在JavaSE阶段学习网络编程时,有讲过网络三要素:

  • IP :网络中计算机的唯一标识
  • 端口 :计算机中运行程序的唯一标识
  • 协议 :网络中计算机之间交互的规则

2 HTTP

2.1 定义

​ HTTP:Hyper Text Transfer Protocol(超文本传输协议),规定了浏览器与服务器之间数据传输的规则。

​ /\ http是互联网上应用最为广泛的一种网络协议

​ /\ http协议要求:浏览器在向服务器发送请求数据时,或是服务器在向浏览器发送响应数据时,都必须按照固定的格式进行数据传输

2.1.1 HTTp特点

​ /\ 基于TCP协议: 面向连接,安全

​ /\ 基于请求-响应模型: 一次请求对应一次响应(先请求后响应)

​ /\ HTTP协议是无状态协议: 对于数据没有记忆能力。每次请求-响应都是独立的

2.2 HTTP协议
2.2.1 请求协议

​ 指浏览器将数据以请求格式发送到服务器

​ 包括:请求行请求头请求体

​ 常用请求协议: Get/Post

区别方式GET请求POST请求
请求参数请求参数在请求行中。
例:/brand/findAll?name=OPPO&status=1
请求参数在请求体中
请求参数长度请求参数长度有限制(浏览器不同限制也不同)请求参数长度没有限制
安全性安全性低。原因:请求参数暴露在浏览器地址栏中。安全性相对高
2.2.2 响应协议

​ 指服务器将数据以响应格式返回给浏览器

​ 包括:响应行响应头响应体

相应状态码

状态码分类说明
1xx响应中 --- 临时状态码。表示请求已经接受,告诉客户端应该继续请求或者如果已经完成则忽略
2xx成功 --- 表示请求已经被成功接收,处理已完成
3xx重定向 --- 重定向到其它地方,让客户端再发起一个请求以完成整个处理
4xx客户端错误 --- 处理发生错误,责任在客户端,如:客户端的请求一个不存在的资源,客户端未被授权,禁止访问等
5xx服务器端错误 --- 处理发生错误,责任在服务端,如:服务端抛出异常,路由出错,HTTP版本不支持等

3 Web Server - Tomcat

3.1 定义

​ 服务器,也称伺服器。是提供计算服务的设备。

​ 服务器软件:基于ServerSocket编写的程序

​ - 是一个运行在服务器设备上的应用程序

​ - 能够接收客户端请求,并根据请求给客户端响应数据 Web服务器: 是一个 应用程序(软件),对HTTP协议的操作进行封装

3.2 TomCat

​ Tomcat: 是一个免费的开源的轻量级web应用服务器. 包含一个servlet容器, 当服务器发送请求的时候, 命令没有直接送达服务器上controller的java程序, 而是通过tomcat利用了dispatchservlet进行解析

​ Controller包括映射和对应的方法, dispatchservlet相当与一个map键值对,存放(url, method), 请求发送后, tomcat首先获取到所有发送的数据, 并封装到一个HttpServletRequest里面, 然后根据请求的路径在Controller里面查询对应的方法, 传递HttpServletRequest. 当controller需要把数据响应回去的时候, tomcat又把数据封装到HttpServletResponse内返回

代码: 该行代码位于一个springboot项目controller文件夹下, springboot通过内嵌的tomcat接收一组账号密码请求, 并响应


@RestController
public class getController {
    @RequestMapping("/login")
    public void loginPage(HttpServletResponse response, HttpServletRequest request) throws IOException {
        //Request
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println("账户和密码: "+ username + password);
        // Response
        if(("admin".equals(username))&&("admin".equals(password))){
            response.getWriter().write("You are logged in ");
        }else {
            response.getWriter().write("You are failed to log in");
        }
    }