2009-09-23 20 views
21

Son zamanlarda Clojure'a bakıyorum ve dili çok seviyorum. Sadece kendime meydan okumak için küçük bir web uygulaması yapıp yapamayacağımı görmek isterim. Bununla birlikte, Java ile ilgili herhangi bir web uygulaması kurma konusunda kesinlikle deneyimim yok. Aslında, Java ile gerçekten çok fazla tecrübem yok. Nereden başlarım? Apache ve LAMP yığını ile çok fazla deneyimim var ve Apache'de çoğu durumda Fast-CGI kullanacağımı biliyorum, ama Java dünyasındaki eşdeğerini (eğer varsa) bilmiyorum.Clojure web uygulaması - nereden başlarım?

Temel olarak, yalnızca sunucuyu kurmak ve başlatmaya başlamak için yardıma ihtiyacım var. Saf bir Java uygulamasını nasıl kullanacağımı (biraz) anlıyorum, peki ya peki bir Clojure uygulaması? Bu nasıl çalışıyor? Tüm web uygulamalarının komut dosyası dillerinde yazıldığı bir dünyadan geliyorum, bu benim için tamamen yeni.

Oh, ve bu arada, Compojure gibi bir Clojure çerçeve kullanmak istemiyorum. Bu, bunun öğrenme kısmını yenerdi.

Şimdiden teşekkürler.

cevap

17

Java dünyasındaki HTTP istekleri ve yanıtları ile ilgili her şeyi destekleyen Servlet-API'yi öğrenmeye başlamanızı öneririz. HttpServletRequest ve HttpServletResponse burada çok fazla yer kaplar. Jetty burada güzel bir seçimdir; Clojure ve Jetty hakkında http://robert.zubek.net/blog/2008/04/26/clojure-web-server/ (Jetty 6 kullanarak) hakkında iyi bir giriş var.

Belirtildiği gibi, Compojure'ın temel modeli de oldukça düşük seviyededir: sadece Clojure veri yapısındaki istekleri ve yanıtları tamamlar, ancak tüm yönlendirme işlemlerinden hala sorumludur ve doğru yanıt kodlarını üretirsiniz. bazen bir LAMP-yığınından daha düşük seviyeli olan bir ETag vb.

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

sonra web oluşturmak: Gerçekten basit bir yolu başlamak için

+2

Hmm, tamam, bunun nasıl çalıştığına dair bir fikir edinmek için Compojure'ın kaynak koduna bir göz atacağım. Ciddi bir şekilde tam bir web uygulaması yazıyor olsaydım muhtemelen kullanırdım, ama kendimi Java sunucularının çalışma şeklini tanıtmak için bu katmanı kendim yazmak istiyorum. +1 –

+3

http://github.com/mmcgrana/ring/blob/master/ adresinde olduğu gibi, HTTP yanıtı ile Clojure veri yapıları arasında ilişki kurmaya ilişkin güzel bir genel bakış için, Ring ve Compojure'da kullanıldığı gibi, SPEC – pmf

+0

Kesinlikle bir Servlet'e Clojure eşdeğerini sağladığından ve gerektiğinden daha fazla Java bilmeye gerek duymadan oldukça yardımcı olan Ring'e kesinlikle bakıyorum. Gördüğüm her Clojure web çerçevesi, bir çeviri katman olarak kullanıyor. – deterb

3

Eğer Compojure veya başkalarını kullanmak istemiyorsanız, ya web sunucusu yüküne sahip olmanız ve JAR'ınızı aramanız ya da soket kullanarak bir web sunucusu yazmanız gerekir. Bu anlamda, kurulum için web üzerindeki birçok guides'u takip edebilirsiniz ve compile a JAR

This, neyin peşinde olduğunuza benziyor.

+0

Aha burada mevcuttur, bir JAR derleme için bağlantı Aradığım buydu! Clojure'un bir web sunucusunda nasıl çalıştırılacağı konusunda emin değildim. Dediğim gibi, dosyaları belirli bir dizine koyduğunuz ve bittiğiniz bir betik dili arka planından geliyorum. +1 :) –

+0

Bu yararlı olabilir: http://markmail.org/message/mipzbehperyyd67j –

-1

FastCGI'yi doğrudan clojure'dan doğru şekilde kullanabilirsiniz. FastCGI oldukça basit bir protokoldür, bu yüzden kendinize bir sunucu yazmak zor olmamalıdır (clojure için bunu yapmak için bir kütüphane olduğundan şüphe duyuyorum, fakat Java için bir tane olabilir).

1

FastCGI ile gidecekseniz, dikkat edilmesi gereken noktalardan biri, java'nın diğer yazı dilleri gibi olmaması, JVM'yi başlatmak için ruby ​​veya python'dan farklı bir başlangıç ​​zamanı olmasıdır. Ve her istek için JVM'yi başlatmak için ağır bir işlemdir.

Eğer doğru bir şekilde sorguladığınızı anlıyorsanız, uygulamalar oluşturmak için yerel bir java yolu arıyorsunuz. Eğer öyleyse, tam tersi, sahnelerin ardında sizin için bir sunucu uygulaması yaratıyorsa, bu durumda, java'daki gibi bir clojure web uygulaması oluşturabilir ve herhangi bir uygulama sunucusuna dağıtabilirsiniz.

+0

Evet, sorumu doğru anladınız. Anlıyorum ki bu Compojure'ın yaptığı şey, ama * nasıl * yapar? Temel olarak tüm bunların nasıl çalıştığını soruyorum. Compojure'ı kullanabileceğimi biliyorum ama Java tabanlı web uygulamalarının nasıl çalıştığını anlamaya çalışıyorum. –

14

bir örneğin Tomcat veya benzeri çalışan bir servlet yapmaktır.Bir savaşın içine WEB-INF klasörüne

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

derleme ve paket bu xml ve sadece normal bir Java servlet gibi davranır edeceğiz. Tomcat'a dağıtmak için, savaşı webapps klasörüne bırakın ve tomcat'i başlatın.

Ayrıntılı bir örnek http://github.com/yogthos/clojure-maven-examples