dotweb框架之旅 [四] - 常用对象-HttpContext
dotweb属于一个Web框架,希望通过框架行为,帮助开发人员快速构建Web应用,提升开发效率,减少不必要的代码臃肿。
框架地址:https://github.com/devfeel/dotweb
dotweb包含以下几个常用对象:
- App(dotweb) App容器,为Web请求处理提供必要的容器类功能。
- HttpServer 用于真正处理Web请求的服务模块。
- HttpContext 用于提供单次请求处理中请求信息与响应信息的快捷处理与唯一入口。
- Response 用于从服务器向用户发送输出的结果。
- Request 用于从用户那里取得信息。
- Session 用于存储关于某个连接会话的信息,或者修改相关的设置。目前支持存储本机内存与Redis分布式。
本章主要对HttpContext对象展开介绍。
HttpContext实现Context接口,主要承担单次请求处理中请求信息、响应信息、全局对象的快捷功能与唯一入口。
主要方法:
| 方法 | 描述 |
HttpServer() |
获取当前请求所属HttpServer对象 |
Response() |
获取当前请求的Response对象 |
Request() |
获取当前请求的Request对象 |
WebSocket() |
如果是WebSocket连接,返回WebSocket对象 |
HijackConn() |
如果是Hijack请求,返回Hijack连接对象 |
AppContext() |
返回全局对象容器 |
Cache() |
返回全局缓存对象 |
Items() |
返回当前请求流程内有效的对象容器 |
ViewData() |
返回用于模板数据传输的对象容器 |
Session() |
返回当前请求有效的Session对象 |
Redirect() |
提供跳转支持,默认建议302跳转 |
QueryString() |
指定Key查询Get参数的值 |
PostFormValue() |
指定Key查询Post参数的值 |
GetRouterName() |
指定Key查询动态路由值 |
ReadCookie() |
指定Key读取Cookie对象 |
Bind() |
将Json、Xml、Form提交的属性绑定指定结构体 |
Write() |
指定状态码输出二进制内容 |
WriteString()\WriteStringC() |
输出字符串,默认text/plain,其中以C结尾的方法支持设置状态码 |
WriteHtml()\WriteHtmlC() |
输出Html字符串,默认text/html,其中以C结尾的方法支持设置状态码 |
WriteJson()\WriteJsonC() |
输出Json字符串,默认application/json,其中以C结尾的方法支持设置状态码 |
WriteJsonp() |
输出适配Jsonp的字符串 |
View()ViewC() |
指定模板名称输出Html内容,其中以C结尾的方法支持设置状态码 |
常用功能示例:
1、获取Get参数值
func Index(ctx dotweb.Context) error {
userid := ctx.QueryString("userid")
ctx.WriteString(userid)
return nil
}
2、获取Post参数值
func Index(ctx dotweb.Context) error {
userid := ctx.PostFormValue("userid")
ctx.WriteString(userid)
return nil
}
3、获取Post Body
func Index(ctx dotweb.Context) error {
data := ctx.Request().PostBody()
ctx.Write(, data)
return nil
}
4、获取上传的文件
func Index(ctx dotweb.Context) error {
file, err := ctx.Request().FormFile("filekey")
if err != nil {
ctx.WriteString("upload file error:", err.Error())
} else {
ctx.WriteString(file.FileName())
}
return nil
}
5、读取Cookie
func Index(ctx dotweb.Context) error {
c, err := ctx.ReadCookie("UserName")
if err!= nil{
ctx.WriteString(err.Error())
}else {
ctx.WriteString(c.Value)
}
return nil
}
6、写入Session值
func Index(ctx dotweb.Context) error {
ctx.Session().Set("UserID", )
ctx.WriteString("set session success")
return nil
}
7、输出字符串(默认200状态码)
func Index(ctx dotweb.Context) error {
ctx.WriteString("welcome to dotweb")
return nil
}
8、输出Json字符串(默认200状态码)
func Index(ctx dotweb.Context) error {
type User struct {
UserName string
Age int
}
u:=&User{
UserName:"dotweb",
Age:,
}
ctx.WriteJson(u)
return nil
}
9、指定模板名称输出Html字符串
type UserInfo struct {
UserName string
Sex bool
}
type BookInfo struct {
Name string
Size int64
}
func TestView(ctx dotweb.Context) error {
ctx.ViewData().Set("data", "图书信息")
ctx.ViewData().Set("user", &UserInfo{UserName: "user1", Sex: true})
m := make([]*BookInfo, )
m[] = &BookInfo{Name: "book0", Size: }
m[] = &BookInfo{Name: "book1", Size: }
m[] = &BookInfo{Name: "book2", Size: }
m[] = &BookInfo{Name: "book3", Size: }
m[] = &BookInfo{Name: "book4", Size: }
ctx.ViewData().Set("Books", m)
err := ctx.View("testview.html")
return err
}
10、跳转地址
func Redirect(ctx dotweb.Context) error {
err := ctx.Redirect(http.StatusFound, "http://www.baidu.com")
if err != nil {
ctx.WriteString(err)
}
return err
}
11、设置Header
func Index(ctx dotweb.Context) error {
ctx.Response().Header().Set("Content-Type", "text/html; charset=utf-8")
ctx.WriteString("welcome to dotweb")
return nil
}
以上简单示例,展示了如何通过Context获取请求信息,设置输出信息,使用Session等。
更多代码可参考 https://github.com/devfeel/dotweb-example
欢迎各位加入我们的go语言QQ群:193409346
dotweb框架之旅 [四] - 常用对象-HttpContext的更多相关文章
- dotweb框架之旅 [二] - 常用对象-App(dotweb)
dotweb属于一个Web框架,希望通过框架行为,帮助开发人员快速构建Web应用,提升开发效率,减少不必要的代码臃肿. dotweb包含以下几个常用对象: App(dotweb) App容器,为Web ...
- dotweb框架之旅 [三] - 常用对象-HttpServer
dotweb属于一个Web框架,希望通过框架行为,帮助开发人员快速构建Web应用,提升开发效率,减少不必要的代码臃肿. dotweb包含以下几个常用对象: App(dotweb) App容器,为Web ...
- dotweb框架之旅 [一] - HelloWorld
一直想着,要系统性的写一些dotweb使用的文章,之前拖延了不少时间,今天,下定决定,算是正式的开始,也请大家一起监督. dotweb,是一款追求简约大方的go web框架,正如其github项目主页 ...
- Entity Framework 实体框架的形成之旅--利用Unity对象依赖注入优化实体框架(2)
在本系列的第一篇随笔<Entity Framework 实体框架的形成之旅--基于泛型的仓储模式的实体框架(1)>中介绍了Entity Framework 实体框架的一些基础知识,以及构建 ...
- Spring框架的第四天(整合ssh框架)
## Spring框架的第四天 ## ---------- **课程回顾:Spring框架第三天** 1. AOP注解方式 * 编写切面类(包含通知和切入点) * 开启自动代理 2. JDBC模板技术 ...
- Android应用框架中的四个核心要点
Android应用框架中的四个核心要点:活动(Activity).消息(Intent).视图(View).任务(Task) (一)活动Activity Android系统内部有专门的Activity堆 ...
- Apworks框架实战(四):使用Visual Studio开发面向经典分层架构的应用程序:从EasyMemo案例开始
时隔一年,继续我们的Apworks框架之旅.在接下来的文章中,我将逐渐向大家介绍如何在Visual Studio中结合Apworks框架,使用ASP.NET Web API和MVC来开发面向经典分层架 ...
- JavaScript常用对象的方法和属性
---恢复内容开始--- 本文将简单介绍JavaScript中一些常用对象的属性和方法,以及几个有用的系统函数. 一.串方法 JavaScript有强大的串处理功能,有了这些串方法,才能编写出丰富多彩 ...
- DOM_05之DOM、BOM常用对象
1.HTML DOM常用对象之Table:①创建:createTHead():createTBody():createTFoot():②删除:deleteTHead():deleteTFoot():③ ...
随机推荐
- 201521123002 《Java程序设计》第6周学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...
- 201521123048 《Java程序设计》第2周学习总结
本周学习总结 (1)String类数据类型 (2)枚举类型应用 (3)Java数组创建及使用 (4)进一步运用和了解码云 书面作业 Q1.使用Eclipse关联jdk源代码,并查看String对象的源 ...
- JAVA2015086第十一周作业
本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 书面作业 本次PTA作业题集多线程 1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1.1 除了 ...
- 过滤器复用代码【中文乱码、HTML转义】
中文乱码 public class CharacterEncodingFilter implements Filter { public void doFilter(ServletRequest re ...
- 笔记本win10安装node的尖酸历程。。。。。。
在公司的电脑搭建vue环境分分钟搞定,周末闲的无聊给自己的电脑也搭建一个环境,谁知道这么多的问题,记录下这些问题,希望对那些安装node环境有问题的朋友一些帮助. 1.下载安装node 下载地址htt ...
- Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/SpringStruts]]
今天启动Tomcat时候遇到了这个问题 Failed to start component [StandardEngine[Catalina].StandardHost[localhost].Stan ...
- xgboost安装指南(win10,win7 64位)
---恢复内容开始--- Win7 64位系统下安装XGBoost 1. 环境介绍 计算机系统:win7 64位 Xgboost版本:xgboost0.6 2. 依赖软件环境 1) python 64 ...
- js时间戳和日期字符串相互转换
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C ...
- sql语句增删改查与子查询
修改表 修改表 语法: Alter table <旧表名> rename [ TO] <新表名>; 例子:Alter table `demo01` rename `demo02 ...
- AES加密解密——AES在JavaWeb项目中前台JS加密,后台Java解密的使用
一:前言 在软件开发中,经常要对数据进行传输,数据在传输的过程中可能被拦截,被监听,所以在传输数据的时候使用数据的原始内容进行传输的话,安全隐患是非常大的.因此就要对需要传输的数据进行在客户端进行加密 ...