Как именно вы развернули свое приложение?
ServletContext().getRealPath("/")
может возвращать ноль, если он не развернут как взорванный. Прочитайте ссылку ниже для получения дополнительной информации. Однако способ настройки этого может не совпадать с вашим контейнером сервлета.
http://ananthkannan.blogspot.com/2009/12/servletcontextgetrealpath-returns-null.html
Обновление
Может кто-нибудь сказать мне, в чем разница в развертывании WAR как
взорвалось?
Когда вы развертываете файл войны в разобранном виде, контейнер сервлетов, например, Tomcat извлекает содержимое файла war во временную папку и запускает все из этой папки, так что {WEB_ROOT]/_images/avatars/[myid].jpg
фактически существует в файловой системе (жестком диске). Следовательно, вы можете получить реальный путь (как уже сказано в названии метода). Однако, если ваш контейнер сервлетов не извлекает файл war, папка, которую вы ищете, находится внутри файла war, и к ней нет реального пути, поэтому он вернет null
.
Что-то не рекомендуется делать на производственном сервере?
Преимущества / недостатки?
Вы не должны хранить динамическое содержимое в исходной папке или в папке webroot (webapp), поскольку контейнер сервлета будет использовать его временно и удалять или переходить в новую папку при повторном развертывании веб-приложения. Вероятно, вы потеряете динамические данные, которые вы поместили в эти папки. Корневая веб-папка обычно предназначена для хранения статического содержимого, то есть содержимого, которое вы не хотите изменять, например графических изображений для вашего веб-компонента, таких как фоновые изображения, CSS и т. Д.
Обычный метод хранения пользовательских данных - каким-то образом создать папку в пользовательском пространстве и поместить туда ваши динамические данные. Однако вы не сможете обслуживать содержимое папки за пределами webroot. Вам нужно будет написать свой собственный статический сервлет для передачи данных по запросу. Это довольно сложно для новичка.
Самый простой способ реализации собственного статического сервлета для обслуживания динамического содержимого - это расширение статического сервлета вашего контейнера сервлета. Однако ваш код будет сильно зависеть от контейнера сервлета, в который вы развертываете.
Поскольку вы собираетесь предоставить REST-интерфейс для изменения размера изображений, вы можете создать контроллер, который будет считывать исходные изображения из папки динамического содержимого, выполнять изменение размера, сохранять его как временный файл или очищать содержимое HttpResponse
.