大家好,我是A导,消失了一年多,终于我又回到了CSDN,最近在学SpringMVC,遇到很多JavaWeb架构的问题,所以又回去复习了一下JavaWeb的知识,正好将原来整理的一些笔记汇总成博客。希望给初学者们一些帮助
今天这篇博文我们大致对JavaWeb有一个总体的印象,对一些基本概念进行解释(大家只需要初步有一个印象,知道这个东西是什么就行)所以本篇博客不会出现太多的代码。
1.什么是JavaWeb?
对于这个问题,我们直接照搬百度百科:Java Web,是用Java技术来解决相关web互联网领域的技术栈。web包括:web服务端和web客户端两部分。Java在客户端的应用有Java Applet,不过使用得很少,Java在服务器端的应用非常的丰富,比如Servlet,JSP、第三方框架等等。Java技术对Web领域的发展注入了强大的动力。
Javaweb一般情况下指的是Web服务端的开发,对于服务端,又存在很多Java编写的框架,例如Spring,SpirngBoat,SpringMVC,Mybatis,这些框架我们在后续的博客中都会有专题讲解。
2.JavaWeb基础知识
1.Servlet
无论大家以什么方式,或者看什么视频学习JavaWeb,基本都绕不开Servlet这个东西,我们在JavaWeb中接触到的Servelt其实就是一个Java程序,它能接收和处理前端发来的请求(Request)。它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
2. HTTP请求(HTTP Request)
了解这部分的时候,我们可以打开自己的浏览器,按下F12,然后点Network,刷新页面,拿到最上面的文件,点开即可看到请求和相应的相关信息,例如
点开最上面的www.baidu.com可以得到
我们先对General,Request Headers的部分字段进行分析
通用信息(General)
Request URL: https://www.baidu.com/ //请求地址
Request Method: GET //请求方法,get还是post
Status Code: 200 OK //
Remote Address: 36.152.44.96:443 // 远程主机的IP地址和端口
Referrer Policy: unsafe-url //协议
请求头(Request Headers)
Accept: text/html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Connection: keep-alive+
- Accept:Accept”报文头属性告诉服务端 客户端接受什么类型的响应
- cookie:客户端的Cookie就是通过这个报文头属性传给服务端
例如Cookie: $Version=1; Skin=new;jsessionid=5F4771183629C9834F8382E23
其中jsessionid用于判断客户端的多个请求是否隶属于一个Session - Referer:表示这个请求是从哪个URL过来的
- Cache-Control:对缓存进行控制,一般是控制缓存的时常
3.HTTP响应(HTTPResponse)
Cache-Control: private //缓存控制
Connection: keep-alive //连接
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8 //文件类型,编码
Server: BWS/1.1 //服务器信息
Set-Cookie: BDSVRTM=324; path=/ //设置COOkie的信息
Set-Cookie: BD_HOME=1; path=/
Set-Cookie: H_PS_PSSID=34100_33971_34222_34279_33848_34093_34111_26350; path=/; domain=.baidu.com
我们再来看一下上述通用头中出现的请求状态码
HTTP响应状态码(Status Code)
- 2xx 请求成功
- 3xx 重定向
- 4xx 找不到资源
- 5xx 服务器错误,一般是服务器出现了故障
200 (OK): 找到了该资源,并且一切正常。
302/307:临时重定向,指出请求的文档已被临时移动到别处, 此文档的新的url在location响应头中给出
相当于请求转发
302是请求转发
307是重定向
304 (NOT MODIFIED): 该资源在上次请求之后没有任何修改。这通常用于浏览器的缓存机制。
401 (UNAUTHORIZED): 客户端无权访问该资源。这通常会使得浏览器要求用户输入用户名和密码,以登录到服务器。
403 (FORBIDDEN): 客户端未能获得授权。这通常是在401之后输入了不正确的用户名或密码。
404 (NOT FOUND): 在指定的位置不存在所申请的资源。
HTTP响应头的属性
-
Cache-Control:服务端通过该报文头属告诉客户端如何控制响应内容的缓存。
常见的取值有private、public、no-cache、max-age,no-store,默认为private。
- private: 客户端可以缓存
- public: 客户端和代理服务器都可缓存(前端的同学,可以认为public和private是一样的)
- max-age=xxx: 缓存的内容将在 xxx 秒后失效
- no-cache: 需要使用对比缓存来验证缓存数据
- no-store: 所有内容都不会缓存
-
Connection:连接状态管理
-
Content-Type:文件类型,编码
Cache-Control*默认为private,缓存时间为31536000秒(365天)也就是说,在365天内再次请求这条数据,都会直接获取缓存数据库中的数据,直接使用。
3.我们从在浏览器的地址框中输入URL地址,按下回车到页面返回,经历了哪些步骤?
过程我们大致可以用下图表示
图片链接
我们大致说一下流程
- 请求发起后,游览器首先会解析这个域名,首先它会查看本地硬盘的 hosts 文件,看看其中有没有和这个域名对应的规则,如果有的话就直接使用 hosts 文件里面的 ip 地址。
- 如果在本地的 hosts 文件没有能够找到对应的 ip 地址,浏览器会发出一个 DNS请求到本地DNS(域名分布系统)服务器 。本地DNS服务器一般都是你的网络接入服务器商提供,比如中国电信,中国移动。然后从DNS拿到域名对应的IP地址
- 客户端与服务端建立TCP链接(3次握手)
- 建立TCP连接之后,发起HTTP请求,请求一般分为三部分请求方法URI协议/版本,请求头(Request Header),请求正文
- 请求处理
服务器端收到请求后的由web服务器(准确说应该是http服务器)处理请求,诸如Apache、Ngnix、IIS等。web服务器解析用户请求,知道了需要调度哪些资源文件,再通过相应的这些资源文件处理用户请求和参数,并调用数据库信息,最后将结果通过web服务器返回给浏览器客户端 - 关闭链接(四次挥手),浏览器解析获取到的资源,并显示在页面上
结束
通过本篇,大家大致对Javaweb,servlet,HTTP请求和响应有了初步的认识,下一篇我将给大家演示如何使用idea创建一个web项目,并且对web项目的结构进行分析。