互联网简介

在即将开始Java Web开发之旅之前,让我们先来简单了解一下互联网(Internet)的技术内涵和发展历史吧!

进入Java Web开发领域,意味着你将以一个程序员的身份加入到互联网的大潮当中。那么从技术视角来审视互联网,如果打开互联网的内部,其内部结构会是什么样子呢?。

互联网指的是通过TCP/IP协议族相互连接在一起的计算机的网络。TCP是Transmission Control Protocol,传输控制协议;IP是Internet Protocol,网际协议。TCP/IP协议族是一个网络通讯模型,是当前互联网通讯的基础架构。

  • IP用来去识别网络上的一台计算机。计算机要连接到一起相互通信,首先需要知道连接的目标计算机,而IP就能标识一台计算机。做一个类比,我们人跟人之间也需要建立连接才能交流,在一群人中说话,首先喊出一个人的名字,他就知道你在跟他说话了。IP就是计算机的名字。

  • TCP是计算机之间控制传输信息的协议,同样的类比,就是人与人之间沟通的语言和方式。一个不会外语的中国人跟一个美国人交流是无效的,就跟好像一台计算机发送目标计算机无法识别的数据包。能够识别出网络上的计算机,同时也能以相互理解的方式进行通讯,这样计算机就可以连接到一起了。

Clipboard Image.png

互联网是如何发展起来的呢?战争往往是科技发展的原动力,互联网也不例外。互联网诞生于冷战时期,美国国防部研制的APANET是互联网的原型,那时主要用来传递战争情报。到了1982年,TCP/IP协议被标准化了,Vint Cerf和Robert Kahn将Internet的概念正式提出来了,因此他们也被誉为这个互联网之父。2004他们获得了叫计算机界的诺贝尔奖——图灵奖,这是计算机界能够获得的最高的终生荣誉。Vint Cerf现在依然是Google的互联网首席科学家。

随后美国自然科学基金会建立了各个大学之间的高速传播的网络NSFNET,后来转为商用。如果把互联网想成是一棵大树,NSFNET构成最重要的几个核心主枝干。后面越来越多的子网或者其他的网络,逐渐的连到这个主干上,从而形成了整个全球化的互联网。

Clipboard Image.png

Web的诞生

在互联网的发展过程中,World Wide Web出现于1990年。所谓“Java Web 开发”,这其中的Web便是World Wide Web的简称,中文称为万维网。

在上面这张图中,World Wide Web的位置很有趣。可以发现,这张图中在这个词之前的都是冷冰冰的技术术语,非计算机专业的同学可能都没有听过。但是在World Wide Web之后的很多词语都耳熟能详了吧。比如Yahoo、Google和Facebook,这都是互联网发展历史上里程碑式的伟大企业。为什么会有这个现象呢?

在TCP/IP协议上传输信息的方式很早就出现了,比如FTP就是通过TCP/IP传输文件的方式。为什么万维网会带来这么神奇的效应呢?因为它第一次带来了一种叫做超媒体(Hypermedia)的内容形态。超媒体可以在TCP/IP协议之上的传输,可以包含文字、音频、视频,同时可以相互链接,是一种全新的信息表达方式。

万维网是由欧洲粒子研究中心的科学家博纳斯.李发明的。他也是一个互联网发展历程中里程碑式的人物,设计了一套支撑万维网的一整套体系。其实严格来说,中国商业上的互联网报道,严格意义上指的其实都是Web,即万维网。比如大家可能听过这样的故事,说马云在1995年的时候,在美国看到了互联网,所以回国创办了阿里巴巴,那个时候他们做的是中国黄页。其实更准确地说,马云看到的其实是万维网。从技术上理解,中国黄页就是将企业信息描述成为超媒体(就是HTML文件),让所有人都能访问到。

Web最早只是一种静态信息的发布媒介,就是我们访问到的网页都是事先写好的固定信息。在发展过程中,逐渐可以用来实现动态的功能。即通过浏览器不仅仅能够看静态的信息,还是使用动态的业务功能。1994年诞生的Amazon就是一个电子商务网站,是典型动态Web应用。Web诞生之后,不管在商业还是在技术上都发展极其迅速。以至于2001年甚至出现了.com泡沫,那个时候只要企业做一个.com的网站就被认为是一个高科技企业。一个.com网站,从技术上来看,就是万维网这个超过规模的分布式系统中的一个小节点。

所以万维网的出现之后,真正的改变普通人生活的各类网络应用才开始不断涌现。这张图应该是2013年制作的,如果这两年来画这张图,应该可以看到Uber和Airbnb这样互联网企业了。

Web的技术内涵

万维网最早其实就是一帮科学家在玩,他们希望通过互联网来传送实验数据。因此发明了描述信息、定位信息和传输信息的一整套技术体系。

万维网从技术内涵上怎么来理解呢?首先它是运行在互联网上的,是一个TCP/IP协议之上的应用协议,它是一种超文本文档相互链接形成的一种超大规模的分布式系统。

