Compojure/入門
外觀
| 此頁面可能需要更新以反映當前知識。 您可以幫助更新它,討論進度,或請求幫助。 |
要下載和構建 Compojure,您需要 Git (git)、Leiningen (lein) 和 Java 執行時環境 (java)。
download latest release from git (ex https://github.com/weavejester/compojure.git) cd compojure lein deps lein jar
這將生成compojure.jar檔案。將此檔案放到您的 Java 類路徑中。
該depslein 目標將下載所需的依賴項。如果失敗,您可以從以下地址手動下載它們:
http://cloud.github.com/downloads/weavejester/compojure/deps.zip
在compojure目錄中解壓縮該檔案並重新執行lein.
建立一個名為“compojure”的 shell 指令碼,用於執行 Clojure,其中包含compojure.jar以及deps目錄在類路徑中
#!/bin/sh
CLASSPATH=compojure.jar
for f in deps/*.jar; do
CLASSPATH=$CLASSPATH:$f
done
java -cp $CLASSPATH clojure.lang.Script $1
或者,對於 Windows
@echo off
SETLOCAL enabledelayedexpansion
FOR %%F IN (deps/*.jar) DO (
SET cp=!cp!;deps/%%F%
)
java -cp "compojure.jar;%cp%" clojure.lang.Repl %1%
然後建立一個名為“hello.clj”的 Clojure 原始檔
(ns hello-world
(:use compojure))
(defroutes greeter
(GET "/"
(html [:h1 "Hello World"])))
(run-server {:port 8080}
"/*" (servlet greeter))
接下來,使用compojureshell 指令碼
./compojure hello.clj
您的 Web 應用程式現在應該可以訪問:https://:8080/
首先,建立您的 servlet 檔案
;; src/myapp/MyServlet.clj
(ns myapp.MyServlet
(:use compojure)
(:gen-class
:extends javax.servlet.http.HttpServlet))
(defroutes greeter
(GET "/"
(html [:h1 "Hello world"])))
(defservice greeter)
接下來,建立您的 WEB-INF 目錄
mkdir -p WEB-INF/lib WEB-INF/classes
將 compojure.jar、clojure-contrib.jar 和 clojure.jar 複製到 WEB-INF/lib。
現在您需要建立 WEB-INF/web.xml
<web-app>
<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>myapp.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myservlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
最後,編譯 WAR 檔案。這是一個執行此操作的 Ant 構建指令碼
<project name="myapp" basedir="." default="war">
<property name="build.dir" value="WEB-INF/classes" />
<property name="source.dir" value="src" />
<property name="lib.dir" value="WEB-INF/lib" />
<property name="servlet-api.jar" value="/usr/share/java/servlet-2.3.jar" />
<property name="warfile" value="myapp.war" />
<target name="compile">
<java classname="clojure.lang.Compile">
<classpath>
<path location="${build.dir}"/>
<path location="${source.dir}"/>
<fileset dir="${lib.dir}">
<include name="*.jar"/>
</fileset>
<path location="${servlet-api.jar}"/>
</classpath>
<sysproperty key="clojure.compile.path" value="${build.dir}"/>
<arg value="myapp.MyServlet"/>
</java>
</target>
<target name="war" depends="compile">
<war warfile="${warfile}" webxml="WEB-INF/web.xml">
<classes dir="${build.dir}"/>
</war>
</target>
</project>
這是一個簡單的計算器示例。
(ns example
(:use compojure))
(defn html-doc
[title & body]
(html
(doctype :html4)
[:html
[:head
[:title title]]
[:body
[:div
[:h2
;; Pass a map as the first argument to be set as attributes of the element
[:a {:href "/"} "Home"]]]
body]]))
(def sum-form
(html-doc "Sum"
(form-to [:post "/"]
(text-field {:size 3} :x)
"+"
(text-field {:size 3} :y)
(submit-button "="))))
(defn result
[x y]
(let [x (Integer/parseInt x)
y (Integer/parseInt y)]
(html-doc "Result"
x " + " y " = " (+ x y))))
(defroutes webservice
(GET "/"
sum-form)
(POST "/"
(result (params :x) (params :y))))
(run-server {:port 8080}
"/*" (servlet webservice))