Jetty實戰之 嵌入式執行Jetty實現簡單檔案伺服器
阿新 • • 發佈:2018-12-21
本文連結:http://blog.csdn.net/kongxx/article/details/7224423
對於嵌入式執行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(); }}
這裡使用了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類FileServerWithXmlpackage 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”下的所有檔案和目錄了。