加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 电商 > 正文

Java搭建Web服务器之Socket编程,理解 Apache、Tomcat

发布时间:2020-03-06 19:55:14 所属栏目:电商 来源:站长网
导读:副标题#e# 之前做web应用一直是在本地装个Apache、Tomcat之类的软件,然后把做好的网页文件放在他们的工作目录下(如Apache的htdocs),然后打开浏览器输入127.0.0.1或localhost就可以直接访问了,好神奇,可是为什么,怎么实现的呢,早就知道有Socket(套接字

好吧,我啥也不说了,亲们,我还要向第三个女神表白吗。。。?浏览器主动跟我说:“你表白吧,这次你发多少封表白信我都能给你送到服务器那里,因为她一直在等待着我给她发送呢!”想想,还是算了,人生如此,何须多言。。。

代码都贴出来了,其实看起来挺简单的,但是实际操作中会碰到各种各样的问题。

还有一些要再继续唠叨的边角料:

1、Q:什么是端口?

A:这是一个比较抽象的概念,是为了进程间通信,每一个进程只能占用一个端口,也就是说多个进程绝不能同时占用一个端口

2、Q:既然多个进程不能同时占用一个端口,那么咱们常说的web服务默认使用的是80端口,我电脑有三个浏览器,谷歌,360,IE他们却可以同时上网,这不是端口冲突了吗?

A:常说的web服务使用80端口指的是服务器监听web请求的端口,是服务器,不是你自己的客户机。一般来说,一个应用程序打开后访问网络本地操作系统为其分配的端口号是随机的,所以三个浏览器虽然同时接收web服务器的回复报文,由于他们三个各自占用的端口不一样,所以不会产生冲突。

3、Q:既然我的应用程序使用的端口都是随机的,服务器接收到请求后怎么知道它要把应答报文发给谁?

A:靠Socket!通过刚才的编程实战,在我理解,Socket肯定会至少包括四部分内容:IP地址,端口号,输入流和输出流。也就是说,从客户机发给服务器的Socket里一定会有客户机的IP地址和相应应用程序的端口号,这样服务器自然就知道应该把应答报文发给谁了。

4、Q:非要使用80端口吗?

A:不一定。我们刚才在编程的时候确实使用的是80端口,所以我们在浏览器中输入127.0.0.1/index.html,浏览器会默认认为我们会向127.0.0.1主机的80号端口发送请求。但是,这个80端口号只是默认的而已,我们完全可以自己改掉,比如在java代码里把服务器端的ServerSocket改成 ServerSocket serverSocket = new ServerSocket(3456); 这时候我们在浏览器中就要输入 127.0.0.1:3456/index.html 了,效果是一样的,可以浅尝辄止一下。

5、Q:谁是客户端,谁是服务器?

A:咱们只有一台电脑,这台电脑既充当着客户端的角色,又充当着服务器的角色。当浏览器请求网页时,它是客户端;当80端口收到请求报文并应答时,它就是服务器。实在不理解,就想想什么是自恋吧,或者,自交也勉强可以。。

6、Q:还有什么问题,欢迎留言~

对于此用java编写的web服务器的一点简单说明:此段代码非常简单,所以肯定不会是真正web服务器所用到的代码,咱们这个只是能够应答最最基本的web请求,不能检测是否跨域访问等等。不过最基本的,用的socket编程是肯定的。另外,对于此段程序,只给出了处理输入输出流的一种方式。对于输入流,除了咱们刚才用到的BufferedReader包装类,还可以直接用InputStream的read()方法等;对于输出流,除了咱们刚才用的OutputStream的write()方法,还可用BufferedWritter,PrintWritter等,这些都是java IO的基本用法,根据网络环境,根据所要读取的文件大小来时时变通,这就是仁者见仁智者见智了。

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读