Java Web基础回炉和提升暨文集开篇

前言

在上一个文集Java基础回炉中,回顾和深入学习了Java 基础内容,这一文集将回顾Java Web基础。首先,我们从面试题目入手,鸟瞰请求资源的整个过程,然后剖析每个步骤中的知识点,达到各个击破的效果。最后,我们会分析业界对相关步骤进行优化从而演化出来的框架技术。


文集目录

Java Web基础回炉和提升暨文集开篇


1. 概述

(1)从面试问题出发:

在面试的过程中,面试官经常会问到一个问题。当用户在浏览器客户端地址栏中输入网站,按下enter键之后,到用户获得资源页面的整个过程经历了哪些步骤?

例如在地址栏输入我的多作者平台网址:http://www.timereview.cn/ ,到获取到下面页面产生了哪些步骤?

我认为这是一个非常经典的问题,它让我们从高纬度去鸟瞰Java web的全貌,而不是一开始就死扣细节问题。

若新手在学习Java Web开发之前把这个全局性问题弄清楚,明白在哪个步骤用到了哪些知识点,业内哪些框架对哪个过程进行了优化,这对相关知识的学习非常有指导性意义。

(2)类比借书过程

在用术语讲这个过程之前,我想以更加生活化的例子说明整个流程:

大家都有借书的经历,在这个事情中,读者是资源的索取者、图书馆是资源的保存者,而书籍就是读者想要从图书馆中索取的资源。

那随便一个人都可以去图书馆借书吗?不是的,只有持有读者证的人才能去图书馆借书。所以读者证就是读者和图书馆建立联系的载体,也就是读者和图书馆达成的约定和协议。

好了,你有了读者证,你就有资格到任何图书馆借书吗?又不是的,你只能到读者证对应的图书馆去借书。

然后你拿着读者证去发证的图书馆找书,你想要找到一本叫做《Java Web开发》的书籍,根据你的书籍类型应该是计算机相关的书籍,然后你就会去计算机分类区去找。

如果这本书在图书馆里,你当然能最终借到这本书,然后美滋滋的学习,如果这本书不在或者被借走,那你就收到“sorry,404,你要的资源被外星人带走了”

(3)真实过程

那下面我们看看,你在互联网上获取资料,整个过程又到底经历了哪些步骤(这里我们只讲步骤,具体实现将在后面的文章中详细介绍。)

在这件事情中,有Web浏览器、Web服务器和资源三个对象,Web浏览器是资源的索取者,Web服务器是资源的保存者,而资源通常是静态页面或动态页面。

首先,既然你在地址栏输入了链接(URL),根据URL的内容,那么你就知道你要去哪个“图书馆”,去获取哪一本“图书”了,不过当前“图书馆”的这个名字是个别名。

那我们如何根据别名找到它的真实名称,也就是服务器IP地址呢?这时候就要将域名的网络地址部分解析成IP了,这里就涉及到域名解析的问题,后面会详细介绍。
https://www.cnblogs.com/gnss523-webrtc/articles/4834900.html

找到服务器后,浏览器会尝试通过TCP三次握手和服务器建立连接,建立连接之后,浏览器根据Http规范产生请求报文并通过套接字向服务器发送。

当Web服务器收到浏览器的数据请求后,先解析请求报文,定位请求资源。找到资源后,服务器将资源通过TCP套接字回应给客户端,由客户端读取Http报文。

客户端浏览器会将Http报文中的响应数据进行解析,并在浏览器窗口中显示。

综上,当你在览器地址栏键入URL,按下回车之后会经历以下流程:

  1. URL被发送至DNS 服务器, URL被域名解析软件解析,得到Web服务器IP;
  2. 根据 IP 地址和默认端口 80,浏览器三次握手和Web服务器建立TCP连接;
  3. 浏览器发出Http请求报文,报文内容包括URL中资源名称。
  4. Web服务器收到浏览器的数据请求后,先解析请求报文,根据资源名去定位请求的资源,并根据定位结果产生响应报文,并响应给服务器。
  5. 一次请求完毕,默认关闭TCP连接;
  6. 浏览器会将Web服务器响应的数据进行解析,并通过用户友好的界面进行展示。

2.涉及知识点

我们分析了在览器地址栏键入URL,按下回车之后发生的事情,在这个过程中涉及了许多知识,在这里罗列一下,其中的一些知识点也是后面我们需要撰文细讲的内容。

  • Web服务器
  • URL
  • DNS解析原理
  • TCP/IP协议,三次握手、四次握手
  • Http协议
  • 资源形式、服务器如何定位资源

当然这些知识点还只是从大的角度出发,还有很多细节知识需要去掌握,但是我们先俯瞰整个流程,后面再深入相关细节。

3.J2EE Web学习路线图

http://www.javashuo.com/article/p-pcajnbzx-cg.html
上面通过面试问题出发,将浏览器客户端请求资源全过程描述了一遍,并将大的知识点整理出来了。

这里我也将J2EE Web的知识结构图整理出来,希望让大家在初次学习或者回炉的过程中有更清晰的思路。这里要说明一点,我们会把主要精力放在Java后端开发上,所以涉及到前端的知识希望大家能自己去学习。

4. 总结

本篇文章为Java web文集的开篇,主要从面试问题** “在浏览器地址栏输入URL,按下回车键后发生了什么?”**出发,粗略的介绍每一步骤发生的事情,整理了Java web基础应该学习的知识点,为后面深入具体知识做好准备。

所以,读完这篇文章后应该知道怎么回答上述面试问题了!