标签:B/S结构、javaweb、Tomcat、servlet规范、网络通信
1.B/S和C/S架构
众所周知,互联网通信分为C/S架构和B/S架构,具体如下:
C/S架构:
- C/S:Client/Server,即客户端/服务器架构
- 客户端:即发起请求的一端;如我们的qq客户端打字“你好啊”并且发送到对方;
- 服务器:接收请求的一端,如qq服务器接收到上述信息;
- 使用场景:娱乐市场
- 优点:客户端界面好看,减轻服务器负载,数据更安全
- 缺点:客户端更新频繁,用户必须下载客户端,
- 功能:服务器负责接收客户端发来的请求,称为request阶段,然后将找到的资源返回给客户端,称为response响应阶段。
B/S架构:
- B/S:Brower/Server,即浏览器/服务器架构
- 浏览器:即用户安装的浏览器,如chrome,firefox,edge
- 服务器:接收浏览器请求的一端,又称为web服务器,http服务器
- 其中Tomcat服务器较为常用,轻量级,免费
- 实现了两个JAVAEE规范【共13个】,即servlet规范和jsp规范
- 使用场景:企业
- 优点:轻量级,不必经常更新,可以发送任意指令
- 缺点:服务器负载大,速度慢
- 功能:服务器负责接收浏览器发来的请求,称为request阶段,然后将找到的资源返回给浏览器,称为response响应阶段。
- 关键点:网站的高并发问题
- B/S是学习的重点,因为java后端开发程序员经常会在企业中处理brower的请求,而对于web前端html,css和javascript仅做了解即可;而其中java后端关键就是servlet规范。
2.B/S架构角色划分
- 流程:用户在浏览器输入http://www.baidu.com:80/index.html之后,回车,此时浏览器会把该请求封装为request请求报文,经过dns解析为IP地址找到百度服务器的主机,通过80端口号与百度的web服务器建立通信,想要访问的是百度wb服务器根目录下的index.html页面,web服务器查找后返回response响应报文,即想要的资源。
- 不难发现,角色有:
- 浏览器→负责封装、解封HTTP请求报文【request请求,response请求】
- web服务器→根据URL寻找资源【Tomcat服务器、jetty服务器】
- 后端人员→负责编写java小程序和配置路径与程序类名的映射关系【YOU!】
- mysql数据库→存储资源,如员工工资表等【mysql,jdbc】
- HTTP请求报文【request】
- 结构:请求行【请求方式、URI、HTTP版本号】 、请求头、空白行、响应行
Get请求: GET /wodewangzhan/getservlet?username=45&password=55555 HTTP/1.1 //请求头 Host: localhost:8080 Connection: keep-alive sec-ch-ua: "Google Chrome";v="95", "Chromium";v="95", ";Not A Brand";v="99" sec-ch-ua-mobile: ?0 sec-ch-ua-platform: "Windows" Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Sec-Fetch-Site: same-origin Sec-Fetch-Mode: navigate Sec-Fetch-User: ?1 Sec-Fetch-Dest: document Referer: http://localhost:8080/wodewangzhan/index.html Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 //请求体
POST /wodewangzhan/postservlet HTTP/1.1 //请求头 Host: localhost:8080 Connection: keep-alive Content-Length: 34 Cache-Control: max-age=0 sec-ch-ua: "Google Chrome";v="95", "Chromium";v="95", ";Not A Brand";v="99" sec-ch-ua-mobile: ?0 sec-ch-ua-platform: "Windows" Upgrade-Insecure-Requests: 1 Origin: http://localhost:8080 Content-Type: application/x-www-form-urlencoded User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Sec-Fetch-Site: same-origin Sec-Fetch-Mode: navigate Sec-Fetch-User: ?1 Sec-Fetch-Dest: document Referer: http://localhost:8080/wodewangzhan/index.html Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 //请求体 username: 123456 password: 999999999
【注意】这里请求行中路径为URI,统一资源标识符,仅仅是资源的在站点的位置,他是整个URL的一部分。
- HTTP响应报文【response】
//第一部分:状态行 版本号 状态码 HTTP/1.1 304 //状态码:200 成功;404 资源不存在,要么路径出错,要么资源并没有启动成功 //405 请求方式和处理方式不一样,post用get处理 //500 服务器后台程序出错 //4开头 浏览器册出错 //5开头 服务器侧出错 // ok正常 not found 资源找不到 //第二部分 响应头 关键是content-type,告诉浏览器我返回的是什么类型的资源 ETag: W/"865-1637892866027" Date: Fri, 26 Nov 2021 02:20:44 GMT Keep-Alive: timeout=20 //响应时间,内容长度和类型; Connection: keep-alive //第三部分:响应体 <html> <head> <title>get请求</title> </head> <body> <h1>get server</h1>h1> </body> </html>
- HTTP请求方法中POST和GET方法的区别?
区别1:日常使用除非在form表单的method方法中显式声明为post,否则都是默认为get方式
区别2:post对长度类型无限制,get只能传输字符串,并且有长度限制
区别3:post的请求参数信息在请求体中,get请求参数在请求行中,即明文展示
区别4:get常用于获取服务器的数据,而post常用于向服务器提交数据,如文件上传
区别5:get是安全的,post由于上传文件因此有安全风险,同时为了保密,因此表单大多数使用的是post方法
区别6:get方式支持缓存,而post方式不支持浏览器缓存,因此如果想访问变动大的数据要用post,否则用get
相同点:二者都是name1=value1&name2=value2&name3=value3...的规范,而这里的 name字段就是相当于key字段,value就是对应key的value字段
- 互联网通信协议流程图
资源分类:静态资源和动态资源
- 静态资源
- 如html,js,css样式和图片、文本、视频等资源,有固定的存放位置,内容一般不改变的资源。
- 动态资源
- java小程序,即servlet对象,用户想要输入自己的信息经过网站的程序才能返回某个值,因此java小程序就是动态资源,用户想要获取某些操作的结果。
- web-inf目录:html,js,css资源不能放在这,因为受保护【有配置文件】
3.Tomcat服务器配置_手工配置_初级尝试
3.1 几个明确点:
- Tomcat是web服务器,端口默认为8080
3.2 配置流程
第一步:下载tomcat,如下所示,在左边选择版本,我这里选择tomcat9.
Apache Tomcat® - Welcome!https://tomcat.apache.org/【注意】tomcat10中有些原本中的库名发生了改变,由javax改为了jakarta,这是因为本来是javaee规范,oracle将tomcat捐给了apache开源基金会的原因。Apache Tomcat® - Welcome!
第二步:在系统环境变量添加java_home和catalina_home的环境变量,以便在cmd的dos窗口可以进行开发。
【PS】tomcat是java写的,自然需要jvm,即需要关联jdk包,同时由于tomcat不知道catalina在哪里,故需要加入catalina_home。
第三步:第一次启动关闭tomcat,即进入tomcat安装包\bin目录,cmd进入该目录,敲击startup可以发现启动了,然后shutdown即可。
第四步:建立站点文件夹并进行静态资源访问:
→webapp文件夹是站点文件夹,默认是root站点,这里新建crm文件夹
→→在crm文件夹放入静态资源,这里随便放一张图片,如4.jpg
→→→启动tomcat,注意不要关闭任何dos窗口
→→→→在浏览器输入http://localhost:8080/crm/4.jpg,回车,此时成功!
第五步:动态资源访问
【前知】需要知道的是,访问动态资源就是用户输入一段链接,t