在Web应用程序中,我想创build一个位于WEB-INF目录下的“虚拟目录”。 实际上,我试图完成的效果与在文件系统中创build软链接的效果相同,如果应用程序运行爆炸。 我试图在两个(最重要的)weblogic,以及(在一个理想的世界)docker完成这个。
我知道虚拟目录configuration,但是这些不符合我的目的,因为我不希望通过URL直接提供内容(因此它为什么住在WEB-INF中)。 我没有发现configuration文件中的jetty或weblogic,似乎提供了类似的资源parsing概念(我曾尝试添加“extraClassPath”到docker,但这是不成功的)。 作为进一步的背景,应用程序使用Spring MVC,视图parsing器指向WEB-INF下的JSP
<bean id="myResolverBean" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:viewClass="org.springframework.web.servlet.view.JstlView" p:prefix="/WEB-INF/foo/baz/" p:suffix=".jsp" />
在看完Spring代码后,我深信,它在资源加载方面没有做任何事情,它是parsingpath的容器(weblogic / jetty)。 我也试过使用文件的URI,但似乎容器将始终解释相对于上下文根的path(即没有绝对path)。
所以我的问题是,是否有可能添加任何types的configuration指令到web.xml,服务器configuration,或弹簧configuration来完成这个?
毫不奇怪,在weblogic中这个问题的答案是虚拟目录。 该指令提供了两种(我认为是)将URL映射到一些(通常是静态文件)服务的标准行为,而且当path在WEB-INF下时也充当“虚拟软链接”如果您通过浏览器向这样一个URL发送请求(我想我第一次尝试这个时错误地configuration了某些东西),仍然会提供给出404所需的行为。 所以下面会产生所需的行为:
<virtual-directory-mapping> <local-path>/absolute/path/outside/of/webapp</local-path> <url-pattern>/WEB-INF/foo/*</url-pattern> </virtual-directory-mapping>
在Jetty中我也发现了一个类似的function。 这是通过在configuration中指定多个“基础资源”来完成的。 有一些docker文件提供了解释和一些例子。 一个特点(我可以看到这是有益的和有害的,取决于具体情况)是结构合并,所以你可以有碰撞的path,他们将按规范的顺序解决。 以上docker的例子:
<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>
这两个方面的一个捕获是目录结构必须在外部目录中重新创build(即它必须是/绝对/path/外/的/ Web应用程序/ WEB-INF /富)正常工作,据我可以告诉那里没有办法将一个目录映射到另一个任意指定的目录。