首页 > 其他分享 >Go语言Revel框架 网页请求处理流程

Go语言Revel框架 网页请求处理流程

时间:2023-07-18 21:05:44浏览次数:43  
标签:文件 网页 模版 app Revel Controller html Go

请求处理流程框架图

下图是  Play! Framework 的请求处理流程,Revel框架页是一样的。 

 图片来自: 

对这幅图的说明如下:Play framework 是一个无状态的面向请求/回应的框架,所有的 HTTP 请求都遵循下面的处理流程:

  • 框架接收到一个 HTTP Request
  • Router 组件试图从 conf/文件中找出对应的 Action 方法
  • 执行应用代码
  • 如果需要一个视图,则调用模板文件并执行该模板
  • 写回最终处理结果

Go语言Revel框架 网页请求处理流程_ico

下面以前一篇完成的 http://localhost:9000/ 例子应用为例,介绍Revel框架

路由 Routes

路由的设置文件是在:conf/routes ,这个配置文件的内容如下:

# Routes

# This file defines all application routes (Higher priority routes first)

# ~~~~

 

GET     /

 

# Ignore favicon requests

GET     /favicon.ico                            404

 

# Map static resources from the /app/public folder to the /public path

GET     /public/{<.+>filepath}              Static.Serve("public")

 

# Catch all

*       /{controller}/{action}                  {controller}.{action}

其中的这行标示:请求 http://localhost:9000/ 会由Application Controller的Index方法来处理。

GET     /

行为(Actions)

Application Controller 的代码在  app/controllers/app.go 文件中,内容如下:

package
 
import "github.com/robfig/revel"
 
type Application struct
*revel.Controller
}
 
func
return
}

controllers 包中的内容必须是 派生自 revel.Controller 类的。我们在自己的struct类中嵌入rev.Controller 或 *rev.Controller。

在Controller中任何Action的返回值都是rev.Result,

revel Controller提供了很多有用的方法来生成Result,在上面的代码中它调用了Render方法来生成Result,这个方法告诉Revel查找和渲染一个模板来作为输出结果。

模版(Templates)

全部的模板都存放在app/views目录下。

如何查找模版?

当代码中没有明确指明使用那个模版时,revel会查找 app/views 目录下,类名,Action 名对应的文件,这里就是:app/views/Application/Index.html这个文件。这个文件的内容如下:

 

{{set . "title" "Home"}}

 

{{template "header.html" .}} 

 

<h1>Your Application Is Ready</h1>

 

{{template "footer.html" .}}

上面的函数是Go模版提供的,Revel也添加了一些自己辅助方法

Go语言支持的模版的请参看:

https://github.com/astaxie/build-web-application-with-golang/blob/master/ebook/07.4.md

上面模版的含义如下:

  • 为render的上下文添加一个title变量
  • 包含header.html模板文件
  • 显示欢迎信息
  • 包含footer.html

我们再查看一些 header.html 模版文件,会看到更多模版标签。

<!DOCTYPE html>
 
<html>
  <head>
    <title>{{.title}}</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <link rel="stylesheet" type="text/css" href="/public/css/bootstrap.css">
    <link rel="shortcut icon" type="image/png" href="/public/images/favicon.png">
    <script src="/public/js/jquery-1.9.1.min.js" type="text/javascript" charset="utf-8"></script>
    {{range .moreStyles}}
      <link rel="stylesheet" type="text/css" href="/public/{{.}}">
    {{end}}
    {{range .moreScripts}}
<script src="/public/{{.}}" type="text/javascript" charset="utf-8"></script>
    {{end}}
  </head>
  <body>

这里模版增加了循环遍历显示数据的功能。循环遍历moreScripts,moreStyles这两个变量。

不间断服务升级(Hot-reload)

Revel支持不间断服务升级。

Revel会监视如下内容(Revel通过另一个开源项目(fsnotify)实现的文件监控,都是同一个作者开发的)

  • app目录下面的所有代码
  • app/views下面的全部模板文件
  • conf/routes下面的路由

我们可以随便修改 模版文件和 go代码文件,修改后再次刷新网页,可以立即看到效果。

MVC模型中简单传递参数

修改 app.go 文件:

func
:= "测试测试"
return
}

修改对应的模版 Application/Index.html 文件。

