Clojure Web应用程序 – 我从哪里开始?

最近我一直在研究Clojure,我喜欢这种语言。 我想看看我是否可以在其中制作一个小型Web应用程序,只是为了挑战自己。 但是,我完全没有设置任何与Java相关的Web应用程序的经验。 事实上,我根本没有太多Java经验。 我从哪里开始? 我有很多Apache和LAMP堆栈的经验,我知道在Apache上我会在大多数情况下使用Fast-CGI,但我不知道Java世界中的等价物(如果有的话)。

基本上,我只需要帮助设置服务器并启动它。 我(在某种程度上)了解如何部署纯Java应用程序,但纯Clojure应用程序呢? 这是如何运作的? 我想,来自一个所有Web应用程序都是用脚本语言编写的世界,这对我来说都是新的。

哦,顺便说一句, 我不想使用像Compojure这样的Clojure框架 。 这会打败这个学习部分。

提前致谢。

我建议你首先学习Servlet-API,它支持Java世界中与HTTP请求和响应相关的所有事情。 HttpServletRequestHttpServletResponse涵盖了很多方面。 docker是一个不错的选择; 有关Clojure和Jetty的详细介绍,请访问http://robert.zubek.net/blog/2008/04/26/clojure-web-server/ (使用Jetty 6)。

话虽这么说,Compojure的基本模型也非常低级:它只是包装Clojure数据结构中的请求和响应,但您仍然负责所有路由,生成正确的响应代码。 生成ETag等,有时比LAMP堆栈更低级别的东西。

一个非常简单的入门方法是创建一个在Tomcat或类似代码上运行的servlet,例如:

 (ns servlet ((:gen-class :extends javax.servlet.http.HttpServlet)) (defn -doGet [_ request response] (.setContentType response "text/html") (let w (.getWriter response)] (.println w (str "" "" "Hello World!" "" "" "

Hello " (.getParameter request "Name") "

" "" "")))) (defn -doPost [_ request response] (-doGet nil request response))

然后在WEB-INF文件夹中创建一个web.xml

   Clojure Servlet  hello servlet   hello /hello   index.html   

编译并将其打包成一个战争,它的行为就像一个普通的Java servlet。 要在Tomcat上部署,只需将war放入webapps文件夹并启动tomcat。

这里有一个详细的例子http://github.com/yogthos/clojure-maven-examples

如果您不想使用Compojure或其他,那么您需要加载Web服务器并调用JAR,或使用套接字编写Web服务器。 从这个意义上说,您可以按照Web上的许多指南进行设置,并编译JAR

这看起来就像你追求的那样。

如果你要使用FastCGI,有一点需要注意的是,java与其他脚本语言不同,启动JVM的启动时间与ruby或python不同。 为每个请求启动JVM是一项繁重的操作。

如果我理解你正确的问题,你正在寻找一种原生的java方式来创建应用程序。 如果是这样,compojure确切地说它会在幕后为你创建一个servlet,所以最后你可以创建一个类似java中的clojure web应用程序并将其部署到任何应用程序服务器上。

那么你可以直接从clojure中正确使用FastCGI。 FastCGI是一个非常简单的协议,因此用clojure自己编写服务器并不困难(我怀疑有一个库可以用于clojure,但可能有一个用于Java)。