Ring 是一个在 Clojure 中的对于 HTTP 的抽象,是构建 Web 应用的底层接口和库,类似于 Java 中的 Servlet

核心概念

Handler

Handler 是一个定义web应用的函数,其有一个表示 HTTP Request 请求的 map 参数,并返回一个 表示 HTTP Response 的 map

(defn hello-world [request]
   {:status 200
    :headers {"Content-Type" "text/plain"}
    :body "Hello World"})

Request

Request 使用一个 map 表示 HTTP Request 对象,其中还可以通过 moddleware 添加一些自定义的键值对

标准 key 如下:

  • :server-port 端口

  • :server-name 服务器名或IP

  • :remote-addr 客户端IP地址或代理地址

  • :uri 域名后的全路径

  • :query-string 查询字符串

  • :scheme 协议 http 或 https

  • :request-method 请求方式

  • :headers 请求头

  • :body 请求内容

Response

用来代表返回的 HTTP Response,是一个包含三个 key 的 map

  • :status HTTP 状态码

  • :headers 返回的 HTTP headers

  • :body 返回内容

Middleware

Middleware 用于给 handler 添加额外的功能,它需要接受一个 handle 参数,返回一个新的 handler

(defn wrap-content-type [handler content-type]
   (fn [request]
       (let [response (handler request)]
           (assoc-in response [:headers "Content-Type"] content-type))))

使用

(def app
   (wrap-content-type handler "text/html"))

(def app
   (-> handler
       (wrap-content-type "text/html")
       (wrap-keyword-params)
       (wrap-params)))

Middleware 在 Ring 中会很频繁的使用,包含参数处理、Session处理、文件上传等都是通过 middleware 完成的

最新文章

  1. 2015年软件测试STATE报告
  2. json 构造和解析
  3. adapter(转自Devin Zhang)
  4. java 获取某个URL的文件扩展名的方法(非精确,精确的扩展名应该使用服务器返回的MIME-TYPE)
  5. iOS客户端的在线安装和更新——针对ADHoc证书
  6. magento -- 如何改善前台图片质量
  7. 如何使用编辑模板在ASPxGridView中进行新增修改(除去常规的gridviw模板编辑外)
  8. 深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
  9. Anroid之Intent的使用
  10. ios 游戏《魂斗罗》 AL文件素材破解
  11. unity3d插件Daikon Forge GUI 中文教程-1-Daikon Forge介绍
  12. mvc 在弹出框中实现文件下载
  13. mysql的执行过程
  14. 使用TTS实现Oracle跨版本迁移
  15. [POI2007]ODW-Weights(贪心)
  16. python接口自动化28-requests-html爬虫框架
  17. java 并发包runnable 与 callable
  18. JS 格林威治时间格式(GMT)格式化
  19. 通过Parcelable协议传递数据出现系列错误
  20. asp.net --- reponse对象写图片

热门文章

  1. JavaScript的自调用函数
  2. Vue2.0 【第二季】第8节 Component 父子组件关系
  3. String的那些事
  4. axios请求拦截器
  5. Django 中自定义用户模型及集成认证授权功能总结
  6. centOS7python版本升到3
  7. css hover 动画 transition:background-color 0.2s,color 0.2s; 外层套内层,正常是 里外层 鼠标上来 外层有hover,如果就想到里层hover触发外层hover,要用外层position 定义绝对定位,内层的hover跳出外层的div,这样视觉上就是两个单独的div,进行内外层联动。
  8. Mol. Cell. Proteomics | 癌细胞衍生的小细胞外囊体通过促进HGF-Met途径促进受体细胞转移
  9. 泛微E-cology OA 远程代码执行漏洞
  10. Longest subarray of target sum