WebServer 软件原理简介

一. B/S结构  和 C/S结构简介

1.1 C/S结构

所谓C/S 就是 Client – Server ,

在Client端有个界面程序.   User会通过这个Client端程序来读写  存放在Server端的数据.

我们常用的需要联 桌面程序例如 邮件客户端ThurderBird,  聊天工具Pidgin都是C/S结构的.

1.2 B/S结构

而B/S 结构 就是Browser – Server

User只需要通过浏览器就能读写 存放在Server端的的数据.

B/S结构无需在终端机器安装Client程序, 只需要1个浏览器.

上很多 站, 例如论坛,  页邮件客户端这些就是B/S结构的程序.

二, 什么是WebServer 和  WebServer软件

所谓webserver 就是 B/S结构的server.

而C/S 结构的Server作用跟webserver类似, 但是一般叫webserver.

所谓webserver软件就是能令1个Webserver启动http(https)服务的软件.

常见的webserver软件有:

IIS(微软),

JBoss,

WebLogic(收费)

Tomcat

等等

三, http 页浏览的原理.

在讨论WebServer的机制前, 我觉得有必要详述一下http 页浏览的原理.

3.1 络传输协议简介

我们知道浏览器是可以打开本地html文件( 页文件)的.

而浏览一个 站,  只不过是利用浏览器远程打开 放在Webserver的 页文件而已.

问题来了, 那么我怎么打开1个 络上的server上的文件呢.

可能有人觉得很简单,  大家都利用ftp打开过的机器的文件吧.

只需要ip地址 以及 文件在机器上的目录就可以了/p>

实际上是不足够的.

实际上, 需要的元素要三样

1. server的ip地址

2. server的传输协议(例如ftp, sftp…等)

3. 对方开放的端口(port)

如果对方不开ftp服务, 你即使知道ip地址以及文件路径也没用.

就好如 你知道老王家的书柜上有一本好书,  但是如果老王不想让你看, 你也看不了的.

*首先你得知道老王家哪里.

*而ftp服务就如老王提供了1个看书服务.

* 端口就如老王家里开了一个窗口, 你可以通过这个窗口来申请借书..     你必须通过这个窗口才能借到书.   老王很可能开通其他窗口提供借酒, 借钱什么的…

而http协议跟ftp协议优点类似, 但是http只能通过浏览器访问, 而且只能打开 页文件.

3.2 http协议工作步骤.

好了假如服务器WebServer 有1个 页文件.

而我家里的及机器有一个浏览器.

那么我到底怎么才能通过这个浏览器来打开webServer上的 页文件呢.

大概原理如下图:

在上面截图右下角, 就见到Request header信息, 这些就是浏览器发送给Webserver的信息.

它包括:

1. Host:  就是webserver的地址,  dns服务器会根据这个地址转换成真正的ip来找到指定的WebServer

2. User-Agent: 就是浏览者所使用的浏览器和操作系统信息, Webserver可以利用这些信息做一些逻辑上的分支处理.

3. Accept: 就是这个浏览器能支持显示什么内容.

还有Language, cookie等信息, 以后有机会再详解.

注意, 绝大部分的连接请求都是通过TCP/IP协议发出的.

3.2.3 WebServer受到browser的申请后, 把对应的 页文件附带一些信息发送回浏览器.(利用Socket的Stream)

一旦WebServer受到请求.

相当于构造了1个Socket对象.(后面会讲),  然后利用这个Socket对象发送回对应的 页文件,

那么浏览器就得到这个 页文件并显示给浏览者了.

下面就是webserver发送回的头文件信息:

四, WebServer软件的工作职责.

通过, 上面的例子.

我们可以大概清楚WebServer软件的工作职责

1. 监听访问端口.

2. 一但有连接请求通过端口发送过来, 就建立一条与对方浏览器的通道(InputStream & OutputStream)

3. 把 页内容和相关信息发送给浏览器.

当然, 真正使用的webserver软件绝对没有上面写的这么简单, 但最关键的步骤原理都是一样的.

五, 利用java自己写1个webserver软件小程序.

我们知道了webserver 软件的运行原理.

也可以尝试自己写1个简单的webserver小程序出来了:

5.1 写1个html文件

存放在某个目录, 例如:

/home/gateman/Studies/Java/java_start/single/mywebserver/index.html

5.2 利用java编写MyWebServer.java

代码:

步骤很简单:

1. 首先在类里指定所使用的端口.

2. 指定主页 页文件的位置.

3. 根据端口构建1个 ServerSocket对象(如果对这个类不了解, 请参考我另一篇博文:  http://blog.csdn.net/nvd11/article/details/42847601)

4. 利用while循环监听这个端口

5, 一旦有连接请求, 构造1个socket对象

6. 利用socket对象的outputstream, 把 页文件内容发送过去.

5.4 测试执行

利用javac 编译这个类

然后利用java命令来执行

那么这个程序就在监听端口了.

然后我们可以打开另1个虚拟机, 输入在浏览器输入ip地址和端口(192.168.1.107:10010), 就见到浏览器里显示了那个 页文件的内容:

WebServer 软件原理简介

5.5 小结

其实这个MyWebServer功能相当弱啦, 而且是没有执行相应标准的, 只是能用浏览器简单显示 页文件的内容, 并没有正确地显示 页文件.

常用的WebServer 软件例如Tomcat, Weblogic功能强大得多也健壮得多, 但是基本原理是相似的.

文章知识点与官方知识档案匹配,可进一步学习相关知识 络技能树首页概览22127 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2015年1月19日
下一篇 2015年1月20日

相关推荐