Day 6 模版 template

news/2024/4/27 22:54:21

本文目标:

  • 实现静态资源服务

  • 支持HTML渲染

  • 后端需解决资源利用,并发,数据库存储问题.

静态文件

之前在设置动态路由的时候,通配符*支持匹配多级子路径

映射到真实文件后,将文件返回,静态服务器就已经实现了

找到文件之后,将文件返回给writwr的这一步 net/http库已经实现了

因此,我们要做的只是解析请求的地址,映射服务器上真实的地址,交给http.FileServer处理

// create static handler
func (group *RouterGroup) CreateStaticHandler(relativePath string, fs http.FileSystem) HandlerFunc {//通过连接前缀和相对路径得到文件的绝对路径absolutePath := path.Join(group.prefix, relativePath)//创建一个文件服务器,并使用绝对服务器作为前缀fileServer := http.StripPrefix(absolutePath, http.FileServer(fs))//返回一个闭包函数,该函数作为请求的处理器return func(c *Context) {//获取路由中的参数file := c.Param("filepath")//检查文件是否存在或者是否有权限访问if _, err := fs.Open(file); err != nil {c.Status(http.StatusNotFound)return}//如果文件存在且有权限访问,则调用文件服务器来处理fileServer.ServeHTTP(c.Writer, c.Req)}}func (group *RouterGroup) Static(relativePath string, root string) {//创建静态文件处理器->最终指向的是fileServer.ServeHTTP(c.Writer, c.Req)//由net/http提供支持handler := group.CreateStaticHandler(relativePath, http.Dir(root))//构建URL模式,匹配所有以filepath结尾的路径urlPattern := path.Join(relativePath, "/*filepath")//将静态文件处理器注册到路由组中,并指定URL模式group.GET(urlPattern, handler)
}

我们给RouterGroup添加了两个方法,static这个方法是暴露给用户的

HTML模板渲染

Go语言内置了text/template and html/template

一看就知道html这个包下面的应该更好用,事实上html包提供了更完整的HTML服务

主要对一些不清楚的代码进行了注释吧

注意看一下极兔给我们的代码

那个static和template是静态文件,需要进行下载

func (group *RouterGroup) CreateStaticHandler(relativePath string, fs http.FileSystem) HandlerFunc {//通过连接前缀和相对路径得到文件的绝对路径absolutePath := path.Join(group.prefix, relativePath)//创建一个文件服务器,并使用绝对服务器作为前缀fileServer := http.StripPrefix(absolutePath, http.FileServer(fs))//返回一个闭包函数,该函数作为请求的处理器return func(c *Context) {//获取路由中的参数file := c.Param("filepath")//检查文件是否存在或者是否有权限访问if _, err := fs.Open(file); err != nil {c.Status(http.StatusNotFound)return}//如果文件存在且有权限访问,则调用文件服务器来处理fileServer.ServeHTTP(c.Writer, c.Req)}}// serve static files
func (group *RouterGroup) Static(relativePath string, root string) {//创建静态文件处理器->最终指向的是fileServer.ServeHTTP(c.Writer, c.Req)//由net/http提供支持handler := group.CreateStaticHandler(relativePath, http.Dir(root))//构建URL模式,匹配所有以filepath结尾的路径urlPattern := path.Join(relativePath, "/*filepath")//将静态文件处理器注册到路由组中,并指定URL模式group.GET(urlPattern, handler)
}

具体http/net是怎么执行的,这个 我也没探究很多,毕竟是研究这个框架的大概知识,本身就是建立在net/http上的


http://www.mrgr.cn/p/74010317

相关文章

逆向中常见的加密算法

逆向中常见的加密算法 1.Base64 1) 原理与特征: ​ a.原理:将3个byte(即38=24bit)切割为46,然后根据6bit表示的数字在base64表(64byte的表)寻找对应的值;如果待加密字符串长度不为3的整数,则在末尾处补0对齐,其中0对应的字符为=。 ​ b.特征:在反汇编代码中会出现0x…

Flutter逆向

环境配置(Blutter)及使用 参考 [原创]flutter逆向 ACTF native app-Android安全-看雪-安全社区|安全招聘|kanxue.com 其中在编译过程中遇到 -- Configuring done (2.5s) -- Generating done (0.0s) -- Build files have been written to: E:/blutter/build/blutter_dartvm3.4…

创新指南|如何将人工智能应用于未来的创新管理——并不断付诸实践

ChatGPT 的推出加剧了围绕人工智能的炒作,现在我们看到了前所未有的巨大进展。对于我们这些热衷于创新的人来说,这是一个激动人心的时刻。他们正在共同采取措施,充分利用人工智能进行创新管理。本文将阐述人工智能能为创新管理做什么&#xf…

文件包含一-WEB攻防-PHP应用文件包含LFIRFI伪协议编码算法无文件利用黑白盒

演示案例: 文件包含-原理&分类&利用&修复黑盒利用-VULWEB-有无包含文件白盒利用-CTFSHOW-伪协议玩法 #文件包含-原理&分类&利用&修复 1、原理 程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时&#xff0c…

