Я использую структуру 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 на другой должна работать.