将外部目录映射到web.xml

时间:2010-03-08 20:32:46

标签: web-services mapping external web.xml

是否有一种简单的方法来映射web.xml或其他部署描述符(jetty.xml等)文件中的目录?

例如,如果我有一个目录/ opt / files /,我可以通过访问http://localhost/some-mapping/来访问其文件和子目录吗?我觉得应该有一些简单的方法可以做到这一点,但我无法找到(通过谷歌,stackoverflow等)。我发现的只是模仿文件服务器的servlet,这不是我想要的。

作为参考,我在AIX盒子上使用jetty。

3 个答案:

答案 0 :(得分:5)

不知道如何使用Jetty,但在Tomcat中,您只需向<Context>添加新的server.xml

<Context docBase="/opt/files" path="/files" />

这种方式可以通过http://example.com/files/...访问。看看Jetty是否存在类似的东西。

更新:在谷歌搜索之后,“正常的Java代码”等效于:

WebAppContext files = new WebAppContext("/opt/files", "/files");
Server server  = new Server(8080);
server.setHandler(files);
server.start(); 

现在尚未将其转化为jetty.xml味道。我有点猜测基于网络上的文档和示例,所以不要把我钉在上面:

<Configure class="org.mortbay.jetty.webapp.WebAppContext">
    <Set name="webApp">/opt/files</Set>
    <Set name="contextPath">/files</Set>
</Configure>

另一种可能性是:

<Configure class="org.mortbay.jetty.Server">
    <Call name="addHandler">
        <Arg>
            <New class="org.mortbay.jetty.webapp.WebAppContext">
                <Arg name="webApp">/opt/files</Arg>
                <Arg name="contextPath">/files</Arg>
            </New>
        </Arg>
    </Call>
</Configure>

答案 1 :(得分:1)

经过一些更多的摆弄之后,最好的方法(对于jetty)是在上下文目录中部署一个类似于以下内容的描述符...

<?xml version="1.0"  encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">

<!-- Configuration of a custom context. -->
<Configure class="org.eclipse.jetty.server.handler.ContextHandler">
    <Call class="org.eclipse.jetty.util.log.Log" name="debug">
        <!-- The default message to show if our context breaks. -->
        <Arg>Configure context.xml</Arg>
    </Call>
    <!--
        The context path is the web location of the context in relation to the
        server address.
    -->
    <Set name="contextPath">/context</Set>
    <!--
        The resource base is the server directory to use for fetching files.
    -->
    <Set name="resourceBase">/path/to/files/on/server</Set>
    <Set name="handler">
        <New class="org.eclipse.jetty.server.handler.ResourceHandler">
            <Set name="directoriesListed">true</Set>
            <!-- For now we don't need any welcome files -->
            <!--
                <Set name="welcomeFiles"> <Array type="String">
                <Item>index.html</Item> </Array> </Set>
            -->
            <!--
                The cache time limit in seconds (ie max-age=3600 means that if the
                document is older than 1 hour a fresh copy will be fetched).
            -->
            <Set name="cacheControl">max-age=3600,public</Set>
        </New>
    </Set>
</Configure>

我希望这有助于其他人!

答案 2 :(得分:0)

我不知道您可以将其作为URL映射,但是您的web.xml文件所在的同一目录中的文件和文件夹将以您描述的方式访问,但您无法控制在您的网络应用下进行映射。

这是否符合您的需求?