2015-06-09 7 views
-1

нужно загрузить файл внутри директории в корне ВОЙНЫ с использованием Spring Это структура каталоговSpring загрузить файл

rootOfWar 
--static-dir 
---- my-file.css 
--WEB-INF 
---- classes 
..... 

Это нормальная WAR.

В Spring @RestController Мне нужно иметь возможность читать и писать в файл my-file.css. Каков наилучший способ получить файл, ServletContextResource или?

Подробнее
- расположение файла находится вне моего контроля, я не могу переместить файл.
- Контейнер jee - Tomcat.
- Текущая версия весны 4.1.6
- среда Spring не использует аннотации XML только с помощью WebApplicationInitializer, WebMvcConfigurerAdapter и класса конфигурации аннотации.

Есть ли другой способ сделать это, как указать файл в качестве ресурса в конфигурации так, чтобы он был загружен работой фрейма и доступен в приложении?

В основном у меня есть знание JEE, но мое знание Spring о лучших практиках, касающихся чтения/записи, отсутствует.

+2

Вы не можете писать в WAR-файл. (Ну, я имею в виду, что вы * можете *, но не так, как вам кажется.) –

+0

@DaveNewton Обычно я бы использовал путь к классам и написал это, что вы можете, но у меня нет опции в этом экземпляр, структура вне моего контроля. Если это можно сделать только с помощью ServletContextResource, то я думаю, что это ответ. Мне сказали, что Spring имеет другие возможности для чтения/записи в WAR, кроме использования ServletContext. Как бы вы это сделали так, как вы его описываете * может * быть сделано – Gurnard

+0

Сохраните его в базе данных, может быть? –

ответ

1

Если вам необходимо изменить файл, вы не должны быть частью WAR. Храните его где-нибудь за пределами веб-пакета и укажите его там. Все остальное приведет к проблемам, особенно при развертывании в Websphere, который часто запускается в ограниченной среде, где записи отклонены.

Но я считаю, что переписывание файлов в веб-пути плохой дизайн, потому что вы, вероятно, столкнетесь с проблемами кеширования. Лучше напишите сервлет, который генерирует необходимый CSS. Если вы сможете назвать контент, который должен перезаписать ваш файл css, вы также сможете визуализировать его динамически.

Нечто подобное может быть уже достаточно:

@RequestMapping(value = "/my.css", produces = "text/css;charset=UTF-8") 
public String showCss() { 
    return "<here goes your css>"; 
} 

(Это написано в моей памяти и не тестируется).

Хорошо, что вы можете изменить css в любое время и даже настроить кеширование информации по мере необходимости.

+0

привет, спасибо за ответ. Это управляемая среда мягкого устройства Tomcat. Для WebSphere вам необходимо добавить файл политики WAS, а затем вы можете контролировать, где вы хотите писать. Для кластеров WAS, использующих каталог конфигурации диспетчера развертывания, вы можете сделать так, чтобы все узлы были синхронизированы. Файл хранится в WAR, у меня нет контроля над этим.Приложение, которое управляет (записывает) в файл CSS, не совпадает с тем, которое его читает. – Gurnard

+0

@Gurnard Если бы я знал эти данные в тот момент, когда я написал свой ответ, ответ был бы другим :-) Когда ваш вопрос не содержит всех деталей, необходимых для поиска решения, соответствующего вашим требованиям, как мы можем дать ответы что подходит? Я полагаю, что нисходящая линия не ваша? – Marged

+0

Я обновил свой вопрос, чтобы быть более полным. Я старался избегать звучать как дискуссия и больше как прямой вопрос, поскольку я знаю, что это цель SO. Я согласен, что это плохой дизайн, но у меня нет власти. – Gurnard

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