上篇关于Go模板库应用的文章最后我们留下一个问题,页面模板是通过CDN引用的BootStrapcssjs文件。到目前位置我们的服务器还无法伺服客户端的静态文件请求把服务器磁盘上的文件响应给客户端。使用和配置过Nginx服务器的一定知道Nginx天然支持静态资源的访问,那么我们是不是也要借助Nginx才能实现处理静态文件请求呢?其实不是,在最开始的文章我们说过“Go语言不需要依赖任何第三方组件就能构建并启动一个高并发的 HTTP 服务器。”,这篇文章就让我们了解一下如何用Go语言的net/http库实现处理静态资源请求的问题。

我们先用一个简单的例子学习一下使用net/http如何创建一个静态资源服务器,然后再应用到我们的http_demo项目中。

Go Web 编程系列的每篇文章的源代码都打了对应版本的软件包,供大家参考。公众号中回复gohttp08获取本文源代码

创建静态资源服务器

我们新建一个main.go存放创建静态资源服务器和监听请求的代码,同时在相同目录下创建assets/cssassets/js目录用于存放上篇文章页面模板使用到的静态文件。

main.go
assets/
└── css└── bootstrap.min.css
└── js└── bootstrap.min.js

main.go中的代码如下:

package mainimport "net/http"func main() {fs := http.FileServer(http.Dir("assets/"))http.Handle("/static/", http.StripPrefix("/static/", fs))http.ListenAndServe(":8080", nil)
}
  • 首先我们使用http.FileServer创建一个使用给定文件系统的内容响应所有HTTP请求的处理程序。
  • http.Handle("/static/", http.StripPrefix("/static/", fs))让文件服务器使用assets目录下的文件响应URL路径以/static/开头的所有HTTP请求。
  • assets被设置为文件服务器的文件系统根目录,文件服务器会处理以/static开头的URL的请求,所以我们需要使用http.StripPrefix()static前缀去掉才能在assets目录中搜索到请求的文件。

运行程序,然后用cURL请求一下css文件,看看有没有奏效。

$ go run main.go$ curl -s http://localhost:8080/static/css/bootstrap.min.css/*!* Bootstrap v3.3.7 (http://getbootstrap.com)* Copyright 2011-2016 Twitter, Inc.......

结合gorillia/mux使用文件服务器

上面的例子中文件服务器的处理程序是注册到net/http库提供的标准的ServeMux(服务复用器)中的,我们http_demo项目为了支持复杂的路由注册使用的是gorillia/mux库提供的服务复用器。两者的工作方式不太一样,所以把文件服务器应用到我们项目里还需要做些调整才能起作用。

首先我们先把assets目录整个拷贝到项目的根目录。

func RegisterRoutes(r *mux.Router) {// serve static file requestfs := http.FileServer(http.Dir("assets/"))serveFileHandler := http.StripPrefix("/static/", fs)r.PathPrefix("/static/").Handler(serveFileHandler)......
}
  • 使用router.PathPrefix("/static")创建一个匹配有/static前缀请求的路由。
  • 然后使用route.Handler方法将文件服务器注册成路由对应的处理程序(Handler*mux.Route上的方法)。

注册好文件服务器后,我们把之前页面模板引用的CDN上的jscss文件换成自己服务器上的文件链接。

<html lang="en">
<head>......<link href="/static/css/bootstrap.min.css" rel="stylesheet">
</head><body>{{ template "nav" .}}<div class="container">{{template "content" .}}
</div> <!-- /container --><script src="/static/js/bootstrap.min.js"></script>
</body>
</html>

然后重启服务器,访问之前的页面http:localhost:/view/index,验证一下我们的服务器现在是否能伺服静态文件的请求了。

页面样式正常,现在只要在服务器这个assets目录下的文件,我们都可以通过http://localhost:8000/static/*路径的URL访问到。

今天的文章对应的源码已经打包上传,公众号回复gohttp08获取下载链接,赶快下载下来动手练习一下吧。如果文章能帮助到你,不要忘记转发、点在看分享给更多人啊。关注公众号每周第一时间获取文章更新。

前文回顾

深入学习用Go编写HTTP服务器
使用gorilla/mux 路由器
Go Web编程--应用数据库
Go Web编程--深入学习解析HTTP请求
Go Web 编程--超详细的模板库应用指南

