为什么在浏览器的地址栏上输入 url 就能访问到 Web 网页

计算机网络的问题の浏览器访问资源


在学习多线程的时候,我的思维延伸到了多线程的应用场景,想到了一句话:

“一个线程对应一个 http 请求,web 容器会为每一个 http 请求开启一个线程去处理。”

那这不就是多线程的应用吗?
然后我启动 tomcat,然后访问:http://localhost:8080/TestJstl/t/SecondServlet,我的 Servlet 的核心就是简单的一句:

out.print("123");

然后,浏览器就做出了响应——显示了“123”。突然觉得好神奇!为什么会这样?

顿时觉得好疑惑,为什么在浏览器的地址栏上输入 url 就能访问到 Web 网页。这是为什么?我还真的不知道怎么回答。

一开始我也不知道我到底是卡在哪里,或者说不知道怎么查我想要的那个信息,不过当我把疑惑写下,并阐尝试着去解决,一边解决一边又多了新的疑惑,最后思路就清晰了。

我的疑惑:
为什么我输入 http://localhost:8080/TestJstl/t/SecondServlet,就能访问到我写的那个 SecondServlet;
为什么我输入 http://localhost:8080/TestJstl/t/SecondServlet,浏览器会显示“123”;
为什么访问 www.baidu.com,浏览器显示的是百度首页;
浏览器怎么知道我要访问的资源在哪里?

先来理解一个概念,url

url 是什么,url 就是(Uniform Resource Locator)统一资源定位符,也就是说,url 就是表示你要访问的东西。而 url 是由“协议+域名+端口+路径”组成。而域名,通过 DNS 服务器解析,可以得到唯一的 ip 地址,而 ip 地址,就是连接互联网的一台主机的唯一标识。相当于人的身份证号码,是独一无二的,通过身份证号码可以确定唯一的一个人。同理,通过 ip 地址,或者说通过域名,可以确定唯一的一台连入互联网的主机,而 Web 服务器就是一台主机。(注意是连入互联网的主机)

因此,
对于第四个问题,答案是:通过 url 上的域名,可以定位到你要访问的资源在哪一台服务器上。

对于第一个问题,答案是:通过 url 上的域名和路径,先是通过域名可以确定到要访问的服务器是哪一台,然后通过路径确定你要访问的资源是什么,像问题1,要访问的就是 ip 为 localhost(会自动解析成 ip 地址),路径为“TestJstl/t/SecondServlet”(TestJstl表示项目名)。然后根据部署描述文件 web.xml 的描述:

  <servlet>
    <servlet-name>SecondServlet---testservlet-name>
    <servlet-class>TTT.SecondServletservlet-class>
  servlet>
  <servlet-mapping>
    <servlet-name>SecondServlet---testservlet-name>
    <url-pattern>/t/SecondServleturl-pattern>
  servlet-mapping>

可以知道,最终要访问的资源是 TTT.SecondServlet。

对于第三个问题,“为什么访问 www.baidu.com,浏览器显示的是百度首页”。通过 DNS 服务器,域名会自动解析为 ip 地址,这样,就相当于去访问某台服务器,而这个 ip 地址,对应的就是百度的服务器。在这里单纯的访问一个 ip 地址,而没有指名要访问的资源是什么也是可以的,因为我们可以设置默认访问的资源,这里对应着百度首页。

再补充一个知识点:HTTP 协议
首先,HTTP(超文本传输协议)和FTP(文件传输协议)和DNS(域名系统协议),都属于应用层的协议。
HTTP采用了请求-响应模型:客户端向服务器发送了一个请求报文(请求报文包括请求的方法、url、版本协议、请求头部和请求数据),服务器以一个响应消息作为响应(响应的内容包括协议的版本、状态码、服务器信息和响应数据)。

对于第二个问题。url 的第一个组成部分是协议,最常用的协议就是 Http 协议,当输入 http://localhost:8080/TestJstl/t/SecondServlet,就向指定的服务器发起了一个 http 请求,然后服务器作出响应将超文本传输到本地浏览器。在浏览器的解析下,就显示出相应的界面了。


最后,脑袋又蹦出一个新的问题,为什么在浏览器地址栏上输入 url ,就可以访问到某个资源。为什么在文件夹里输入,却不能访问 url 上的资源?在我的电脑的地址栏上输入 www.baidu.com,就会跳转到浏览器并显示百度首页,这是为什么?

果然,还是因为我们使用的是浏览器。

浏览器:
其实就是一个解析工具,我们在地址栏输入URL(即网址),浏览器会向DNS(域名服务器)提供网址,由它来完成URL到IP地址的映射。然后将请求你的请求提交给具体的服务器,再由服务器返回我们要的结果(以HTML编码格式返回给浏览器),浏览器执行HTML编码,将结果显示在页面上。
浏览器的作用:一句话概括,根据用户的请求相示相关的网页数据(用户和网页交互的工具)。
(摘自百度知道)


刚刚又看了下自己写的这篇文章,一开始开头写的是“一个线程对应一个 http 请求,servlet 会为每一个 http 请求开启一个线程去处理。”想想说的不对,正确的应该是”web 容器为每一个 http 请求开启一个线程,并在线程中执行相应的 servlet 方法。”(web容器在线程池中拿一个线程出来并在线程中调用相应的servlet的 service()方法并向 service 方法传入 request参数和response参数)

大家如果路过又刚好看到哪里写的不对,请帮忙指出,感谢大家!!
请大家多多指教!

你可能感兴趣的:(计算机网络基础)