在即将开始Java Web开发之旅之前,你是否想过Web到底是什么? 要了解Web,你需要先了解另一个你耳熟能详的概念:互联网(Internet)。
你或许听过互联网+,各种互联网思维,如果从技术视角来审视互联网,如果打开互联网的内部,其内部结构会是什么样子呢?
互联网指的是通过TCP/IP协议族相互连接在一起的计算机的网络。TCP是Transmission Control Protocol,传输控制协议;IP是Internet Protocol,网际协议。TCP/IP协议族是一个网络通讯模型,是当前互联网通讯的基础架构。
互联网是如何发展起来的呢?战争往往是科技发展的原动力,互联网也不例外。互联网诞生于冷战时期,美国国防部研制的APANET是互联网的原型,那时主要用来传递战争情报。到了1982年,TCP/IP协议被标准化了,Vint Cerf和Robert Kahn将Internet的概念正式提出来了,因此他们也被誉为这个互联网之父。2004他们获得了计算机界的诺贝尔奖——图灵奖,这是计算机界能够获得的最高的终生荣誉。Vint Cerf现在依然是Google的互联网首席科学家。
随后美国自然科学基金会建立了各个大学之间的高速传播的网络NSFNET,后来转为商用。如果把互联网想成是一棵大树,NSFNET构成最重要的几个核心主枝干。后面越来越多的子网或者其他的网络,逐渐的连到这个主干上,从而形成了整个全球化的互联网。
当多台计算机需要相互通信传输数据时,他们必须遵循相同的协议(Protocol),协议可以认为是通信双方遵循的一种约定——在此基础之上,双方才能够相互理解通信的内容。
类比:来自两个不同国家的人必须使用同一种语言才能够进行交流
在计算机科学里,客户端服务器模型是一种非常流行的通信模型,通信的双方被抽象为客户端(Client)和服务器(Server):
a
, b
的和a + b
a
, b
的和a + b
的值经过计算后返回客户端这个模型可以用下图表示:
在Client-Server模型中,第一个要解决的问题是——客户端向服务器请求服务,服务器的地址在哪里。可能使用过计算机的同学都知道,如果计算机要接入互联网,那么必须拥有一个IP地址。IP地址正是通过IP协议分配给网络中的各个设备。例如Google搜索服务器的地址是:216.58.199.100,那么当我们使用Google时,实际上计算机会在网络上寻找IP地址216.58.199.100
并与之进行通信,请求Google为我们提供搜索服务。
当客户端知道服务器的IP地址后,接下来就是如何与之通信。TCP协议正是解决数据传输层的通信协议,它能够在不同的计算机之间建立可靠的像管道一样的连接。如下图所示:
计算机操作系统将TCP连接抽象为套接字(Socket),应用程序通过使用Socket接口完成TCP连接,通过TCP连接,客户端可以向服务器发送一个一个的数据包(Packet)。例如发送a=1,b=2
这样的文本数据,服务器接收并计算得到结果3
以后,同样通过数据包将其发送回客户端。
计算机的操作系统中同时运行着多个进程(例如IM工具,邮件服务器,Web服务器),当操作系统收到与其他计算机建立TCP连接后,它如何知道收到的数据包应该交给哪个进程来处理呢?答案是端口(Port),应用程序通过操作系统提供的Socket接口建立TCP连接时,必须告诉操作系统通过哪一个端口获取TCP数据包(端口的取值范围是0-65535,不同的进程不可以使用同一个端口),这个过程也叫应用程序监听(Listen)端口。如下图所示:
当客户端发起的TCP连接地址是216.58.199.100:80
时(IP:Port
形式的地址),服务器操作系统对于每一个访问80端口的TCP数据包,交给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这样互联网企业了。
万维网最早其实就是一帮科学家在玩,他们希望通过互联网来传送实验数据。因此发明了描述信息、定位信息和传输信息的一整套技术体系。
万维网从技术内涵上怎么来理解呢?首先它是运行在互联网上的,是一个TCP/IP协议之上的应用协议,它是一种超文本文档相互链接形成的一种超大规模的分布式系统。
这里需要了解一下三个术语:HTTP超文本传输协议、HTML超文本语言和URL统一资源定位服务。虽然是技术术语,但是在我们每天的上网过程中都能看到它们的痕迹。
基于对这三个协议的理解,我们来重新审核在浏览器中访问一个Web页面的过程。
在移动端和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协议要求的方式进行打包和传输。
从用户的角度,我们已经很清楚访问Web应用的整个过程了。但是现在我们需要变身为一个Java Web开发者了,我们现在需要开发出Web应用,让普通用户可以与我们的应用交互。那作为开发者我们需要做什么呢?
静态的Web页面只需要使用HTML语言就可以编写,服务器会根据URL地址找到该页面以HTTP响应的格式返回给客户端。但是一个实用的Web应用肯定是动态,即页面的内容是通过程序在运行时动态生成的,而我们要做的就是编写一组HTTP请求处理程序。
从开发者的角度来看,一个请求处理的流程是这样的:
80
;基于Java进行开发,我们只需要专注于第三步就行了,Java提供的Web容器会帮我们处理其它的步骤,这个容器成为Servlet
容器,Tomcat就是一种Servlet
容器的实现,你接下来马上就会用到。所以我们的主要工作就是编写处理请求的Java Servlet
代码。
所以简单地理解,一个Servlet
就是一段将HTTP请求信息转换为一组HTML标签内容的程序,我们开发者做的工作就是实现这种转换。
一个HTTP请求信息包含哪些内容呢? 你可以从浏览器中的网址就能看到,比如Spring Boot——开发新一代Spring Java应用这个页面的网址是这样的:
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:
将到这里你现在应该清楚作为一名Java Web开发者的主要工作了:编写Java代码,将HTTP请求中的URL路径和参数等信息转换为HTML内容。所以简单来说,接下来的时间里,你需要进行以下的学习和实践:
千里之行,始于跬步,先赶紧把Java开发环境安装和配置起来吧!
登录发表评论 登录 注册
武器二