我如何让Tomcat在URL中没有/static/的情况下提供静态内容?

我如何让Tomcat在URL中没有/static/的情况下提供静态内容?,tomcat,Tomcat,我有一个Tomcat服务器,在那里我只想提供来自根应用程序的静态内容。标准是将foo.html这样的文件放入webapps/ROOT/static文件夹,然后使用http://myserver:8080/static/foo.html. 如何将其配置为从公共URL中删除/static/部分,但仍允许我将所有静态内容放在静态文件夹中 (我有很多文件中都有完整的路径引用,我不能轻易更改,比如带有src=“/js/somefile.js”)的JavaScript,所以我不想为了在开头添加/static

我有一个Tomcat服务器,在那里我只想提供来自根应用程序的静态内容。标准是将foo.html这样的文件放入
webapps/ROOT/static
文件夹,然后使用
http://myserver:8080/static/foo.html.

如何将其配置为从公共URL中删除
/static/
部分,但仍允许我将所有静态内容放在静态文件夹中

(我有很多文件中都有完整的路径引用,我不能轻易更改,比如带有
src=“/js/somefile.js”
)的JavaScript,所以我不想为了在开头添加/static而更新它们)


我希望服务器解释该
http://myserver:8080/foo.html
意味着在
webapps/ROOT/static
中找到它。但是我想要一个像
http://myserver:8080/myotherapp/bar.html
要继续使用
webapps/myotherapp/
解析,Tomcat有一个类似于Apache的
mod_rewrite
RewriteValve
。您可以将其用于两个方面:应用程序级别或虚拟主机级别

要将阀添加到
ROOT
应用程序,请将阀添加到
ROOT/META-INF/context.xml
文件:

<Context>
    <Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
</Context>
PS:调试重写规则可能会令人沮丧,因此:

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/].rewrite.level = FINE

在Tomcat的
日志中。属性可以提供帮助。

你有什么理由不想直接将静态文件放入
$CATALINA_BASE/webapps/ROOT
中吗?我确实这样做了,但我有点想有一个目录,我可以隔离并设置权限,这样我的UI程序员就可以只写这些文件了,用户不能删除非空目录,因此具有
webapps/ROOT/WEB-INF
写入权限但没有
webapps/ROOT/WEB-INF
写入权限的用户不能触摸
webapps/ROOT
<代码>http://myserver:8080/myotherapp/
仍将解析为
webapps/myotherapp/
,即使存在
/webapps/ROOT/myotherapp/
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/].rewrite.level = FINE