clojure / lein / ring: у меня есть два обработчика кольца, которые делают разные вещи, как мне обернуть это в сервлет? - PullRequest
2 голосов
/ 03 апреля 2012

У меня есть проект clojure / ring, в котором два разных приложения / обработчика работают на разных портах (один для API и один для веб-интерфейса). У них много общего кода, но у каждого есть свое пространство имен, в котором он выполняет всю работу, связанную с этим интерфейсом. Теперь я хочу развернуть его как сервлет, работающий в tomcat или что-то подобное (на самом деле он должен работать в любом контейнере сервлета). У меня возникли проблемы, потому что кажется, что lein-ring предполагает, что в сервлете будет только один обработчик. Например, в моем project.clj у меня есть эта строка:

:ring {:handler caribou.api/app
       :servlet-name "caribou"
       :init caribou.api/init}

Это отлично подходит для API, но как насчет внешнего интерфейса? Нужно ли мне сделать еще один проект, включающий этот, чтобы он мог иметь свой собственный обработчик и сервлет? Всегда ли сервлет работает на одном порту?

Есть две вещи, в которых я не уверен в принципе: я не из java, поэтому я не уверен, что происходит с подходом сервлета и какие у него ограничения, и мне неясно, как именно Clojure переводит в парадигму сервлета достаточно, чтобы структурировать этот проект в общем виде.

Любая помощь приветствуется, спасибо!

1 Ответ

1 голос
/ 03 апреля 2012

Все сервлеты в одном и том же контейнере обслуживаются с одного и того же сервера и, следовательно, с одного и того же порта.Обычно вы идентифицируете разные сервлеты, назначая им разные префиксы URI, такие как /servlet1 или /my/servlet.

Я не знаю, есть ли что-то, что мешает вам создавать отдельные сервлеты с помощью Ring, но в целом не очень хорошая идея, если все ваше приложение основано на Clojure.Как минимум, как вы указали, плагин lein-ring обеспечивает использование только одного сервлета для веб-приложения.

Одна вещь, которую вы можете сделать, - это создать родительский обработчик, который делегирует либо приложениюили обработчики API на основе URI.Это, по сути, дает вам управление без необходимости делегировать логику сервлету API.

...