断断续续学习了很久的Clojure,对语法也半生不熟的了,不过基本可以使用了,写点web的项目锻炼一下Clojure的熟练度。
###背景介绍
Compojure是Ring的中间件,实现了request的路由功能。
###建立项目
开发Clojure项目标配的Lein,使用Lein命令 lein new compojure-example,建立项目。
###添加依赖
初步建立项目之后,项目中只有Clojure-core的依赖,想要使用Compojure还需要添加相关的依赖。在project.clj中新增依赖:1
2
3
4[org.clojure/clojure "1.6.0"]
[compojure "1.1.6"]
[ring/ring-core "1.2.1"]
[ring/ring-jetty-adapter "1.2.1"]
增加完依赖,需要增加ring的一些插件,便于使用一些命令1
:plugins [[lein-ring "0.8.10"]]
完成了上述配置之后,project.clj文件如下:1
2
3
4
5
6
7
8
9(defproject compojure-example "0.1.0"
:description "Example Compojure project"
:dependencies [[org.clojure/clojure "1.6.0"]
[compojure "1.1.6"]
[ring/ring-core "1.2.1"]
[ring/ring-jetty-adapter "1.2.1"]
[hiccup "1.0.0"]]
:plugins [[lein-ring "0.8.10"]]
:ring {:handler compojure.example.routes/app})
###routes
先写一个简单的hello world。
####增加引用1
2
3
4
5
6
7
8
9
10(ns compojure.example.routes
(:gen-class)
(:use compojure.core
ring.adapter.jetty
compojure.example.views
[hiccup.middleware :only (wrap-base-url)]
ring.adapter.jetty)
(:require [compojure.route :as route]
[compojure.handler :as handler]
[compojure.response :as response]))
ring.adapter.jetty为了将应用跑在jetty上,当然如果不需要运行在jetty上也可以不增加。1
2
3
4
5(defroutes app-routes
(GET "/" [] ("hello world")
(route/resources "/")
(route/not-found "Page not found")))
(run-jetty main-routes {:port 5050})
####静态资源
通过1
(route/resources "/")
的方式可以访问项目中的静态文件(如js,css,html,img)等。
###run
####默认ring启动
现在使用命令1
lein ring server
就可以运行项目,web项目将默认以3000启动。
####jetty 启动
使用如下命令:1
2
3lein deps
lein compile
lein uberjar
如上之后,在项目的target目录下会有XX-standalone.jar,使用命令1
java -jar XX-standalone.jar
就可以在jetty中启动项目。
###Reference
Compojure wiki
Compojure API
Ring Spec
Clojure-doc Basic web Development