java - Aplicación web Clojure-¿por dónde empiezo?
web-applications (5)
Bueno, puedes usar correctamente FastCGI directamente desde clojure. FastCGI es un protocolo bastante simple, por lo que no debería ser tan difícil escribir un servidor en clojure (dudo que haya una biblioteca para hacerlo, pero podría haber una para Java).
Así que últimamente he estado buscando en Clojure, y me encanta el idioma. Me gustaría ver si puedo crear una pequeña aplicación web, solo para desafiarme a mí mismo. Sin embargo, no tengo ninguna experiencia en la configuración de aplicaciones web relacionadas con Java. De hecho, no tengo mucha experiencia con Java en absoluto. ¿Dónde empiezo? Tengo mucha experiencia con Apache y la pila LAMP, y sé que en Apache usaría Fast-CGI en la mayoría de los casos, pero no sé el equivalente en el mundo de Java (si existe).
Básicamente, solo necesito ayuda para configurar el servidor y comenzar a utilizarlo. Entiendo (algo) cómo implementar una aplicación Java pura, pero ¿qué pasa con una aplicación Clojure pura? ¿Cómo funciona? Supongo que, proveniente de un mundo en el que todas las aplicaciones web están escritas en lenguajes de scripting, todo esto es nuevo para mí.
Ah, y por cierto, no quiero usar un marco de trabajo de Clojure como Compojure. Eso derrotaría la parte de aprendizaje de esto.
Gracias por adelantado.
Si no desea utilizar Compojure u otros, entonces deberá cargar el servidor web y llamar a su JAR, o escribir un servidor web usando sockets. En ese sentido, puede seguir cualquiera de las muchas guides en la web para la configuración y compilar un JAR
This parece lo que buscas.
Una cosa a tener en cuenta si va a utilizar FastCGI es que java no es como otros lenguajes de scripting, hay un tiempo de inicio para iniciar JVM a diferencia de, por ejemplo, ruby o python. Y es una operación pesada iniciar JVM para cada solicitud.
Si entiendo que usted pregunta correctamente, está buscando una forma java nativa para crear aplicaciones. Si compojure hace exactamente eso, crea un servlet para usted entre bambalinas, por lo que al final puede crear una aplicación web de clojure como las de Java y desplegarla en cualquier servidor de aplicaciones.
Una forma realmente sencilla de comenzar es hacer un servlet que se ejecute en Tomcat o similar, por ejemplo:
(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))
luego crea un web.xml en tu carpeta 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>
compile y empaque esto en una guerra, y se comportará como un servlet Java normal. Para implementarlo en Tomcat, simplemente suelte la guerra en la carpeta webapps e inicie Tomcat.
Un ejemplo detallado está disponible aquí http://github.com/yogthos/clojure-maven-examples
Te recomendaría que comiences por aprender la API de Servlet, que respalda todo lo relacionado con las solicitudes y respuestas HTTP en el mundo Java. HttpServletRequest
y HttpServletResponse
cubren mucho terreno aquí. Jetty es una buena opción aquí; hay una buena introducción sobre Clojure y Jetty en http://robert.zubek.net/blog/2008/04/26/clojure-web-server/ (usando Jetty 6).
Dicho esto, el modelo básico de Compojure también es bastante bajo: simplemente envuelve las solicitudes y respuestas en Clojure-datastructures, pero usted sigue siendo responsable de todas las rutas, generando los códigos de respuesta correctos. generar un ETag
, etc., que a veces es más material de bajo nivel que con una pila LAMP.