Подтвердить что ты не робот

Clojure веб-приложение - с чего начать?

Так что в последнее время я смотрел в Clojure, и мне нравится этот язык. Я хотел бы посмотреть, могу ли я сделать небольшое веб-приложение в нем, просто чтобы бросить вызов самому себе. Однако у меня нет абсолютно никакого опыта в настройке любых веб-приложений, связанных с Java. На самом деле, у меня действительно нет большого опыта работы с Java. С чего начать? У меня большой опыт работы с Apache и стекю LAMP, и я знаю, что в Apache я бы просто использовал Fast-CGI в большинстве случаев, но я не знаю эквивалента в мире Java (если есть).

В принципе, мне просто нужна помощь в настройке сервера и его запуске. Я понимаю (несколько), как развернуть чистую Java-приложение, но как насчет чистого приложения Clojure? Как это работает? Я предполагаю, что из мира, где все веб-приложения написаны на языках сценариев, это для меня все ново.

О, и, кстати, я не хочу использовать Clojure framework, например Compojure. Это победит учебную часть этого.

Спасибо заранее.

4b9b3361

Ответ 1

Я бы посоветовал вам начать с изучения Servlet-API, который поддерживает все, что связано с HTTP-запросами и ответами в мире Java. HttpServletRequest и HttpServletResponse покрывают много земли здесь. Причал - отличный выбор здесь; есть хорошее представление о Clojure и Jetty в http://robert.zubek.net/blog/2008/04/26/clojure-web-server/ (используя Jetty 6).

При этом базовая модель Compojure также довольно низкоуровневая: она просто переносит запросы и ответы в Clojure -datastructures, но вы по-прежнему несете ответственность за всю маршрутизацию, генерируя правильные коды ответов. генерируя ETag и т.д., что иногда является более низкоуровневым, чем с LAMP-стеком.

Ответ 2

На самом деле простой способ начать делать сервлет, который работает на Tomcat или аналогичный, например:

(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.xml в папке 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>

скомпилируйте и упакуйте это в войну, и он будет вести себя как обычный Java-сервлет. Чтобы развернуть на Tomcat, просто оставьте войну в папке webapps и запустите tomcat.

Подробный пример доступен здесь http://github.com/yogthos/clojure-maven-examples

Ответ 3

Если вы не хотите использовать Compojure или другие, вам нужно либо загрузить веб-сервер, либо вызвать JAR, либо написать веб-сервер, используя сокеты. В этом смысле вы можете следить за любым из многочисленных руководств в Интернете для настройки и скомпилировать JAR

Это выглядит так, как вы.

Ответ 4

Одна вещь, которую следует отметить, если вы собираетесь использовать FastCGI, - это не то, что java не похож на другие языки сценариев, есть время запуска для запуска JVM, в отличие от рубинов или питонов. И тяжелая операция запуска JVM для каждого запроса.

Если я правильно понимаю ваш вопрос, вы ищете собственный способ Java для создания приложений. Если так compojure делает именно то, что он создает сервлет для вас за кулисами, поэтому в конце вы можете создать веб-приложение clojure, как и в Java, и развернуть его на любом сервере приложений.

Ответ 5

Хорошо, вы можете правильно использовать FastCGI непосредственно из clojure. FastCGI - довольно простой протокол, поэтому не должно быть так сложно писать сервер в clojure самостоятельно (я сомневаюсь, что есть библиотека для этого для clojure, но для Java это может быть одно).