Web服务器
浏览器和服务器两端进⾏数据交互, 使⽤的就是HTTP协议
前⾯我们已经学习了 HTTP 协议, 知道了 HTTP 协议就是 HTTP 客⼾端和 HTTP 服务器之间的交互数据的格式.
Web 服务器就是对HTTP协议进⾏封装, 程序员不需要直接对协议进⾏操作(⾃⼰写代码去解析http协议规则),让Web开发更加便捷, 所以Web服务器也被称为WWW服务器, HTTP服务器, 主要功能是提供⽹上信息浏览服务.
常⻅的Web服务器有: Apache,Nginx, IIS, Tomcat, Jboss等
SpringBoot 内置了Tomcat服务器, ⽆需配置即可直接运⾏
Tocmat默认端⼝号是8080, 所以我们程序访问时的端⼝号也是8080
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.17)
2023-11-24 12:59:29.331 INFO 16464 --- [ main] com.example.demo.DemoApplication : Starting DemoApplication using Java 1.8.0_271 on LAPTOP-CVE710EG with PID 16464 (D:\JavaFrame\demo\target\classes started by 幽琴健 in D:\JavaFrame\demo)
2023-11-24 12:59:29.339 INFO 16464 --- [ main] com.example.demo.DemoApplication : No active profile set, falling back to 1 default profile: "default"
2023-11-24 12:59:31.210 INFO 16464 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2023-11-24 12:59:31.227 INFO 16464 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2023-11-24 12:59:31.227 INFO 16464 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.82]
2023-11-24 12:59:32.394 INFO 16464 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2023-11-24 12:59:32.394 INFO 16464 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2972 ms
2023-11-24 12:59:32.880 INFO 16464 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2023-11-24 12:59:32.891 INFO 16464 --- [ main] com.example.demo.DemoApplication : Started DemoApplication in 4.134 seconds (JVM running for 6.67)
8080 (http) with context path ''
注意这句日志,在Servlet中,路径是
http://ip:port/context path/servlet path
而现在在SpringBoot中
context path
就是空的了,直接就是servlet path
了
错误日志推荐从下往上一段一段看
请求响应流程分析
浏览器输⼊URL之后, 发起请求, 就和服务器之间建⽴了连接
服务器:
浏览器:
输⼊⽹址:http://127.0.0.1:8080/hello
通过IP地址127.0.0.1定位到⽹络上的⼀台计算机, 127.0.0.1就是本机
通过端⼝号8080找到计算机上对应的进程 , 也就是在本地计算机中找到正在运⾏的8080端⼝的程序
/user/sayhi是请求资源位置
- 资源:对计算机⽽⾔资源就是数据
- web资源:通过⽹络可以访问到的资源(通常是指存放在服务器上的数据)
- 资源:对计算机⽽⾔资源就是数据
http://127.0.0.1:8080/user/sayhi ,就是向本地计算机中的8080端⼝程序,获取资源位置是/user/sayhi的数据
8080端⼝程序,在服务器找/hello位置的资源数据,发给浏览器
服务器:
- 接收到浏览器发送的信息(如:/user/sayhi)
- 在服务器上找到/user/sayhi的资源
- 把资源发送给浏览器
小结
最开始学习Spring的时候, 会遇到很多问题, 更多是环境相关的问题.
我们不仅要学习 Spring 代码的基本写法, 更重要的是学习排查错误的思路。
程序猿调试 BUG 如同医⽣诊病.
⼀个有经验的程序猿和⼀个新⼿程序猿相⽐, 最⼤的优势往往不是代码写的多好, ⽽是调试效率有多⾼. 同⼀个问题可能新⼿花了⼏天都⽆法解决的, 但是有经验的程序猿可能⼏分钟就搞定了.
熟悉 HTTP 协议能让我们调试问题事半功倍.
- 4xx 的状态码表⽰路径不存在, 往往需要检查 URL 是否正确, 和代码中设定的 Context Path 以及Servlet Path 是否⼀致.
- 5xx 的状态码表⽰服务器出现错误, 往往需要观察⻚⾯提⽰的内容和 Tomcat ⾃⾝的⽇志, 观察是否存在报错.
- 出现连接失败往往意味着服务没有正确启动, 也需要观察 服务的⾃⾝⽇志是否有错误提⽰.
观察⽇志是调试程序的重要途径. 系统⽇志往往很多, 需要同学们耐⼼阅读, 经常阅读, 熟练了就能更快速的找到问题了