Настройка Symlinks для одного каталога в Tomcat

У меня есть каталог, в который процесс загружает несколько файлов .pdf. Этот процесс не поддается контролю.

Мне нужно сделать эти файлы доступными через веб-сайт с помощью Tomcat.

У меня есть каталог /var/lib/tomcat5/webapps/test1, доступный в Интернете, и я могу видеть файлы в нем с помощью браузера.

Итак, я создал символическую ссылку, указывающую на каталог с файлами .pdf: /var/lib/tomcat5/webapps/test1/files/, но я не вижу ничего в этом каталоге.

Как включить символические ссылки в каталоге test1? Я не хочу включать символические ссылки везде, так что каталог с файлами .pdf доступен в Интернете.

Ответ 1

Есть несколько проблем с решением создания META-INF/context.xml, содержащего <Context path="/myapp" allowLinking="true">

Самая большая проблема заключается в том, что если существует conf/context.xml, allowLinking в <Context> используется приоритет над a <Context> в META-INF/context.xml. И если в conf/context.xml явно не определено allowLinking, это то же самое, что сказать allowLinking="false". (см. мой ответ на вопрос о приоритете контекста)

Чтобы убедиться, что ваше приложение позволяет связывать, вы должны сказать <Context override="true" allowLinking="true" ...>.

Другая проблема заключается в том, что path="/myapp" игнорируется в META-INF/context.xml. Чтобы предотвратить путаницу, лучше оставить его. Единственное время path в <Context> имеет какой-либо эффект в server.xml, а официальные рекомендации Tomcat рекомендуют против размещения <Context> в server.xml.

Наконец, вместо файла myapp/META-INF/context.xml я рекомендую использовать файл conf/Catalina/localhost/myapp.xml. Этот метод означает, что вы можете сохранить содержимое своего META-INF чистым, что является мужеством вашего webapp - я не люблю рисковать в мучениях моего webapp.: -)

Ответ 3

Да, я знаю, это старый вопрос, но я нашел новое решение, используя mount с опцией -bind вместо символической ссылки, а tomcat не нуждается в переконфигурации:

cd/var/lib/tomcat5/webapps/test1/

Файлы mkdir

mount --bind/path/to/actual/upload/directory/files files

Ответ 4

Я сделал это по-другому. Я редактирую этот другой файл конфигурации: apache-tomcat-7.0.33/conf/ server.xml В теге Host я добавил:

<Context path="/data" docBase="C:\datos" debug="0" reloadable="true" crossContext="false"/>

Итак, вы можете получить доступ через: http://localhost/data

Ответ 5

Есть 4 места, где Context может жить.

  • tomcatdir/конф/server.xml
  • tomcatdir/CONF/context.xml
  • tomcatdir/конф/Каталина/локальный/appname.xml
  • tomcatdir/WebApps/имя_приложения/META-INF/context.xml

В случае использования атрибута allowlinking tomcat 8 следует указывать не в Контексте, а в теге Resources. Мой tomcatdir/conf/context.xml выглядит следующим образом

<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
 <Resources allowLinking="true" cachingAllowed="true" cacheMaxSize="100000" />
</Context>

Теперь это решение отлично подходит для меня. Но я хочу поделиться и ошибкой, которую я сделал, прежде чем приступать к этому решению.

Я определил ресурсы как в tomcatdir/conf/server.xml, так и в tomcatdir/conf/context.xml. И allowLinking = "true" был установлен только в tomcatdir/conf/server.xml.

Я обнаружил, что если вы не укажете allowLinking, это будет равно установке его в false. Поэтому я удалил тег ресурсов из server.xml и оставил в нем только tomcatdir/conf/context.xml с атрибутом allowLinking = "true".