Jetty實戰之 嵌入式運行Jetty實現簡單文件服務器
對于嵌入式運行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類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”下的所有文件和目錄了。
鏈接:http://blog.csdn.net/kongxx/article/details/7224423