Aplikacja internetowa Clojure-od czego zacząć?

Ostatnio zajrzałam do Clojure i uwielbiam ten język. Chciałbym zobaczyć, czy mogę zrobić w nim małą aplikację internetową, tylko po to, aby rzucić sobie wyzwanie. Nie mam jednak absolutnie żadnego doświadczenia w konfigurowaniu żadnych aplikacji internetowych związanych z Javą. W rzeczywistości nie mam zbyt dużego doświadczenia z Javą. Od czego zacząć? Mam duże doświadczenie z Apache i LAMP stack i Wiem, że na Apache po prostu użyłbym Fast-CGI w większości przypadków, ale nie znam odpowiednika w Javie świat (jeśli taki istnieje).

Zasadniczo potrzebuję pomocy w konfiguracji serwera i uruchomieniu go. Rozumiem (trochę) jak wdrożyć czystą aplikację Java, ale co z czystą aplikacją Clojure? Jak to działa? Myślę, że pochodzi ze świata, w którym wszystkie aplikacje internetowe są napisane w językach skryptowych, to wszystko jest dla mnie nowe.

A tak przy okazji, nie chcę używać frameworka Clojure takiego jak Compojure. Które pokonałyby część uczącą się to.

Z góry dzięki.

Author: Sasha Chedygov, 2009-09-23

5 answers

Polecam zacząć od nauki Servlet-API, które wspiera wszystkie rzeczy związane z żądaniami HTTP i odpowiedziami w świecie Javy. HttpServletRequest i HttpServletResponse pokrywają tu dużo ziemi. Jetty jest tu dobrym wyborem; jest dobre wprowadzenie o Clojure i Jetty na http://robert.zubek.net/blog/2008/04/26/clojure-web-server / (używając Jetty 6).

Biorąc to pod uwagę, podstawowy model Compojure jest również dość niski: po prostu owija prośby i odpowiedzi w Clojure-datastructures, ale nadal jesteś odpowiedzialny za wszystkie routing, generowanie właściwych kodów odpowiedzi. generowanie ETag itd., co czasem jest bardziej niskopoziomowe niż przy lampach.

 17
Author: pmf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-23 11:40:56

Naprawdę prostym sposobem na rozpoczęcie pracy jest stworzenie servletu, który działa na Tomcat lub podobnym, na przykład:

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

Następnie Utwórz sieć.xml w folderze WEB-INF

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

Skompiluj i spakuj to do wojny, a będzie się zachowywał jak zwykły serwlet Javy. Aby wdrożyć na Tomcat, po prostu upuść wojnę w folderze webapps i uruchom tomcat.

Szczegółowy przykład jest dostępny tutaj http://github.com/yogthos/clojure-maven-examples

 14
Author: Yogthos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-24 23:33:13

Jeśli nie chcesz używać Compojure lub innych, musisz albo załadować serwer i wywołać swój JAR, albo napisać serwer używając gniazd. W tym sensie możesz śledzić każdy z wielu przewodników w Internecie do konfiguracji i skompilować JAR

To wygląda na to, czego szukasz.

 3
Author: Timothy Pratley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-23 07:45:58

Jedną rzeczą, aby zauważyć, jeśli masz zamiar przejść z FastCGI jest java nie jest jak inne języki skryptowe istnieje czas uruchamiania się dla uruchomienia JVM w przeciwieństwie do Ruby lub python. Uruchomienie JVM dla każdego żądania jest ciężką operacją.

Jeśli dobrze rozumiem, szukasz natywnego sposobu tworzenia aplikacji w Javie. Jeśli tak, compojure robi dokładnie to, że tworzy dla Ciebie servlet za kulisami, więc w końcu możesz utworzyć aplikację internetową clojure tylko podobnie jak te w Javie i wdrożyć go na dowolnym serwerze aplikacji.

 1
Author: Hamza Yerlikaya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-23 09:25:35

Dobrze można prawidłowo używać FastCGI bezpośrednio z clojure. FastCGI jest dość prostym protokołem, więc nie powinno być tak trudno samemu napisać serwer w clojure (wątpię, że istnieje biblioteka, która zrobi to dla clojure, ale może być taka dla Javy).

 -1
Author: tomjen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-23 07:14:00