我正在使用 ExtJS 框架,它包含大量用于所有应用程序的js
文件css
。我打算在多个 Web 应用程序(不同的war
文件)之间共享这些文件。
出于这个原因,我想直接从 Web 服务器提供 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
对于层次结构更深的文件,将返回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