代码之家  ›  专栏  ›  技术社区  ›  Konrad Garus

成熟的Clojure web框架?[关闭]

  •  48
  • Konrad Garus  · 技术社区  · 14 年前

    目前成熟的Clojure web框架有哪些选择?我正在寻找某种功能矩阵,告诉我流行的框架支持什么以及支持到什么程度,包括:

    • HTTP会话
    • HTML表单(参数可用作映射、错误处理、验证)
    • 应用程序流(已知于Java框架-请求处理程序返回最终由呈现程序处理的操作标识符)
    5 回复  |  直到 14 年前
        1
  •  33
  •   Community Rick James    7 年前

    也许 my answer 在Clojure中开发restfulweb服务的良好起点是什么?

    除此之外,我还想补充一点,您可能不应该期望使用您可能从Java中了解到的那种“应用程序流”来处理事情(或者如果您认为您真的需要它,您可能需要使用自己的lib来支持它!)。不过,这没关系,因为人们似乎对Ring的handler-is-a-function、高阶中间件友好的方法非常满意。


    • 响应模板:
      有许多Clojure特定的解决方案,包括 Enlive Hiccup 快速的 ). 另外,在这里,我们可以直接使用Java,比如, StringTemplate . 这甚至有阻止模板和逻辑混合的好的一面!(我相信Stuart Halloway提到了相关性——他的公司——在他们的工作中使用了这种策略,并取得了巨大的成功。)

    • HTTP会话
      Sandbar 我想是吧。作者已经开始 a series of blogposts


    • 那是 Ring Compojure 和/或 Moustache . 见下文。


    • 应用程序流(已知于Java框架-请求处理程序返回最终由呈现程序处理的操作标识符)
      如上所述,这并不是人们在Clojure中通常做的事情。


    this Ring tutorial 通过 戒指 复合物 作者詹姆斯·里夫斯 some documentation 在Compojure上。也许 my recent answer 这个问题可能也有帮助。环的来源还包括一个伟大的规范文件。

        2
  •  14
  •   mikera    13 年前

    由于这个问题最初是问/答的 Noir web framework

    它使用hiccup作为模板部分,但是提供了一个更完整的框架。

    (ns my-app
      (:use noir.core)
      (:require [noir.server :as server]))
    
    (defpage "/welcome" []
        "Welcome to Noir!")
    
    (server/start 8080)
    
        3
  •  8
  •   albusshin    11 年前

    Luminus ,不是因为它的名字很棒,而是它的特点。

    从ring&compoujure开始构建自己的框架也是一个不错的选择。

        4
  •  1
  •   Howard M. Lewis Ship    11 年前

    你可能问错了问题。我在你的问题中看到的是“Clojure框架最像我习惯的Java面向对象框架是什么?”。对此没有很好的答案;如果您只对一种状态完整的服务器端方法(如Grails或Tapestry)感到满意,那么您也许应该留在那里,并找到一种方法在Clojure中实现一些后端。

        5
  •  1
  •   ainixian2004    9 年前

    https://github.com/zhujinxian/road

    (defn render-test [ret tmt]
      (-> (resp/response "------render----test------") 
        (#(resp/content-type %1 "text/plain"))))
    
    (defn foo
      "I don't do a whole lot."
      [x]
      (str "来自源码目录的参数:" x))
    
    (defn handler [^Integer x]
        {:$r render-test :text (str "hello world, road goes sucess!" (foo x))})
    
    (defn home [req content ^Integer num]
        {:hiccup "home.clj" :content (str "home" content) :num num})
    
    (defroad road (GET "/web-test-0.1.0-SNAPSHOT-standalone/main" handler) 
                  (GET "/web-test-0.1.0-SNAPSHOT-standalone/home/:num{\\d+}" home))
    
    (defn -main [& args]
      (log/info "---------log4j test-------")
      (jetty/run-jetty road {:port 3000}))