一. 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), 就见到浏览器里显示了那个 页文件的内容:

5.5 小结
其实这个MyWebServer功能相当弱啦, 而且是没有执行相应标准的, 只是能用浏览器简单显示 页文件的内容, 并没有正确地显示 页文件.
常用的WebServer 软件例如Tomcat, Weblogic功能强大得多也健壮得多, 但是基本原理是相似的.
文章知识点与官方知识档案匹配,可进一步学习相关知识 络技能树首页概览22127 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!