Controller(控制器)整个revel都是围绕它处理所有请求

控制器可以是任何直接或间接内嵌了`*revel.Controller`类型的结构,如:

type AppController struct {
*revel.Controller
}

`*revel.Controller`必须位于结构的第一个字段,并且是匿名内嵌方式。

`revel.Controller`是一次请求的上下文,包含请求数据及返回数据。

type Controller struct {
Name string // controller名称
Type *ControllerType // controller的类型描述
MethodType *MethodType // 被调用的action的类型描述
AppController interface{} // controller实例

Request *Request // 请求体
Response *Response // 返回体
Result Result // server处理的数据

Flash Flash // flash信息,生命周期为一个请求
Session Session // 存储cookies
Params *Params // 请求的参数
Args map[string]interface{} // 每一个请求action传入的参数
RenderArgs map[string]interface{} // 传递给模板的参数
Validation *Validation // 数据验证器
}

// 请求参数
// 包含:
// - URL 请求URL
// - Form 表单值
// - File 上传的文件
type Params struct {
url.Values
Files map[string][]*multipart.FileHeader
}

// 请求体
type Request struct {
*http.Request
ContentType string
}

// server处理的返回体
type Response struct {
Status int
ContentType string
Headers http.Header
Cookies []*http.Cookie

Out http.ResponseWriter
}

对于每一个请求,Revel都会实例化一个对应的`Controller`,并为内嵌的`*revel.Controller`结构的相应字段赋值,因此,Revel并不会在不同的请求之间共享`Controller`

具体请移步:

Go Revel - server.go 源码分析 http://www.cnblogs.com/hangxin1940/p/3265538.html

Go Revel - Filter(过滤器) http://www.cnblogs.com/hangxin1940/p/3266311.html

Go Revel - Controllers(控制器)的更多相关文章

  1. 使用Revel(go)开发网站

    Revel很好的利用了Go语言的goroutine,把每一个request都分配到了goroutine里.不用再写一大堆的回调.如果你写过nodejs的话就会深刻的体会到callback hell是什 ...

  2. 使用Revel(go)开发网站(全面版)

    Revel很好的利用了Go语言的goroutine,把每一个request都分配到了goroutine里.不用再写一大堆的回调.如果你写过nodejs的话就会深刻的体会到callback hell是什 ...

  3. ASP.NET MVC系列:添加控制器

    基于MVC的应用程序包含三个部分 Models(模型):对应用程序的数据进行处理 Views(视图):动态生成HTML,显示数据 Controllers(控制器):应用程序中处理用户交互的部分,处理浏 ...

  4. 从头开始编写一个Orchard网上商店模块(6) - 创建购物车服务和控制器

    原文地址: http://skywalkersoftwaredevelopment.net/blog/writing-an-orchard-webshop-module-from-scratch-pa ...

  5. PHP获取项目所有控制器方法名称

    PHP获取项目所有控制器方法名称 //获取模块下所有的控制器和方法写入到权限表 public function initperm() { $modules = array('admin'); //模块 ...

  6. beego 自定义控制器与路由

    框架浅析 这是之前使用bee创建的webapp目录层级结构: ├── conf 配置文件 │ └── app.conf ├── controllers 控制器 │ └── default.go ├── ...

  7. laravel创建控制器

    一.创建 php artisan make:controller Admin/IndexController 二.目录 app/Http/Controllers/ 控制器存储目录 [ C控制器 ]

  8. ASP.NET Core Web API 控制器与方法返回输出

    DATA ACCESS LAYER 在一些不同的示例教程中,我们可能看到 DAL 的实现在主项目中,并且每个控制器中都有实例.我们不建议这么做. 当我们编写 DAL 时,我们应该将其作为一个独立的服务 ...

  9. SpingMVC 核心技术帮助文档

    声明:本篇文档主要是用于参考帮助文档,没有实例,但几乎包含了SpringMVC 4.2版本的所有核心技术,当前最新版本是4.3,4.2的版本已经经是很新的了,所以非常值得大家一读,对于读完这篇文档感觉 ...

随机推荐

  1. ThinkPHP 3.2 性能优化,实现高性能API开发

    需求分析 目前的业务全站使用ThinkPHP 3.2.3,前台.后台.Cli.Api等.目前的业务API访问量数千万,后端7台PHP 5.6,平均CPU使用率20%. 测试数据 真实业务 php5.6 ...

  2. STM32定时器T2纯软件仿真时间准确,JTAG在线调试查看时间不准的问题

    通过查看Sec的值和上次中断的差值计算的,虽然这个值是不准的 ,但实际上时间是准的, 原因如下:stm32在调试模式下虽然进断点之后程序停止了,但定时器的时钟还在走,计数器还在计数,若要在产生断点时计 ...

  3. MySQL复制表结构、表数据

    1.复制表结构及数据到新表 CREATE TABLE 新表SELECT * FROM 旧表 这种方法会将oldtable中所有的内容都拷贝过来,当然我们可以用delete from newtable; ...

  4. Eclipse 快速提取一个方法 (重构)

    选择一块代码并将其转换为一个方法.Eclipse 会自动地推知方法参数及返回类型. 我们有的时候方法太大,但是自己复制粘贴重构又比较麻烦 eclispe拥有这个功能 alt+shift+m 也可以右键 ...

  5. mysql中查询一个字段属于哪一个数据库中的哪一个表的方式

    mysql中查询一个字段具体是属于哪一个数据库的那一张表:用这条语句就能查询出来,其中 table_schema 是所在库, table_name 是所在表 --mysql中查询某一个字段名属于哪一个 ...

  6. hive元数据研究

    hive的元数据存放在关系型数据库中,元数据中存储了hive中所有表格的信息,包括表格的名字,表格的字段,字段的类型,注释.这些信息分散的存放在各个表中,给定一个hive中的表格名字,查询这个表中含有 ...

  7. CSS父元素高度随子元素高度变化而变化

    <html> <body> <head> <style> #menu{width:1000px;overfloat:hidden;} /* width: ...

  8. ARC指南 strong和weak指针

    一.简介 ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain.release.autorelease语句.你不再需要担心内存管理,因为编 ...

  9. vim7.4版本在windows下的配置文件及所在位置

    1.vim在windows下默认首先会查找"_vimrc"文件,如果没有则会找".vimrc".造成这个原因是windows早期不支持以点开头的文件及目录.2. ...

  10. Python | 一行命令生成动态二维码

    当我看到别人的二维码都做的这么炫酷的时候,我心动了! 我也想要一个能够吸引眼球的二维码,今天就带大家一起用 Python 来做一个炫酷的二维码! 首先要安装工具 myqr: pip install m ...