Подтвердить что ты не робот

Где веб-приложение Java хранит свои данные?

Развернуто мое веб-приложение 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?

4b9b3361

Ответ 1

Я нашел решение на Launchpad. /var/lib/tomcat6/webapps/ доступен для записи. Это означает, что следующие работы:

File myFile = new File("webapps/myfile.txt");

Ответ 2

Если файлы не должны сохраняться дольше, чем жизненный цикл контекста сервлета, контейнер сервлета предоставляет приватную временную директорию для каждого контекста сервлета, указанного атрибутом javax.servlet.context.tempdir.

См. Спецификация сервлета 2.3, Глава 3 Контекст сервлета

3.7.1 Временная работа Справочники

Удобство временного каталог хранения необходим для каждого контекст сервлета. Контейнеры сервлетов должен предоставлять частное временное каталог в контексте сервлета и сделать его доступным через  javax.servlet.context.tempdircontext атрибут. Объект, связанный с атрибут должен быть Тип java.io.File

Ответ 3

Я думаю, это зависит от того, с какими данными вы имеете дело. В большинстве случаев данные поступают в базу данных просто потому, что быстро и легко выполнять CRUD. Если вы хотите сохранить локализованную конфигурацию пользователя, и вам все равно, насколько она переносима, возможно, вы можете хранить ее под user.home, я сделал что для одного из моих проектов и работает отлично. Все, что было сказано, я действительно не думаю, что в этом есть какая-то лучшая практика, и база данных кажется самым очевидным выбором, потому что вы можете делать с ней много разных задач, и большинство из них можно начать с самого начала.:)

Ответ 4

Отвечая на свой вопрос, Витек заявил /var/lib/tomcat6/webapps/ is writable - по крайней мере, о его установке своей версии Ubuntu. В моей системе RHEL 5.2 /var/lib/tomcat<X> даже не существует, поэтому нет подкаталога webapps, доступного для записи, или нет, что приводит к моему ответу.

Q: Где веб-приложение Java хранит свои данные?
A:. Там, где вы настроили его для хранения своих данных.

Сделать конфигурацию местоположения в web.xml как <context-param> или в файле myApplication.properties.

  • Я могу поместить его туда, где я хочу на моем ящике, SysAdmins может поместить его туда, где они хотят, в производственную систему.
  • Вы можете изменить свое мнение позже.
  • Вам не нужны символические ссылки (которые волшебным образом исчезли на мне раньше, нарушив систему.)
  • У вас может быть несколько наборов тестовых данных и просто укажите конфигурацию в зависимости от того, что вы хотите.
  • Вы можете разместить его там, где есть дисковое пространство.
  • Вы собираетесь изменить свое мнение позже.

Ответ 5

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

Когда мне нужно хранить быстрые и грязные данные, я храню их в файловой системе специально для этих данных, чтобы изолировать ее от других областей, где она может попасть в другую деятельность. До сих пор не было никаких проблем с этим подходом. Кроме того, если это важно, убедитесь, что вы храните его где-то там, где вы его поддерживаете:)