Настроить символические ссылки для одного каталога в Tomcat

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

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

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

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

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

7 ответов

Решение

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

Самая большая проблема заключается в том, что если conf/context.xml существует, allowLinking в <Context> имеет приоритет над <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 чистый, который является кишечником вашего веб-приложения - я не люблю рисковать, заглядывая в кишки моего веб-приложения.:-)

Создайте файл context.xml в META-INF каталог в вашем веб-приложении, содержащий:

<?xml version="1.0" encoding="UTF-8"?>

<Context path="/myapp" allowLinking="true">

</Context>

больше здесь: http://www.isocra.com/2008/01/following-symbolic-links-in-tomcat/

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

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

MKDIR файлы

монтировать --bind / путь / к / текущему / загрузить / каталог / файлы файлов

Это работает по-другому в Tomcat 8+

http://tomcat.apache.org/migration-8.html

<Resources allowLinking="true" />

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

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

В случае tomcat 8 атрибут allowlinking должен быть указан не в Context, а в теге 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. Поэтому я удалил тег Resources из server.xml и оставил только tomcatdir / conf / context.xml с атрибутом allowLinking="true".

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

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

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

Добавление следующей строки в conf/context.xml позволяет мне использовать программные ссылки на apache tomcat 8.5+

< Resources allowLinking = "true" cachingAllowed = "true" cacheMaxSize = "100000">

Другие вопросы по тегам