2010-11-26 5 views
3

Я работаю над приложением, которое должно загрузить некоторые внешние ресурсы и сделать их доступными через общедоступный/статический каталог в кольце.Как определить правильный путь к файловой системе

Но .. У меня проблема с сохранением ресурсов в статическом каталоге в моем приложении, при разработке я использую адаптер кольцевой струи, на производственных серверах test & работает tomcat.

Я добавил: веб-контента «общественности» к моему Leiningen проекта и добавил «общественность» каталог в корневом каталоге проекта, то у меня есть функция загрузки с помощью HTTP-агента и утка-потоки:

 
(defn download 
    [file-name url] 
    (h/http-agent url 
       :handler (fn [agnt] 
          (let [fname file-name] 
          (with-open [w (d/writer fname)] 
           (d/copy (h/stream agnt) w)))))) 

Если я загружаю причал из реплики и использую путь сохранения: «public/my.file», загруженный файл правильно помещается в «общедоступный» каталог. Но когда я развертываю его с помощью военного файла tomcat, он ищет «общедоступный» каталог в корневом каталоге tomcat, а не в контексте контекста приложения.

Я попытался добавить оболочку промежуточного программного обеспечения, чтобы определить путь к контексту, и оттуда построить правильный путь сохранения, но я не могу найти способ доступа к HttpServlet или способ определить, работает ли приложение в адаптере или если он развертывается в определенном контексте.

Здесь обертке:

 

(defn wrap-context-info [handler] 
    (fn [req] 
    (let [resp (handler req)] 
     (assoc resp :servlet (:servlet req) :req (:servlet-request req))))) 

как: сервлет и: REQ равны нулю.

ответ

1

Глядя на ring-servlet source, оказывается, что переходное кольцо сервлет связывает HttpServlet, HttpServletRequest и HttpServletResponse объекты с кольцевой картой запроса под :servlet, :servlet-request и :servlet-response ключей, соответственно.

Он также добавляет запись :servlet-context на карту запроса со значением (.getServletContext servlet) для удобства.

Внутри вашего обработчика вы можете проверить наличие этих ключей на карте запроса, а затем извлечь дополнительную информацию, которая вам нужна из связанных объектов.

+0

ну это то, что я пытаюсь сделать: – drankard 2010-12-01 10:22:05

Смежные вопросы