где Tomcat хранит мои файлы? - PullRequest
6 голосов
/ 04 марта 2012

Я создал веб-приложение, используя Netbeans. Раньше, когда я запускал веб-приложение через netbeans и сервер Tomcat (который был zip), все мои внешние файлы (загруженные файлы и другие вспомогательные файлы, которые я использую для своего приложения) сохранялись в каталоге bin.

Теперь я попытался установить службу Apache Tomcat с помощью установщика Windows, потому что я хотел знать, как развернуть проект на выделенном сервере. Я успешно развернул файл войны с помощью утилиты развертывания Tomcat. Однако, когда я запускаю проект через службу windows apache tomcat, он не сохраняет файлы в bin dir и не может прочитать мои файлы, которые я также вставил в bin dir.

Как вы думаете, где мне разместить свои файлы?

РЕДАКТИРОВАТЬ: После просмотра каталога службы tomcat, я обнаружил, что это хранилище в корне. Если мой tomcat установлен в 'E: \ Apache \ services \ tomcat \', он сохраняется в каталоге 'tomcat'.

Ответы [ 2 ]

6 голосов
/ 04 марта 2012

В конечном счете, именно то, что делает ваше приложение, определяет, где хранятся файлы.

Судя по звукам, ваше приложение хранит файлы в текущем каталоге JVM, который является каталогом "bin" при запуске веб-сервера через NetBeans. Если это так, вы найдете их в любом текущем каталоге, когда Tomcat запускается как служба Windows.

Честно говоря, я думаю, вы ошиблись. Вы должны принять осознанное решение о том, что загруженные файлы должны быть сохранены, а затем убедиться, что используемый вами механизм загрузки помещает их туда.

Очевидно, что помещать их в текущий каталог - плохая идея. Вы не хотите, чтобы они хранились в разных местах в зависимости от того, как запускается веб-контейнер И, очевидно, каталог "bin" - неподходящее место. (Что произойдет, если пользователь попытается загрузить файл, имя которого совпадает с одним из сценариев, находящихся в «bin»?)


Так где должен вы будете помещать файлы?

На мой взгляд, у вас есть три варианта:

  • В подкаталоге каталога work ... в который Tomcat обычно помещает временные файлы, такие как скомпилированные JSP.

  • В пользовательском подкаталоге установочного каталога Tomcat.

  • В отдельном каталоге где-то еще в файловой системе.

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

Вы не должны сбрасывать их в каталоги bin, logs, lib или config из-за риска вмешательства ... и потому, что они просто не логичны.


Если вы хотите записать файлы относительно корня установочного каталога tomcat, вы можете узнать, что это, позвонив по номеру System.getProperty("catalina.base").

Но что бы вы ни делали, вам нужно убедиться, что пользователь не может случайно или намеренно загрузить файлы в неправильное место; например, указав абсолютный путь или путь, который использует «.. / .. / ....» для выхода из области загрузки.

3 голосов
/ 04 марта 2012

Когда вы устанавливаете Apache, проект должен находиться внутри папки webapp:

C:\Apache\tomcat\webapps

Как мой проект gaganisonline, так что структура каталогов выглядит примерно так:

Путь: C:\Apache\tomcat\webapps\gaganisonline

                            gaganisonline
                            |           |
                         WEB-INF      index.html
                            |
              ---------------------------
              |         |      |        |
            web.xml    src    lib    classes
...