<virtual-directory-mapping>
<local-path>/absolute/path/outside/of/webapp</local-path>
<url-pattern>/WEB-INF/foo/*</url-pattern>
</virtual-directory-mapping>
Eu também descobri uma funcionalidade semelhante no Jetty. Isso é realizado especificando vários "recursos base" na configuração. Há alguma documentação do jetty que fornece uma explicação e alguns exemplos. Uma característica (eu posso ver isso sendo útil e prejudicial, dependendo da situação) é que as estruturas são mescladas para que você possa ter caminhos que colidem e eles serão resolvidos na ordem de especificação. O exemplo acima para o jetty:
<Set name="baseResource">
<New class="org.mortbay.resource.ResourceCollection">
<Arg>
<Array type="java.lang.String">
<Item>/path/to/normal/webapp</Item>
<Item>/absolute/path/outside/of/webapp</Item>
</Array>
</Arg>
</New>
</Set>
Uma captura para ambos é que a estrutura de diretório deve ser recriada nos diretórios externos (isto é, deve ser / absolute / path / outside / of / webapp / WEB-INF / foo) para funcionar corretamente, até onde eu posso dizer que não há como mapear um diretório para outro diretório nomeado arbitrariamente.