main.go

package main

import (
"net/http" "com.jtthink.net/myhttpserver/core"
) type MyHandler struct { }
func(*MyHandler) ServeHTTP(writer http.ResponseWriter, request *http.Request){ writer.Write([]byte("hello,myhandler"))
} func main() { router:=core.DefaultRouter() router.Add("/",&NewsController{}) http.ListenAndServe(":8099",router) }
NewsController.go
package main

import "com.jtthink.net/myhttpserver/core"

type NewsController struct {
core.MyController
} func(this *NewsController) GET() {
this.Ctx.WriteString("this is newscontroller")
} func(this *NewsController) POST() {
this.Ctx.WriteString("this is newscontroller for POST")
}
MyRouter.go
package core

import (
"net/http"
)
type MyHandlerFunc func(ctx *MyContext)
type MyRouter struct {
Mapping map[string]ControllerInterface } func DefaultRouter() *MyRouter {
return &MyRouter{make(map[string]ControllerInterface)}
}
//加入 path 和Controller的对应关系
func(this *MyRouter) Add(path string,c ControllerInterface) {
this.Mapping[path]=c
} func(this *MyRouter) ServeHTTP(writer http.ResponseWriter, request *http.Request){
//chrome 会默认请求图标地址
if f,OK:=this.Mapping[request.URL.Path];OK{
f.Init(&MyContext{request,writer}) //关键代码
if request.Method=="GET"{//没有做防错处理
f.GET()
}
if request.Method=="POST"{//没有做防错处理
f.POST()
}
} }
MyController.go
package core

type MyController struct {
Ctx *MyContext
} func(this *MyController) Init (ctx *MyContext) {
this.Ctx=ctx
} type ControllerInterface interface {
Init(ctx *MyContext)
GET()
POST()
}

MyContext.go
package core

import "net/http"

type MyContext struct { //上下文对象
request *http.Request
http.ResponseWriter
}
func(this *MyContext) WriteString(str string){
this.Write([]byte(str))
}


httpserver支持路由传输控制器的更多相关文章

  1. Nodejs之MEAN栈开发(一)---- 路由与控制器

    因为工作需要,最近再次学习了node,上一次学习node是2014年,纯粹是个人兴趣,学了入门之后没有运用,加上赶别的项目又不了了之.这次正好捡起来.废话不多说,这里的MEAN指的是Mongodb.E ...

  2. laravel路由与控制器(资源路由restful)

    目前我们大致了解了laravel下,在开始一个Http程序需要先定义路由.之前的例子中,我们的业务逻辑都是在路由里实现,这对于简单的网站或web应用没什么问题,当我们需要扩大规模,程序变得复杂,分层的 ...

  3. Laravel教程 二:路由,视图,控制器工作流程

    Laravel教程 二:路由,视图,控制器工作流程 此文章为原创文章,未经同意,禁止转载. View Controller 上一篇教程我们走了那么长的路,终于把Laravel安装好了,这一篇教程我们就 ...

  4. Laravel路由和控制器的绑定

    路由和控制器的关系 路由文件地址在\app\Http\routes.php,我们来看两种不同的路由. Route::get('/', function () { return view('welcom ...

  5. Nginx集群之WCF大文件上传及下载(支持6G传输)

    目录 1       大概思路... 1 2       Nginx集群之WCF大文件上传及下载... 1 3       BasicHttpBinding相关配置解析... 2 4       编写 ...

  6. Yii2.0源码阅读-从路由到控制器

    之前的文章弄清了一次请求的开始到结束.主要讲了Yii Applicaton实例的创建.初始化,UrlManager如何返回Yii中的路由信息,到runAction,最后将Response发送给客户端. ...

  7. Retrofit 2.0 超能实践(一),okHttp完美支持Https传输

    http: //blog.csdn.net/sk719887916/article/details/51597816 Tamic首发 前阵子看到圈子里Retrofit 2.0,RxJava(Andro ...

  8. Retrofit 2.0 超能实践,完美支持Https传输

    http://blog.csdn.NET/sk719887916/article/details/51597816 前阵子看到圈子里Retrofit 2.0,RxJava(Android), OkHt ...

  9. laravel之路由和控制器与视图

    路由和控制器: : 路由与视图: 访问:

随机推荐

  1. C#跨域

    //在ConfigureServices中配置 #region 跨域 var urls = "*";//Configuration["AppConfig:Cores&qu ...

  2. HtmlHelper2

    一.隐式从ViewBag取数据 1.action中的代码: ViewBag.UserName = "admin"; cshtml中的代码: @Html.TextBox(" ...

  3. 跟我一起学koa之在koa中使用mongoose(四)

    第一步安装mongoose,创建数据库文件夹 第二步引入mongoose,连接数据库 第三步运行项目 这个报错 只需要将es6写法变成es5写法即可 我们连接数据库,并且以post请求的方式插入数据 ...

  4. 廖雪峰Java10加密与安全-4加密算法-5非对称加密算法

    1.非对称加密 非对称加密就是加密和解密使用的不是相同的密钥 方法1: * 加密:用自己的私钥加密,然后发送给对方:encrypt(privateKeyA, message)->s * 解密:对 ...

  5. leetcode 696

    696. Count Binary Substrings Input: "00110011" Output: 6 Explanation: There are 6 substrin ...

  6. 【Redis缓存机制】1.Redis介绍和使用场景

    (1)持久化数据库的缺点平常我们使用的关系型数据库有Mysql.Oracle以及SqlServer等,在开发的过程中,数据通常都是通过Web提供的数据库驱动来链接数据库进行增删改查. 那么,我们日常使 ...

  7. WCF简要介绍

    什么是WCF WCF的全称是:Windows Communication Foundation.从本质上来说,它是一套软件开发包,是微软公司推出的符合SOA思想的技术框架.WCF为程序员提供了丰富的功 ...

  8. php匿名函数与闭包函数

    匿名函数:没有名字的函数:并没有牵扯到应用其他函数的变量问题.仅仅是没有名字 $f=function($param){} 闭包:A函数中嵌套着B函数,B程序中有用到A的变量,当外部函数C调用函数A时, ...

  9. java内部类和静态内部类

    看代码理解内部类,局部内部类和静态内部类 内部类代码: public class InnerTest { private static String name; private int age; pu ...

  10. 创建Hadoop用户