My First Hello World Web App Using Compojure

Sat 24 April 2010
  • 把戏 tags:
  • clojure
  • compojure
  • java
  • lein published: true comments: true

Compojure是一个用Clojure写成的类似Sinatra的Web框架。Leiningen是一个新的Clojure构建工具,它用Maven来处理依赖管理,而通过封装Lancet(基于Ant)来实现build-in的task。

以上是背景介绍。以下是HelloWorld。

创建一个目录作为工程目录
[cc lang="bash"]
mkdir compojure-app
cd compojure-app
[/cc]

像创建build.xml和pom.xml一样创建project.clj
[cc lang="lisp"]
(defproject info.sunng/compojure-app "0.0.1"
:description "A demo app running on compojure framework"
:dependencies [[org.clojure/clojure "1.1.0"]
[org.clojure/clojure-contrib "1.1.0"]
[compojure "0.3.2"]]
:dev-dependencies [[leiningen/lein-swank "1.1.0"]]
:main info.sunng.compojureapp.helloworld)
[/cc]
首行定义了项目的groupId, artifactId和version,其后的是maven风格的依赖定义,最后我们还定义了程序的主类。

这个helloworld只有一个文件,被放在src/info/sunng/compojureapp/目录下
[cc lang="lisp"]
(ns info.sunng.compojureapp.helloworld (:gen-class) (:use compojure))

(defroutes example-routes
(GET "/" "Hello W0rld")
(ANY "*" [404 "Page Not Found"]))

(defn -main []
(run-server {:port 8080} "/*" (servlet example-routes)))
[/cc]
中间就是Sinatra风格的URL映射定义,最后在主类中通过一个run-server方法以嵌入式的方式运行一个jetty

回到工程目录,执行构建
[cc lang="bash"]
lein deps
lein compile
lein uberjar
[/cc]

通过uberjar可以将依赖通通打入一个jar包中,接着就可以通过 java -jar compojure-app-standalone.jar 启动你的Web程序了,很酷吧

除了这种方式,还可以通过 lein swank 启动一个swank server(project.clj中定义了dev-dependency),再用Emacs的SLIME交互式地运行程序。

参考