Ответ 1
Я нашел решение на Launchpad. /var/lib/tomcat6/webapps/
доступен для записи. Это означает, что следующие работы:
File myFile = new File("webapps/myfile.txt");
Развернуто мое веб-приложение Java (myapp.war
), поместив его в webapps
directcotry на Tomcat на Ubuntu 10.04.
Это приложение должно сохранять некоторые данные в файлах. Но пользователь, работающий с Tomcat (tomcat6
), не имеет права на запись в домашний каталог /usr/share/tomcat6/
и не имеет права на запись в текущий рабочий код /var/lib/tomcat6/
, поскольку оба принадлежат root
.
Итак, где веб-приложение должно хранить свои данные? Надеюсь, это не извлеченный архив в директории webapps. Это можно удалить очень легко случайно. И Tomcat можно настроить, а не извлекать .war файлы. Тогда не было бы извлеченного руководства.
Возможно, /var/lib/tomcat6/
должен принадлежать пользователю tomcat6
ant, это ошибка в Ubuntu?
Я нашел решение на Launchpad. /var/lib/tomcat6/webapps/
доступен для записи. Это означает, что следующие работы:
File myFile = new File("webapps/myfile.txt");
Если файлы не должны сохраняться дольше, чем жизненный цикл контекста сервлета, контейнер сервлета предоставляет приватную временную директорию для каждого контекста сервлета, указанного атрибутом javax.servlet.context.tempdir
.
См. Спецификация сервлета 2.3, Глава 3 Контекст сервлета
3.7.1 Временная работа Справочники
Удобство временного каталог хранения необходим для каждого контекст сервлета. Контейнеры сервлетов должен предоставлять частное временное каталог в контексте сервлета и сделать его доступным через javax.servlet.context.tempdircontext атрибут. Объект, связанный с атрибут должен быть Тип java.io.File
Я думаю, это зависит от того, с какими данными вы имеете дело. В большинстве случаев данные поступают в базу данных просто потому, что быстро и легко выполнять CRUD. Если вы хотите сохранить локализованную конфигурацию пользователя, и вам все равно, насколько она переносима, возможно, вы можете хранить ее под user.home, я сделал что для одного из моих проектов и работает отлично. Все, что было сказано, я действительно не думаю, что в этом есть какая-то лучшая практика, и база данных кажется самым очевидным выбором, потому что вы можете делать с ней много разных задач, и большинство из них можно начать с самого начала.:)
Отвечая на свой вопрос, Витек заявил /var/lib/tomcat6/webapps/ is writable
- по крайней мере, о его установке своей версии Ubuntu. В моей системе RHEL 5.2 /var/lib/tomcat<X>
даже не существует, поэтому нет подкаталога webapps, доступного для записи, или нет, что приводит к моему ответу.
Q: Где веб-приложение Java хранит свои данные?
A:. Там, где вы настроили его для хранения своих данных.
Сделать конфигурацию местоположения в web.xml как <context-param>
или в файле myApplication.properties.
Я не видел никаких конкретных указаний относительно того, где вы должны хранить такие данные локально - вероятно, потому, что вы обычно храните такие данные в базе данных.
Когда мне нужно хранить быстрые и грязные данные, я храню их в файловой системе специально для этих данных, чтобы изолировать ее от других областей, где она может попасть в другую деятельность. До сих пор не было никаких проблем с этим подходом. Кроме того, если это важно, убедитесь, что вы храните его где-то там, где вы его поддерживаете:)