代码之家  ›  专栏  ›  技术社区  ›  Sasha Chedygov

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

  •  21
  • Sasha Chedygov  · 技术社区  · 15 年前

    所以最近我一直在研究Clojure,我喜欢它的语言。我想看看我是否可以在其中制作一个小的Web应用程序,只是为了挑战我自己。然而,我完全没有建立任何Java相关Web应用程序的经验。事实上,我对Java几乎没有多少经验。我从哪里开始?我有很多关于Apache和LAMP栈的经验,我知道Apache在大多数情况下只使用快速CGI,但是我不知道Java世界中的等价物(如果有一个)。

    基本上,我只需要在设置服务器和启动服务器方面得到帮助。我理解(有点)如何部署纯Java应用程序,但如何使用纯Culjure应用程序呢?这是怎么回事?我想,来自一个所有Web应用程序都是用脚本语言编写的世界,这对我来说是全新的。

    哦,顺便说一下, 我不想使用Clojure框架 如公司。这将使学习部分失败。

    事先谢谢。

    5 回复  |  直到 10 年前
        1
  •  17
  •   pmf    15 年前

    我建议您首先学习Servlet API,它支持Java世界中与HTTP请求和响应相关的所有内容。 HttpServletRequest HttpServletResponse 这里有很多地方。杰蒂是这里的一个不错的选择;这里有一个关于Clojure和杰蒂的很好的介绍 http://robert.zubek.net/blog/2008/04/26/clojure-web-server/ (使用码头6)。

    也就是说,compojere的基本模型也是非常低级的:它只是将请求和响应包装在clojure数据结构中,但是您仍然要负责所有路由,生成正确的响应代码。生成一个 ETag 等,这有时是更低级的东西比与一个灯栈。

        2
  •  14
  •   Yogthos    15 年前

    一个真正简单的开始方法是创建一个运行在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

        3
  •  3
  •   Timothy Pratley    15 年前

    如果您不想使用compojeure或其他软件,那么您要么需要加载Web服务器并调用JAR,要么使用套接字编写Web服务器。从这个意义上说,你可以跟随任何一个 guides 在网上设置,以及 compile a JAR

    This 看起来像你在找什么。

        4
  •  1
  •   Hamza Yerlikaya    15 年前

    需要注意的是,如果你要和FASCGI一起运行,Java不像其他脚本语言,启动JVM有一个启动时间不同于Ruby或Python。 对于每个请求启动JVM是一项繁重的操作。

    如果我正确地理解了你的问题,你正在寻找一个原生Java方法来创建应用程序。如果如此,CopjJoE确实会在后台创建一个Servlet,所以最终您可以创建一个类似Java中的CuljureWeb应用程序,并将其部署到任何应用服务器上。

        5
  •  -1
  •   tomjen    15 年前

    你可以直接从Clojure正确地使用FastCGI。FASCGI是一个非常简单的协议,所以在自己的服务器上编写一个服务器并不困难(我怀疑有一个库来为Culjure做这个,但是可能有一个用于Java)。