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://127.0.0.1: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))