clojure的web框架

200 views
Skip to first unread message

魏永清

unread,
Feb 24, 2012, 1:59:01 AM2/24/12
to CN-Clojure
最近用compojure,但官方推荐的是 noir,然后去了解了一下。大家不知对他们有什么看法

帝归

unread,
Feb 24, 2012, 1:59:41 AM2/24/12
to cn-cl...@googlegroups.com
servlet就还行。

2012/2/24 魏永清 <weiy...@gmail.com>
最近用compojure,但官方推荐的是 noir,然后去了解了一下。大家不知对他们有什么看法



--
‘(hello world)

Sun Ning

unread,
Feb 24, 2012, 5:14:58 AM2/24/12
to CN-Clojure
这个事情好像不存在"官方"吧
noir相对compojure又high-level一点,本身也是在compojure之上的

compojure是对ring的简单封装(url路由,一些req map的处理和一些middleware预设)
noir在compojure上更进一步,对规模稍微大一点的项目更实际一些
最直接的比如在noir里,url-pattern和handler通过defpage写在一起,而在compojure里通常是分开写再到route
里注册到一起,这个过程让人想起什么struts.xml之类的东西

这是我的理解。

不过无伤大雅的问题,我很不喜欢noir把jetty-adapter的依赖以及代码生成出来,我还是倾向通过lein-ring打war包的方式,
J2EE遗毒比较重。

魏永清

unread,
Feb 24, 2012, 8:43:30 PM2/24/12
to CN-Clojure
哦,是这样。

> > 最近用compojure,但官方推荐的是 noir,然后去了解了一下。大家不知对他们有什么看法保存文章到麦库关闭工具条

Message has been deleted

Robert Luo

unread,
Feb 24, 2012, 10:21:55 PM2/24/12
to CN-Clojure
补充一点场景区别:
- noir 比较容易上手,比如将 session 变回有状态的,在习惯变量的程序员这里还是容易吃得开;比如 defpartial,
defpage 宏,将一统的 defroutes 分开,也可以加速原型构建。
- compojure 目前基本就是一个 url 分配器写法,也就是一种将函数转为 controller 的写法,有其他的简单库可以替代,

如 moustache。
- view 目前最主流的有两个库:hiccup 和 enlive,分别对应两种不同的开发方法:前者是一般没有专业页面设计人员的团队,后者用

与预先完成的 html 层对接。

jamesqiugm

unread,
Apr 22, 2012, 11:30:49 PM4/22/12
to cn-cl...@googlegroups.com
如果原来用过servlet,很容易就轮出自己的所谓框架,我现在有一个100多行的CljServlet.clj,编译成class用,其他:
1、hiccup用于生成html,极其简洁灵活;
2、congomongo或者clojure.contrib.sql访问数据库;
例如访问 http://myserver/c/test1/fun1?k1=v1&k2=v2自动转到test1.clj的fun1函数
(defn fun1 [k1 k2] (html [:h1 k1] [:h2 k2]))

在 2012年2月24日星期五UTC+8下午2时59分01秒,魏永清写道:

jamesqiugm

unread,
Apr 22, 2012, 11:30:53 PM4/22/12
to cn-cl...@googlegroups.com

Jinxian Zhu

unread,
Mar 13, 2015, 4:20:29 AM3/13/15
to cn-cl...@googlegroups.com
(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}))

road 

Reply all
Reply to author
Forward
0 new messages