Tomcat 直接提供多个应用程序共享的静态(css、js)文件

Tomcat 直接提供多个应用程序共享的静态(css、js)文件

我正在使用 ExtJS 框架,它包含大量用于所有应用程序的js文件css。我打算在多个 Web 应用程序(不同的war文件)之间共享这些文件。

出于这个原因,我想直接从 Web 服务器提供 ExtJS 服务,在我的例子中js,它可用于提供静态文件,如cssTomcat6这个有用的链接

因此我将文件放在 下/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对于层次结构更深的文件,将返回A。

配置文件内容

已修复 - 解决方案

问题是我正在放置以下条款:

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

在 Tomcat 的server.xml <Engine>子句中。一旦我将其放在<Host>标签中,它就开始工作了。阅读本文档对找出我做错的事情非常有帮助。

答案1

我正在运行一个 RESTful Web 服务,它提供一些存储在 Tomcat 之外的目录中的静态内容。该目录由 web.xml 中的 servlet 参数指定。您可以执行类似操作,只需指定所需文件的绝对路径 - 将它们放在 Tomcat 中的某个地方或您喜欢的任何地方。如果您愿意,我可以发布一些示例代码。当然,引用 javascript 和 CSS 的所有其他文件都需要更改,因为这些文件将位于与使用它们的 Web 应用程序不同的 URL 目录中。例如,src="restAppContextName/serve/youJavaScript.js",其中 serve 是 REST Web 服务的 @Path,后面的内容是 @PathParam。对于浏览器,/serve 将被视为目录,因此从一个 js 文件到另一个 js 文件的相对引用应该有效。

答案2

这是一个非常基本的设置,可以让您更好地理解什么是什么:

服务器.xml

<Context docBase="appname" path="/appname" reloadable="true" source="org.eclipse.jst.jee.server:appname"/>

文档库是应用程序根文件夹 (webapp)

网页文件

  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/res/*</url-pattern>
  </servlet-mapping>

水库只是 URI 区分符;如果您有另一个像 /* 一样指向更智能的 servlet,它将很有用。

默认servlet 从应用程序的根目录提供静态信息。基本上,如果文件 test.js 位于文件夹 js 中,则它对应于项目的:

src/main/webapp/js/test.js

现在可以通过以下 URL 访问:

http://本地主机:8080/应用程序名称/水库/js/测试.js

相关内容