自己动手实现静态资源服务器

作者:孤独烟

原文:https://www.cnblogs.com/rjzheng/p/8750265.html

引言

本文利用java自带的socket编程实现了一个简单的静态资源服务器,可以响应静态资源。本文一共有两个版本的源码。第一个版本名为Server_v1,该版本实现了一个简单的socket的服务器,帮助读者回忆socket编程。第二个版本名为Server_v2,该版本是对第一版的改良,给出了改良思路,做出了必要的封装,让其能够响应css、html、jpg等静态资源。

正文

版本一

该版本实现一个简单的socket服务器,针对浏览器的请求,能够返回相应的页面。

其源码如下:

执行效果如下图所示,打开chrome浏览器,在导航栏输入

http://localhost:9999/docs/index.html

显示如下图所示

控制台输出如下图所示

版本二

该版本在版本一的基础上进行优化,使其能够有效的响应静态资源

(1)步骤一

先看第一部分代码优化,如下图所示

红框的部分,我们可以理解为对请求信息对处理,因此我们模仿Tomcat构造一个HttpRequst来处理这一段逻辑。

另外,我们需要对静态资源进行响应,因此我们需要获取输入内容的静态资源地址,即以下部分的内容。

获取以上红框请求地址内容的代码如下

uri = msg.substring(msg.indexOf("/"),msg.indexOf("HTTP/1.1") - 1);

综上所述,我们有HttpRequest类如下所示

(2)步骤二

接下来是第二部分的代码优化,如下图所示

以上红框部分主要是对输出信息进行响应,我们模仿tomcat构造一个HttpResponse对象封装该部分逻辑。

另外,我们获取用户请求的资源文件路径,根据该路径找到相应静态文件。将该文件写入文件流,输出。

因此,我们有HttpResponse对象如下所示

(3)步骤三

接下来我们构建测试类,构建之前我们先去找一些静态资源文件。作者直接去apache的官网下把tomcat给下了下来,然后去如下目录拷贝静态资源文件

apache-tomcat-8.5.28/webapps/docs

将整个docs 文件夹拷贝至你的项目的根目录下

apache-tomcat-8.5.28/webapps/ROOT/favicon.ico

将favicon.ico图片拷贝至你的根目录下

静态资源在你的项目中的结构如下图所示

现在上我们的Server_V2的代码

测试结果如下:

在浏览器输入

http://localhost:9999/docs/ssl-howto.html

效果如下

你会惊奇的发现样式并不能识别,因此我们对响应头的部分逻辑进行修改

继续启动测试,效果如下

已经能够正常显示

总结

本文给出了两个版本的静态资源的服务器源码,希望读者能够有所收获。

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180613B1FJ1500?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券