GoWeb给客户端响应教程

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: GoWeb给客户端响应教程

ResponseWriter

我们先来看下net/http中的ResponseWriter封装了哪些属性和方法。

1.给客户端响应一个字符串

Write([]byte)(int,error) ==>很明显,我们需要提供一个byte的切片,一个字符序列

这一点跟我们上篇文章讲到的,数据在网络中的传递时通过字符序列进行的。

2.给客户端响应一个html页面

// ``中的内容会安照原格式的方式
func Handeler4(w http.ResponseWriter, r *http.Request) {
  html := `<html>
    <head>
      <title>我是响应2</title>
    </head>
    <body>
      我是响应2,通过html方式的响应
    </body>
    <html>
  `
  w.Write([]byte(html))
}

2.给客户端响应一个html页面(在开发中最常用的方式)

        type Header map[string][]string

        我们有可以设置响应头中的信息

func Handler5(w http.ResponseWriter, r *http.Request) {
  //我们也可以设置响应头的信息
  w.Header().Set("Content-Type", "Handler5Json")
  user := User{
    ID:       10,
    Name:     "小王",
    Password: "123abc",
  }
  //将user序列化
  data, err := json.Marshal(user)
  if err != nil {
    fmt.Println("json.Marshal(user) err=", err)
  }
  //Marshal返回的就是一个[]byte
  w.Write(data)
}

2.给客户端响应一个重定向

func Handler6(w http.ResponseWriter, r *http.Request) {
  //必须先指定重定向的位置
  w.Header().Set("Location", "https:www.baidu.com")
  w.WriteHeader(302)
}

通过模板引擎响应数据

       使用Go的模板引擎一般需要通过3步:1定义模板  2解析模板  3渲染模板(执行模板)

       1.定义模板:html文件或者模板文件或字符串

       2.解析模板:对文件格式的模板源进行语法分析,创建一个经过语法分析的模板结构,其中模板源头可以是一个字符串,也可以是模板文件中包含的内容

       3.渲染模板:执行经过语法分析的模板,将ResponseWriter和模板所需的动态数据传递给模板引擎{{.}},被调用的模板引擎会把经过语法分析的模板和传入的数据结合起来,生成最终的HTML,并将这些HTML传递给ResponseWriter

       template包(html/template)实现了数据驱动的模板,用于生成可对抗代码注入的安全HTML输出。本包提供了和text/template包相同的接口,无论何时当输出是HTML的时候都应使用本包。

       为什么要使用模板引擎呢?

       模板引擎可以防止网络攻击,如代码注入。比如某些人在评论区写一个死循环。而模板引擎会自动将输出转化为安全的HTML格式输出,可以抵抗一些网络攻击。

      func ParseFiles(filenames ...string) (*Template, error)     //解析模板

       func (t *Template) Execute(wr io.Writer, data interface{}) error  //执行模板

注:每一对请求和响应单独对应一个独立的连接

      ==>当我们访问一个页面的时候,也是一次请求和响应

            (我们在地址栏输入一个网络地址并按回车的时候)

//用来返回html页面的
func HandlerTemplate(w http.ResponseWriter, r *http.Request) {
  //方式1
  //1.定义模板
  //2.解析模板
  //func ParseFiles(filenames ...string) (*Template, error)
  tem, err := template.ParseFiles("love.html")
  if err != nil {
    fmt.Println("template.ParseFiles err=", err)
    return
  }
  //方式2
  //t := template.New("love.html")
  //  //t, _ = t.ParseFiles("love.html")
  //3.渲染模板
  //func (t *Template) Execute(wr io.Writer, data interface{}) error
  tem.Execute(w, "我是后台数据")
}

错误处理:

       我们在解析模板时每一对错误进行处理,Go提供一个Must函数专门用来处理这个错误。Must函数可以包裹起一个函数,被包裹的函数会返回一个指向模板的指针和错误,如果错误不是null,那么Must函数将产生一个panic

       template.Must(template.ParseFiles(".....string"))*Template

func ParseGlob(pattern string)(*Template,error)

ParseGlob创建一个模板并解析匹配pattern的文件里的模板定义,返回的模板的名字是第一匹配的文件的文件名(不含扩展名),内容为解析后的第一个文件内容。如果发生错误,会停止解析并返回nil   ParseFlob等价于使用匹配pattern的文件的列表为参数调用ParseFiles

t,_ := template.ParseGlob("*.html")

执行模板

 1).通过Execute方法

       func (*Template) Execute

       ==>如果只有一个模板文件,调用这个方法总是可行的,但是如果有多个模板文件,调用这个方法只能得到第一个模板。

      t.ExecuteTemplate(w,"hello.html","我要在hello2.html")  

func HandlerTemplate2(w http.ResponseWriter, r *http.Request) {
  t := template.Must(template.ParseFiles("love.html", "index2.html"))
  t.ExecuteTemplate(w, "index2.html", "我是后台数据")
}
相关文章
|
网络协议
深入理解HTTP的基础知识:请求-响应过程解析
在当今数字化的世界中,理解HTTP协议的基础知识变得至关重要。本文将带您深入探索HTTP的核心概念和请求-响应的过程。HTTP是一种用于在计算机之间传输超文本数据的协议,它不仅定义了数据交换的规则和格式,还为不同的应用程序提供了通信和交换信息的能力。通过深入了解HTTP的请求-响应过程,我们将更好地理解网络通信的基本原理,为构建和优化网络应用打下坚实的基础。
881 2
|
7月前
|
存储 网络协议 Linux
《网络是怎么样连接的》读书笔记 - WEB服务端请求和响应(五)
《网络是怎么样连接的》读书笔记 - WEB服务端请求和响应(五)
69 0
|
7月前
|
存储 JSON 监控
源码分析Zabbix客户端如何向服务端发起请求
源码分析Zabbix客户端如何向服务端发起请求
76 2
|
存储 缓存 关系型数据库
1.6 服务器处理客户端请求
1.6 服务器处理客户端请求
78 0
|
前端开发
前端学习案例1-web服务中的请求和响应之1
前端学习案例1-web服务中的请求和响应之1
77 0
前端学习案例1-web服务中的请求和响应之1
|
前端开发
前端学习案例2-web服务中的请求和响应之2
前端学习案例2-web服务中的请求和响应之2
56 0
前端学习案例2-web服务中的请求和响应之2
|
前端开发
前端学习案例3-web服务中的请求和响应之3
前端学习案例3-web服务中的请求和响应之3
82 0
前端学习案例3-web服务中的请求和响应之3
获取网页数据 Qt 从客户端发起http响应
获取网页数据 Qt 从客户端发起http响应
222 0
|
前端开发 测试技术 API
前端 Fiddler 抓包修改请求响应结果
实际前端开发中,对接线上发布的后端接口,由于业务比较复杂,也设计到以前的库表,开发过程经常会出现部分页面数据不完整,无法对接整个流程,日常前端开发也有其他方式实现功能测试验证。
286 0
前端 Fiddler 抓包修改请求响应结果