zoukankan      html  css  js  c++  java
  • httpserver支持路由传输控制器

     

    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))
    }













  • 相关阅读:
    正则如何匹配div下的所有<li>标签?
    日历
    生成一定数量的不重复随机数
    PHP微信红包的算法实现探讨
    Flask 快速使用 —— (1)
    Django rest framework(8)---- 视图和渲染器
    Django 组件之 ----- content-type
    Django rest framework(7)----分页
    Django rest framework(6)----序列化(2)
    Django rest framework(5)----解析器
  • 原文地址:https://www.cnblogs.com/sunlong88/p/11260973.html
Copyright © 2011-2022 走看看