加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (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(套接字

玩笑归玩笑,那我们的针对这次的浅谈题目是不是就完成了?可以说是的,但是我表白一次失败就算了?我还要表白第二次!(其实我倒不是这样的,这里只能牺牲我的人品来为了大家更好的理解了,呵呵)。好吧,我刚才的工作目录下还有个another.html,这次我来跟她表白吧!好!继续在浏览器中输入127.0.0.1/another.html后回车,期待这次会表白成功。可是我等啊等,浏览器在那里打圈圈,难道浏览器都知道我太花心了,拒绝帮我传递情书?好吧,我再打开浏览器试一下,输入127.0.0.1/index.html ,嗯?连第一个女神都不理我了?!我靠!为毛!

冲动是魔鬼!冷静!我打开eclipse控制台,发现服务器根本就没有“正在等待情书中…”,所以我拜托浏览器发过去的情书当然就发丢了,因为根本没人在接收啊。(窃喜,还好不是因为我太花心了所以浏览器没有帮我投递情书)可是为什么呢?

冷静吧,分析代码。其实我们可以想到,这段代码执行完一次后不就结束了吗,那我第二次给她发请求她当然会收不到了。对啊,那为了解决这个问题,怎么办呢?跪求红娘支招!

红娘说:“给服务器程序个死循环吧,让她反复在等客户端的请求就好了。”(其实红娘就一直在死循环中)

红娘果然是红娘(不然是谁。。。),那就按照她的说法试一试呗!改代码,加入 while (true) 死循环:

public class MultiWebServer {  

  

 public static void main(String[] args) {  

  

 String base_url = "E://课件/计算机网络原理/实验/实验1/";  

  

 while (true) {  

 try {  

 ServerSocket serverSocket = new ServerSocket(80);  

 System.out.println("正在等待情书中...");  

 Socket socket = serverSocket.accept();  

 System.out.println("收到情书,我要开始解析!");  

 InputStream inputStream = socket.getInputStream();  

 BufferedReader reader = new BufferedReader(  

 new InputStreamReader(inputStream));  

 String line = reader.readLine();  

 System.out.println(line);  

 String url = line.substring(5, line.indexOf("HTTP") - 1);  

  

 System.out.println("情书解析完毕,我要想想怎么回复了...");  

  

  

 // 获取文件内容  

 inputStream = new FileInputStream(base_url + url);  

 OutputStream outputStream = socket.getOutputStream();  

 byte[] buffer = new byte[4 * 1024];  

 int len = 0;  

 while ((len = inputStream.read(buffer)) != -1) {  

 outputStream.write(buffer, 0, len);  

 }  

 outputStream.flush();  

  

 System.out.println("情书请求已发送给客户端");  

  

 //关闭对应的资源  

 serverSocket.close();  

 socket.shutdownInput();  

 socket.close();  

 inputStream.close();  

 reader.close();  

 outputStream.close();  

 } catch (Exception e) {  

 }  

 }  

 }  

这样,这位红娘就在这里一直等啊等,来了一个客户端我就处理他的情书请求,处理完这个继续循环以相同的方式等,处理,等,处理。。。。

(编辑:核心网)

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

热点阅读