Назад | Перейти на главную страницу

Tomcat напрямую обслуживает статические (css, js) файлы, совместно используемые несколькими приложениями

Я использую структуру ExtJS, в которой много js и css файлы, которые используются для всех приложений. Я собираюсь поделиться ими между несколькими веб-приложениями (разными war файлы).

По этой причине я хотел бы обслуживать ExtJS. js и css прямо с веб-сервера, в моем случае Tomcat6, который можно использовать для обслуживания статических файлов, как в эта полезная ссылка.

Поэтому я помещаю свои файлы в /var/lib/tomcat6/webapps/ROOT/extjs/. Статические файлы, которые находятся непосредственно в этом каталоге, обслуживаются правильно, например /extjs/ext.js правильно обслуживает файл в /var/lib/tomcat6/webapps/ROOT/extjs/ext.js.

Однако файлы в каталогах нижнего уровня, например /extjs/welcome/css/welcome.css, который должен обслуживать файл по адресу /var/lib/tomcat6/webapps/ROOT/extjs/welcome/css/welcome.css, вернуть 404.

TL / DR

Tomcat обслуживает статические файлы только в каталоге верхнего уровня. А 404 возвращается для файлов глубже в иерархии.

Содержимое файла конфигурации:

ИСПРАВЛЕНО - РЕШЕНИЕ:

Проблема заключалась в том, что я размещал предложение:

<Context docBase="/path/to/extjs-static-files" path="/extjs"/>

в Tomcat server.xml <Engine> пункт. Как только я поместил его в <Host> тег начал работать. Чтение этот документ очень помог в определении того, что я делаю неправильно.

Я запускаю веб-службу RESTful, которая обслуживает некоторый статический контент, хранящийся в каталоге вне Tomcat. Каталог задается параметром сервлета в web.xml. Вы можете сделать что-то подобное и просто указать абсолютный путь к нужным файлам - поместите их в Tomcat где-нибудь или в любом другом месте. Я могу опубликовать пример кода, если хотите. Конечно, все другие файлы, которые ссылаются на javascript и CSS, должны быть изменены, потому что эти файлы будут находиться в другом каталоге URL, чем веб-приложения, которые их используют. Например, src = "restAppContextName / serve / youJavaScript.js", где serve - это @Path для веб-службы REST, а все, что следует за этим, - это @PathParam. Для браузера / serve будет рассматриваться как каталог, поэтому относительная ссылка из одного файла js на другой должна работать.