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

2022-09-01 23:09:13

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

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

哦,顺便说一句,我不想使用像Compojure这样的Clojure框架。这将破坏这方面的学习部分。

提前致谢。


答案 1

我建议你从学习Servlet-API开始,它支持Java世界中与HTTP请求和响应相关的所有事情。 并在这里涵盖了很多地方。码头是这里的一个不错的选择;关于Clojure和Jetty在 http://robert.zubek.net/blog/2008/04/26/clojure-web-server/(使用Jetty 6)有一个很好的介绍。HttpServletRequestHttpServletResponse

话虽如此,Compojure的基本模型也非常低级:它只是将请求和响应包装在Clojure数据结构中,但您仍然负责所有路由,生成正确的响应代码。生成一个 etc.,它有时比 LAMP 堆栈更低级。ETag


答案 2

一个非常简单的入门方法是制作一个在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 "<html>"
          "<head>"
          "<title>Hello World!</title>"
          "</head>"
          "<body>"
          "<h1>Hello "
          (.getParameter request "Name")
          "</h1>"
          "</body>"
          "</html>"))))

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

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

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">

<display-name>Clojure Servlet</display-name>

<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>

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

此处提供了详细的示例 http://github.com/yogthos/clojure-maven-examples


推荐