docker 的八大技术架构(图解)

docker 的八大技术架构 单机架构 概念: 应用服务和数据库服务公用一台服务器 出现背景: 出现在互联网早期,访问量比较小,单机足以满足需求 架构优缺点: 优点:部署简单,成本低 缺点&#xff1…

Java生成p12证书

本文章使用的环境 jdk1.8&#xff0c;spring-boot2.6.13 一、pom依赖 <dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.49</version></dependency><dependency>&…

PCL点云处理之最小中值平方(Lmeds法)拟合平面(二百三十四)

PCL点云处理之 最小中值平方法(Lmeds)拟合平面(二百三十四) 一、算法介绍一、拟合原理二、具体实现1.代码2.结果一、算法介绍 (本文提供详细注释,输出拟合平面参数和平面点云) Lmeds(Least Median of Squares)是一种统计学方法,用于拟合数据并减少异常值对拟合结果…

Spark-Scala语言实战(5)

在之前的文章中&#xff0c;我们学习了如何在scala中定义与使用集合和元组。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢。 Spark-Scala语言实战&#xff08;…

【Web应用技术基础】CSS(6)——使用 HTML/CSS 实现 Educoder 顶部导航栏

第一题&#xff1a;使用flex布局实现Educoder顶部导航栏容器布局 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Educoder</title><script src"https://cdn.staticfile.org/jquery/1.1…

不启动BMIDE,Teamcenter如何查看property的real property name

问题描述&#xff1a; Teamcenter客户端&#xff0c;查看Item 属性&#xff0c;属性名称默认显示的是Display Name。 在各类开发过程中&#xff0c;对属性的操作&#xff0c;需要使用real property name才能进行。开发可能不在server端&#xff0c;没有安装BMIDE&#xff0c;如…

机器学习——元学习

元学习&#xff08;Meta Learning&#xff09;是一种机器学习方法&#xff0c;旨在使模型能够学习如何学习。它涉及到在学习过程中自动化地学习和优化学习算法或模型的能力。元学习的目标是使模型能够从有限的训练样本中快速适应新任务或新环境。 在传统的机器学习中&#xff…

【漏洞复现】WordPress Plugin NotificationX 存在sql注入CVE-2024-1698

漏洞描述 WordPress和WordPress plugin都是WordPress基金会的产品。WordPress是一套使用PHP语言开发的博客平台。该平台支持在PHP和MySQL的服务器上架设个人博客网站。WordPress plugin是一个应用插件。 WordPress Plugin NotificationX 存在安全漏洞,该漏洞源于对用户提供的…

第三天-centos配置静态IP

跟着无涯老师学习安全知识的一天,今天遇到点问题。给新创建的centos配置静态IP的时候,可能是网卡配置文件里的内容修改或添加的不对,配置完之后网络不通。尝试了几次都没成功,明天再试试吧,今天就记这几个简单的命令,加油,晚安。

线程创建方式、构造方法和线程属性

欢迎各位&#xff01;&#xff01;&#xff01;推荐PC端观看 文章重点&#xff1a;学会五种线程的创造方式 目录 1.开启线程的五种方式 2.线程的构造方法 3.线程的属性及获取方法 1.开启线程的五种方式 创造线程的基本两步&#xff1a;&#xff08;1&#xff09;使用run方法…

学习笔记:NATS--自适应边缘和分布式系统的连接技术。(更新中)

基于NATS英文官方文档的学习,我将使用简单易懂的语言去解释NATS的各种机制及其原理。预计在一个月内,也就是在5月之前完成对NATS官方文档的笔记。大家可以将此笔记当做官方文档的中文低配版来学习。欢迎大家的阅读,也希望各位指出我笔记中可能存在的各种错误。目录1. NATS: …

【数据结构】顺序表的实现——静态分配

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;数据结构 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…

TOP100-回溯(二)

4.39. 组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制…

AIR780E引脚复用笔记

1、应用场景:使用AIR780E模块驱动TM1637数码管驱动芯片,原有方案是AIR724UG+TM1637。为了降低成本,按照官方方案进行代码迁移。伴随着代码迁移,硬件引脚也需要做相应调整。由于其他引脚已经分配了对应的功能,仅剩余I2C引脚未使用,所以需要把I2C引脚【PIN66 PIN67】作为普…

Excel·VBA数组平均分组问题

看到一个帖子《excel吧-数据分组问题》&#xff0c;对一组数据分成4组&#xff0c;使每组的和值相近 上一篇文章《ExcelVBA数组分组问题》&#xff0c;解决了这个帖子问题的第1步&#xff0c;即获取所有数组分组形式的问题 接下来要获取分组和值最相近的一组&#xff0c;只需计…

Docker搭建私有仓库

因为dockerHub公共仓库是外网的&#xff0c;所以访问就特别慢&#xff0c;所以一般公司都会搭建私人的镜像仓库来保存镜像。一台服务上用docker开启一个私有仓库的镜像&#xff0c;后续其他的docket服务器都将镜像保存在这个私有的仓库 1 设置私有镜像仓库 # 下载镜像 docker…