这里需要了解一下三个术语:HTTP超文本传输协议、HTML超文本语言和URL统一资源定位服务。虽然是技术术语,但是在我们每天的上网过程中都能看到它们的痕迹。

  • 今天你们经常听到HTML5,比如微信的HTML5页面,HTML5游戏等。HTML是从1.0版本开始的,有一个叫W3C的标准化组织,逐步在维护这样一套HTML语言的标准,一直演化到今天的HTML5。HTML的作用是描述超文本文档。比如说我们希望有一个东西展示给用户,你需要用HTML表达出来,这样才能放到万维网上让别人浏览。
  • URL可以理解为网址,就是我们在浏览器中输入的一个字符串。它用来定位超文本文档,URL协议定义了Web上如何标识出一个网页,即超文本文档。这跟IP协议如何标识出一台计算机的意义是相似的。
  • 我们在浏览器中输入网址,会看到网址前面都有一个“http”,这指的就是一种HTTP协议。HTTP协议定义了如何与超文本交互,信息通过超文本文档描述好了,也可以定位到了,接下来就需要通过HTTP协议去访问。HTTP协议定义了一套与网页交互的工作,我们暂时不去细究,我们只需知道这是获取信息的一种协议,浏览器会把我们的各种动作翻译成HTTP协议相关动作与Web服务器进行交互,并且将得到的超文本文档渲染成可读的内容让我们方便浏览。我们所谓的“连接”在技术层面都时这些协议在默默地发挥着基础设施的作用。这就是Web的基本原理。

访问一个网页时发生了什么?

基于对这三个协议的理解,我们来重新审核在浏览器中访问一个Web页面的过程。

Clipboard Image.png

在移动端和PC端都可以访问网页,比如我们去访问Google的页面,google.com网址就是符合URL规范的网址。浏览器看到这个网址,首先去查询DNS(Domain Naming Service)服务器,DNS服务器会将网址转换为IP地址。万维网是运行在TCP/IP协议之上的,所以首先需要知道Web服务器的IP地址,DNS帮我们做了这件事情。

有了IP地址,浏览器就可以基于HTTP协议,向远程的Web服务器发送请求了。而Google的Web服务器就能够接收到这样的请求,收到这样的请求之后,它就会调用后端的一系列功能并且最终组装出HTML页面,通过HTTP协议返回给浏览器。浏览器把返回的HTML文本渲染成为一个美观而且可读的页面,这就是在浏览器中看到Google的页面了。这整个过程是在TCP/IP协议之上完成的,Web请求和Web响应都会安装TCP协议要求的方式进行打包和传输。

了解Java Web开发

从用户的角度,我们已经很清楚访问Web应用的整个过程了。但是现在我们需要变身为一个Java Web开发者了,我们现在需要开发出Web应用,让普通用户可以与我们的应用交互。那作为开发者我们需要做什么呢?

静态的Web页面只需要使用HTML语言就可以编写,服务器会根据URL地址找到该页面以HTTP响应的格式返回给客户端。但是一个实用的Web应用肯定是动态,即页面的内容是通过程序在运行时动态生成的,而我们要做的就是编写一组HTTP请求处理程序。

alter-text

从开发者的角度来看,一个请求处理的流程是这样的:

  1. 监听Web服务器某网络端口,例如80
  2. 从网络端口读取HTTP请求信息;
  3. 根据HTTP请求信息进行处理,生成HTTP响应内容;
  4. 将响应内容通过网络I/O接口返回;
  5. 返回第二步,重复。

基于Java进行开发,我们只需要专注于第三步就行了,Java提供的Web容器会帮我们处理其它的步骤,这个容器成为Servlet容器,Tomcat就是一种Servlet容器的实现,你接下来马上就会用到。所以我们的主要工作就是编写处理请求的Java Servlet代码。

alter-text

所以简单地理解,一个Servlet就是一段将HTTP请求信息转换为一组HTML标签内容的程序,我们开发者做的工作就是实现这种转换。

一个HTTP请求信息包含哪些内容呢? 你可以从浏览器中的网址就能看到,比如Spring Boot——开发新一代Spring Java应用这个页面的网址是这样的:

alter-text

  • http就是告诉浏览器通过HTTP协议来放资源。
  • tianmaying.com是URL中的主机名称,称之为Host,表示Web资源(你此时可以认为就是Web页面)所在的主机的位置。
  • 80是Web应用在服务器中占用的端口号,所以不同的端口号对着一台服务器上的不同Web应用。
  • tutorial/spring-boot-overview就是URL路径,不同的URL路径一般就对应着一个不同HTTP请求处理程序,就如前面的图中所看到的那样。

你可能会说浏览器中没有显示tianmaing.com后面的:80,这是因为80代表的是端口号,Web应用默认的端口号是80,所以就没有显示。

有时我们需要在URL的后面增加参数,比如类似这样的URL:

alter-text

将到这里你现在应该清楚作为一名Java Web开发者的主要工作了:编写Java代码,将HTTP请求中的URL路径和参数等信息转换为HTML内容。所以简单来说,接下来的时间里,你需要进行以下的学习和实践:

  • 建立编程环境,熟悉Java这门编程语言
  • 学习处理HTTP请求的相关机制和编程接口
  • 掌握HTML语言以及动态生成HTML内容的技术
  • 动态的功能一般都涉及数据存储,所以你需要了解数据库
  • 实战项目中的一些最佳实践

千里之行,始于跬步,先赶紧把Java开发环境安装和配置起来吧!

登录发表评论 注册

AOKI123

看懂了大概,JAVA基础学到一半了,备战JAVA WEB。

反馈意见