Сопоставить внешний каталог с web.xml - PullRequest
2 голосов
/ 08 марта 2010

Существует ли простой способ сопоставить каталог в файлах web.xml или других дескрипторов развертывания (jetty.xml и т. Д.)?

Например, если у меня есть каталог / opt / files /, есть ли способ получить доступ к его файлам и подкаталогам, посетив http://localhost/some-mapping/? Мне кажется, что должен быть какой-то простой способ сделать это, но я не смог выяснить, как (через Google, StackOverflow и т. д.). Все, что я нашел, это сервлеты, которые имитируют файловые серверы, а это не то, что мне хотелось бы.

Для справки я использую причал на коробке AIX.

Ответы [ 3 ]

5 голосов
/ 09 марта 2010

Не знаю, как это сделать с Jetty, но в Tomcat вы можете просто добавить новый <Context> к server.xml:

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

Таким образом, он доступен для http://example.com/files/.... Посмотрите, существует ли что-то подобное для Jetty.

Обновление : после поиска в Google эквивалент "нормального кода 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 голос
/ 09 марта 2010

После некоторого повторения лучший способ сделать это (для пристани) - развернуть дескриптор в каталоге контекста, который выглядит следующим образом ...

<?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>

Я надеюсь, что это поможет кому-то еще!

0 голосов
/ 08 марта 2010

Я не знаю, что вы можете сделать это как отображение URL, однако файлы и папки в том же каталоге, в котором находится ваш файл web.xml, будут доступны, как вы описываете, хотя вы не можете контролировать отображение в вашем веб-приложении.

Это соответствует вашим потребностям?

...