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))