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