Aplicação web Clojure – por onde eu começo?

Ultimamente tenho procurado o Clojure e adoro a linguagem. Eu gostaria de ver se posso fazer uma pequena aplicação web, apenas para me desafiar. No entanto, não tenho absolutamente nenhuma experiência em configurar quaisquer aplicativos da Web relacionados ao Java. Na verdade, eu realmente não tenho muita experiência com Java. Por onde eu começo? Eu tenho muita experiência com o Apache e a pilha LAMP, e eu sei que no Apache eu usaria Fast-CGI na maioria dos casos, mas eu não sei o equivalente no mundo Java (se houver um).

Basicamente, eu só preciso de ajuda para configurar o servidor e começar. Eu entendo (de alguma forma) como implantar um aplicativo Java puro, mas e um aplicativo Clojure puro? Como isso funciona? Eu acho, vindo de um mundo onde todas as aplicações web são escritas em linguagens de script, isso é tudo novo para mim.

Ah, e a propósito, eu não quero usar um framework Clojure como o Compojure. Isso derrotaria a parte de aprendizado disto.

Desde já, obrigado.

Eu recomendo que você comece aprendendo o Servlet-API, que faz o backup de todas as coisas relacionadas a solicitações HTTP e respostas no mundo Java. HttpServletRequest e HttpServletResponse cobrem muito terreno aqui. Jetty é uma boa escolha aqui; há uma boa introdução sobre Clojure e Jetty em http://robert.zubek.net/blog/2008/04/26/clojure-web-server/ (usando o Jetty 6).

Dito isto, o modelo básico do Compojure também é bastante baixo: ele apenas envolve as solicitações e as respostas nas estruturas de dados do Clojure, mas você ainda é responsável por todo o roteamento, gerando os códigos de resposta corretos. gerando um ETag etc., que às vezes é mais material de baixo nível do que com um LAMP-stack.

Uma maneira realmente simples de começar é criar um servlet que seja executado no Tomcat ou similar, por exemplo:

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

em seguida, crie um web.xml na sua pasta WEB-INF

   Clojure Servlet  hello servlet   hello /hello   index.html   

compile e empacote isso em uma guerra, e ele se comportará como um servlet Java regular. Para implantar no Tomcat, simplesmente solte a guerra na pasta webapps e inicie o tomcat.

Um exemplo detalhado está disponível aqui http://github.com/yogthos/clojure-maven-examples

Se você não quer usar Compojure ou outros, então você precisa ter o servidor web e chamar seu JAR, ou escrever um servidor usando sockets. Nesse sentido, você pode seguir qualquer um dos muitos guias na Web para configurar e compilar um JAR

Isso parece com o que você está procurando.

Uma coisa a notar se você está indo para ir com FastCGI é java não é como outras linguagens de script, há um tempo de arranque para iniciar a JVM ao contrário de dizer ruby ​​ou python. E é uma operação pesada para iniciar a JVM para cada solicitação.

Se eu entendi que você pergunta corretamente, você está procurando uma maneira java nativa para criar aplicativos. Se for o caso, o compojure faz exatamente isso e cria um servlet para você nos bastidores. Assim, no final, você pode criar um aplicativo da web clojure como os do java e implementá-lo em qualquer servidor de aplicativos.

Bem, você pode usar corretamente FastCGI diretamente do clojure. O FastCGI é um protocolo bastante simples, portanto, não deve ser tão difícil escrever um servidor no clojure (duvido que exista uma biblioteca para fazer isso para o clojure, mas pode haver um para o Java).