使用Go语言创建静态文件服务器相关推荐

  1. css文件修改后没变化 static_Go Web编程使用Go语言创建静态文件服务器

    上篇关于Go模板库应用实践的文章最后我们留下一个问题,页面模板是通过 CDN引用的 BootStrap的 css, js文件.到目前位置我们的服务器还无法伺服客户端的静态文件请求把服务器磁盘上的文件响 ...

  2. Go Web编程--使用Go语言创建静态文件服务器

    上篇关于Go模板库应用实践的文章最后我们留下一个问题,页面模板是通过 CDN引用的 BootStrap的 css, js文件.到目前位置我们的服务器还无法伺服客户端的静态文件请求把服务器磁盘上的文件响 ...

  3. nginx静态文件服务器_Linux分享文件?快速创建静态文件服务器

    一. 需求 Linux对于开发者来说极其友好,但是由于国内主流办公产品相关的生态较为匮乏,因此如何使用Linux去分享文件是一件十分头疼的问题. 对于这个问题,可以直接使用静态文件服务器解决部分需求, ...

  4. 使用Go语言创建WebSocket服务

    今天介绍如何用Go语言创建WebSocket服务,文章的前两部分简要介绍了WebSocket协议以及用Go标准库如何创建WebSocket服务.第三部分实践环节我们使用了gorilla/websock ...

  5. asp是什么文件?html和asp的区别?(HTML是客户端语言,主要用于创建静态网页;asp是服务器端语言,用于设计用户交互式页面或动态页面)

    1.HTML是一种客户端语言,它允许Web浏览器解析并显示在标签之间写入的内容,允许把图像和对象嵌入到网页中.ASP是一种服务器端语言,这意味着写入的代码将被发送到服务器中,并根据要求执行的操作返回一 ...

  6. gin 静态文件服务器拒绝,nginx实现简单的图片服务器(windows)+静态文件服务器-Go语言中文社区...

    需求:能够使用 http://localhost/目录/图片名 访问本地(服务器)已经存在的图片 首先需要在本地将nginx跑起来,这里使用默认端口80: 在浏览器使用http://localhost ...

  7. 静态文件 服务器,静态文件服务器

    静态文件服务器 内容精选 换一换 通过本文档,您可以快速了解华为云CDN的基础知识,如果想了解更多详细信息,可以根据扩展阅读的引导来进行阅读.CDN(Content Delivery Network, ...

  8. Anywhere 随启随用的静态文件服务器

    三江建材官网项目 写nodeJs系列的文章都是因为这一个项目 第一天,搭建项目环境 记录心情: 首先,在写这个项目的时候,我很无助,只是拿到了设计稿,还有一个指导人,平常会很忙,只有在休闲的时候才能动 ...

  9. 使用Azure Blob Storage实现一个静态文件服务器

    什么是Azure Blob Storage Azure Blob Storage是微软Azure的对象存储服务.国内的云一般叫OSS,是一种用来存储非结构化数据的服务,比如音频,视频,图片,文本等等. ...

最新文章

  1. 机器学习资源和路线图
  2. Codeforces Round #323 (Div. 1) B. Once Again... 暴力
  3. 企业云存储采用率将在2017年飙升
  4. 一个5g基站的覆盖范围有多大,有没有4g的大?
  5. 1000个摄像头的网络怎么搭建?为什么500个就卡的不行?
  6. 如何将 Redis 的内存优化?
  7. python代码覆盖率工具_Python代码覆盖率分析工具Coverage
  8. ABP理论学习之Abp Session
  9. AIR3.0针对移动设备的高性能渲染方案
  10. webapp开发时问题的总结1
  11. 中小企业信息化的时机如何把握?
  12. [Linux实用工具]Windows下同步Linux文件(Linux安装Samba和配置)
  13. 【机器学习】语音处理介绍
  14. 01超详细:中文版ANSYS2021_R1安装教程
  15. WPS(Word)中图注、域的使用基础
  16. Windows10系统 无法更换锁屏图片一直转圈圈(含替换系统默认锁屏壁纸教程)异常处理
  17. Tomcat8.5后版本不返回200 OK的问题解决
  18. 正则匹配特殊符号及标点符号
  19. 百度竞价常见问题:影响点击量的因素有哪些?
  20. 3D或游戏画面卡顿的解决方法

热门文章

  1. 避坑:一次离奇性能故障的排查与反思
  2. Python程序员面试必备常用问题答案及解析
  3. NSBundle 的理解和 mainBundle
  4. 删除 Tomcat 上次关闭遗留下来的 SESSION 缓存
  5. js中prototype用法(转)
  6. Ubuntu中让SSH自动重连
  7. EMC业务连续性和容灾服务
  8. 解决:一个服务器oracle多实例有一个实例没启动,需手动启动操作指引教程
  9. SQL Server 2012 创建数据库快照
  10. Quartz 2 定时任务(一):基本使用指南