【JavaEE】Web服务器与请求响应流程:深入了解如何处理Web请求

目录

      • Web服务器
      • 请求响应流程分析
      • 小结


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

而现在在SpringBootcontext 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 ⾃⾝的⽇志, 观察是否存在报错.
  • 出现连接失败往往意味着服务没有正确启动, 也需要观察 服务的⾃⾝⽇志是否有错误提⽰.

观察⽇志是调试程序的重要途径. 系统⽇志往往很多, 需要同学们耐⼼阅读, 经常阅读, 熟练了就能更快速的找到问题了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/697576.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

将视觉语言模型训练为智能手机助手

24年4月Agile Loop和德国弗赖堡大学的论文“Training A Vision Language Model As Smartphone Assistant”。 为了解决能够执行各种用户任务的数字助理挑战,该研究重点是基于指令的移动设备控制域。 用大语言模型 (LLM) 的最新进展,本文提出一种可以在移…

【软考】UML中的图之活动图

目录 1. 说明2. 图示3. 特性4. 使用方式4.1 对工作流建模4.2 对操作建模 1. 说明 1.Activity Diagram。2.活动图是一种特殊的状态图,它展现了在系统内从一个活动到另一个活动的流程。3.活动图专注于系统的动态视图,它对于系统的功能建模特别重要&#x…

快速对比 找出2个名单不同之处

import pandas as pd# 读取两个Excel文件 df1 pd.read_excel(1.xlsx) df2 pd.read_excel(2.xlsx)# 检查两个DataFrame的列是否相同 if list(df1.columns) ! list(df2.columns):print("两个Excel文件的列不一致。")print("文件1的列:", df1.co…

[力扣题解] 96. 不同的二叉搜索树

题目:96. 不同的二叉搜索树 思路 动态规划 f[i]:有i个结点有多少种二叉搜索树 状态转移方程: 以n3为例: 以1为头节点,左子树有0个结点,右子树有2个结点; 以2为头节点,左子树有1个…

微软: 用于文本到语音合成(TTS)的语言模型方法VALL-E

微软引入了一种用于文本到语音合成(TTS)的语言模型方法。具体而言,微软使用从现成的神经音频编解码器模型中得到的离散编码训练了一个神经编解码器语言模型(称为VALL-E),并将TTS视为条件语言建模任务,而不是像之前的工作那样进行连续信号回归。在预训练阶段,微软将TTS训练数据扩…

GO语言核心30讲 实战与应用 (WaitGroup和Once,context,Pool,Map,字符编码,string包,bytes包)

原站地址:Go语言核心36讲_Golang_Go语言-极客时间 一、sync.WaitGroup和sync.Once 1. sync.WaitGroup 比通道更加适合实现一对多的 goroutine 协作流程。 2. WaitGroup类型有三个指针方法:Wait、Add和Done,以及内部有一个计数器。 (1) Wa…

【iOS】架构模式

文章目录 前言一、MVC二、MVP三、MVVM 前言 之前写项目一直用的是MVC架构,现在来学一下MVP与MVVM两种架构,当然还有VIPER架构,如果有时间后面会单独学习 一、MVC MVC架构先前已经详细讲述,这里不再赘述,我们主要讲一…

Unity自定义动画-Animation动画数据-How is “fileIDToRecycleName“ generated

一般美术和程序分工明确的项目 fbx确实是和动画一一对应的; 但一些独立,或者小工作室的项目,就没法保证了,关键还是在于 Unity的 .meta 目录 查找和对比了一下 .fbx 和 .meta: 缓存和不缓存Animation 具体的Animat…

.NET开源、功能强大、跨平台的图表库LiveChart2

LiveCharts2 是 从LiveCharts演变而来,它修复了其前身的主要设计问题,它专注于在任何地方运行,提高了灵活性,并继承LiveCharts原有功能。 极其灵活的数据展示图库 (效果图) 开始使用 Live charts 是 .Net 的跨平台图表库,请访问 https://livecharts.dev 并查看目标平…

C++之map和set 的封装

通过红黑树的学习(C之红黑树-CSDN博客)让我了解到map和set的底层如何实现,这一次我们来对map和set进行封装。 目录 1.map和set底层原理 2.map和set的定义 3.map和set的仿函数 4.map和set的插入 5.map和set的迭代器 5.1迭代器的构造 5.2…

Golang | Leetcode Golang题解之第87题扰乱字符串

题目: 题解: func isScramble(s1, s2 string) bool {n : len(s1)dp : make([][][]int8, n)for i : range dp {dp[i] make([][]int8, n)for j : range dp[i] {dp[i][j] make([]int8, n1)for k : range dp[i][j] {dp[i][j][k] -1}}}// 第一个字符串从 …

blender cell fracture制作破碎效果,将一个模型破碎成多个模型

效果: 1.打开编辑-》偏好设置。搜索cell,勾选上如下图所示的,然后点击左下角菜单里的保存设置。 2.选中需要破碎的物体,按快捷键f3(快速搜索插件),搜索cell fracture。 3.调整自己需要的参数配置…