{{set . "title" "Home"}}

{{template "header.html" .}}

 

<h1>Your Application Is Ready 郭ƒ­红º¢俊¿Š</h1>

<p>{{.greeting}}</p>

{{template "footer.html" .}}

任何一个修改访问 http://localhost:9000/ 可以马上就看到效果。 

  

参看资料:

http://robfig.github.com/revel/tutorial/requestflow.html


标签:文件,网页,模版,app,Revel,Controller,html,Go
From: https://blog.51cto.com/u_15588078/6768103

相关文章

  • Go语言Revel框架,创建一个Web App
    首先请确保Revel环境搭配好了,搭配方式参看: 在命令行依次执行下面命令:cd$GOPATHrevelnewmyapprevelrunmyapp执行的结果提示如下:上面有个提示,CodepathshouldbeinGOPATH,butisinGOROOT。这是因为之前我下载revel代码时,还没有设置GOPATH,goget自动就下载GOROOT目......
  • Win7下安装go1.1beta1
    下载安装Go首先确认你操作系统是64还是32位的,这样在https://code.google.com/p/go/downloads/list下载那个包就知道了。这里我们要下载的是:go1.1beta1.windows-amd64.msigo1.1beta1Windows(x8664-bit)MSIinstaller下载完成后,直接安装即可,安装默认安装的C:\Go目录下,同时......
  • Go语言Revel框架 的聊天室示例解读
    安装Revel框架请参看下面这篇文章:《Go语言Revel框架准备工作》 运行聊天室例子运行聊天室例子只需执行下面命令:$revelrungithub.com/robfig/revel/samples/chat$revelrungithub.com/robfig/revel/samples/chat~~revel!http://robfig.github.com/revel~2013/03/2511:54:4......
  • Go语言Revel框架 聊天室三种通讯方式分析
    三种机制的切换首页相关的网页请求路由如下:#LoginGET  /GET  /demo                 Application.EnterDemo首页显示输入昵称和三种聊天技术选择入口,选择后form提交到Application.EnterDemo页面。跳转到三种具体的聊天技术页面是通......
  • Golang的跨平台编译程序
    Golang支持交叉编译,也就是说你在32位平台的机器上开发,可以编译生成64位平台上的可执行程序。交叉编译依赖下面几个环境变量:$GOARCH  目标平台(编译后的目标平台)的处理器架构(386、amd64、arm)$GOOS     目标平台(编译后的目标平台)的操作系统(darwin、freebsd、linux、wind......
  • Go语言用WebSocket的简单例子
    Go语言标准包里面没有提供对WebSocket的支持,但是在由官方维护的go.net子包中有对这个的支持,需要独立下载, Gowebsocketpackage下载地址:http://code.google.com/p/go.net/websocket。Goget命令下载:gogetcode.google.com/p/go.net/websocket Go实现的WebSocket的文档:http://......
  • Golang做的验证码(2)
    前面一篇文章介绍了2个用Golang做的验证码 这里再补充几个:1、在GAE上使用的Google的验证码(ReCAPTCHA)封装https://github.com/ThePiachu/GAE-Go-ReCAPTCHA这个的核心代码只在下面这个文件:https://github.com/ThePiachu/GAE-Go-ReCAPTCHA/blob/master/ReCaptcha/ReCaptcha.go 2、一......
  • Golang连接Oracle数据库
    Golang连接Oracle的库有很多,比较常见的如下:不过,oralce只提供了oci8的接口,必须通过它来调用,所以下面方案都逃不过相关设置。1、go-db-oracle地址:https://code.google.com/p/go-db-oracle/官方介绍:OracleDriverusingcgotocallOCIlibrariesfromOracleInstantClient11.......
  • java mongo 插入geometry 多边形 线 点
    importcom.mongodb.client.MongoCollection;importcom.mongodb.client.model.geojson.LineString;importcom.mongodb.client.model.geojson.Point;importcom.mongodb.client.model.geojson.Polygon;importcom.mongodb.client.model.geojson.Position;importcom.tusvn.cc......
  • Go语言读取网上Json格式的天气预报数据例子
    天气预报接口使用的是:http://www.weather.com.cn/data/sk/101010100.html这里的Json数据如下:{"weatherinfo":{"city":"北京","cityid":"101010100","temp":"1......