当您在网络浏览器中输入www.google.com时,它将在默认端口80上打开与Google服务器的连接(通过DNS查找以查看www.google.com的IP地址)并请求该网页。Google服务器以一个网页作为响应,您的浏览器在网页上绘制该网页(通常是通过进一步调用图像,CSS和JavaScript)。
当您转到localhost:8080时,情况完全相同。Localhost服务器名称始终会解析为您正在运行的计算机,并使用127.0.0.1的伪IP地址(您的计算机将有两个IP地址-每台计算机都有一个IP地址,而真实的是一个)。因此,您必须在本地运行一个Tomcat实例,以侦听端口8080上的连接。
为什么使用端口8080而不是默认的http端口80?好吧,以防万一您已经有一个网络服务器。
通常,您有Web服务器和应用程序服务器。
Web服务器(例如Apache httpd)提供静态页面。实际上,它就像一台精美的单向FTP服务器。您打开一个TCP连接,并使用HTTP命令(通常是GET)请求一个文件。网络服务器返回一个HTML文件,然后您的浏览器将其下载并解析,查看是否需要其他图像并请求这些图像。Web服务器的速度非常快,但基本上是从本地磁盘中取出文件并返回文件。
应用服务器(例如Tomcat或JBoss)与之类似,只是它通常运行代码以“创建”您要的页面,而不是直接从磁盘上将其提起。创建该页面的作用取决于您的应用程序。它可以连接到数据库,运行程序,随机提供页面...等等。例如,当您登录在线银行时,应用服务器会为您设置一个会话,并在Cookie中返回该会话ID,每次您发出请求时,浏览器都会重新发送,直到您注销。因此,如果您要求“我的余额”页面,那么银行将根据您的会话ID查找您的身份,然后转到其数据库以获取您的姓名和银行余额,然后创建一个页面,内容为“嗨约翰·史密斯,您的余额是100欧元。” 与Web服务器相比,应用服务器通常速度较慢,但用途更多。
许多地方的WebServer在默认端口80上运行,然后AppServer在辅助端口(例如8080)上运行。因此,可以快速提供静态页面,并且当用户单击将其带到动态页面的链接时,该链接将转到8080(应用服务器会对其进行响应),或者将Web服务器设置为将某些请求转发到应用服务器(在在这种情况下,它仍然看起来像默认端口80,因此对用户来说更好一些。
当然,这是一个非常高级的概述,没有什么是黑白的。大多数Web服务器可以通过运行脚本(通常是通过使用Perl或PHP的脚本通过CGI)创建一些动态内容,并且大多数应用服务器还可以像Web服务器一样提供纯文件。实际上,可以仅运行应用程序服务器并将Tomcat端口号从8080更改为80。
最终,许多应用程序不再为每个请求提供完整的HTML页面(这是缓慢而低效的),而是使用AJAX发送JSON或XML的数据片段来响应。返回您用来输入搜索查询的原始www.google.com,点击“搜索”并获得结果页面。现在,当您键入内容时,浏览器会不断向Google发送AJAX请求,然后Google会根据您到目前为止输入的内容响应最新的搜索结果,然后您的浏览器会更新页面。这意味着无需等待用户提交页面,就可以更快,更动态地向用户提交页面(就像老式学校桌面应用程序一样)。