1: Каковы ограничения при указании местоположений для сервлетов загрузки файлов
Он должен быть доступен для чтения и для записи,Это также должно быть существующее местоположение, контейнер сервлетов не создаст его для вас в случае отсутствия.
2: пути могут быть относительно пути приложения или онидолжно быть абсолютным?
Оба допускаются, если 1) подтверждено.Контейнер под крышками будет использовать java.io.File
для обозначения местоположения.Поэтому использование относительных путей определенно является плохой идеей.
3: впоследствии файлы должны быть загружаемыми, поэтому, в общем, это лучшее место на сервере для хранения файловэто (под деревом приложений, вне дерева, из дерева Tomcat и т. д.?)
Помещение в папку webapp приведет к их потере при каждом повторном развертывании webapp.Он также не будет работать на некоторых конфигурациях сервера, поскольку извлечение файла WAR является необязательным параметром конфигурации.Так что действительно лучше поместить их по фиксированному пути вне папки webapp.Чтобы загрузить их снова, просто добавьте новый <Context>
в Tomcat или создайте сервлет, который получает от него FileInputStream
и записывает в OutputStream
ответа.Примеры можно найти в этом ответе .
4: поскольку аннотация является очень «статичным» способом, позволяющим сервлету загружать файлы, может лито же самое можно указать в web.xml, например?
Да, вы можете просто полностью игнорировать атрибут location
аннотации и использовать Part#getInputStream()
, чтобы записать его в нужное место,Затем вы можете указать местоположение как <init-param>
сервлета и инициализировать его методом init()
.