Jetty實戰之 嵌入式運行Jetty實現簡單文件服務器

jopen 12年前發布 | 1K 次閱讀 資源管理器 BI

對于嵌入式運行Jetty,可以通過簡單的一些代碼實現一個簡單的文件服務器的功能,如下:

package com.google.code.garbagecan.jettystudy.sample3;

import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.DefaultHandler; import org.eclipse.jetty.server.handler.HandlerList; import org.eclipse.jetty.server.handler.ResourceHandler;

public class FileServer { public static void main(String[] args) throws Exception { Server server = new Server(8080);

    ResourceHandler resourceHandler = new ResourceHandler();
    resourceHandler.setDirectoriesListed(true);
    resourceHandler.setResourceBase("E:/share");
    resourceHandler.setStylesheet("");

    HandlerList handlers = new HandlerList();
    handlers.setHandlers(new Handler[] { resourceHandler, new DefaultHandler() });
    server.setHandler(handlers);

    server.start();
    server.join();
}

}</pre>這里使用了Jetty自帶的ResourceHandler類來處理所有的請求,這個類指定了資源路徑,并且允許列出目錄和文件,這里需要注意的是 “resourceHandler.setStylesheet("");”,如果沒有這一行代碼的話,在請求資源的時候后臺總是會不停的拋出 NullPointerException。

運行FileServer類,訪問http://localhost:8080/就可以看到“E:/share”下的所有文件和目錄了。

 

上面是通過編碼的方式實現了簡單的文件服務器,其實Jetty也可以通過配置文件的方式實現文件服務器的功能,如下:

創建一個配置文件com/google/code/garbagecan/jettystudy/sample3/fileserver.xml,內容如下:

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

<Configure id="FileServer" class="org.eclipse.jetty.server.Server">
    <Call name="addConnector">
        <Arg>
            <New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
                <Set name="port">8080</Set>
            </New>
        </Arg>
    </Call>

    <Set name="handler">
        <New class="org.eclipse.jetty.server.handler.HandlerList">
            <Set name="handlers">
                <Array type="org.eclipse.jetty.server.Handler">
                    <Item>
                        <New class="org.eclipse.jetty.server.handler.ResourceHandler">
                            <Set name="directoriesListed">true</Set>
                            <Set name="resourceBase">E:/share</Set>
                            <Set name="stylesheet">.</Set>
                        </New>
                    </Item>
                    <Item>
                        <New class="org.eclipse.jetty.server.handler.DefaultHandler">
                        </New>
                    </Item>
                </Array>
            </Set>
        </New>
    </Set>
</Configure>
創建一個java類FileServerWithXml
package com.google.code.garbagecan.jettystudy.sample3;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.util.resource.Resource;
import org.eclipse.jetty.xml.XmlConfiguration;

public class FileServerWithXml {
    public static void main(String[] args) throws Exception {
        Resource resource = Resource.newClassPathResource("/com/google/code/garbagecan/jettystudy/sample3/fileserver.xml");
        XmlConfiguration configuration = new XmlConfiguration(resource.getInputStream());
        Server server = (Server) configuration.configure();
        server.start();
        server.join();
    }
}
運行FileServerWithXml類,訪問http://localhost:8080/也可以看到“E:/share”下的所有文件和目錄了。
鏈接:http://blog.csdn.net/kongxx/article/details/7224423

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!