1. 程式人生 > >Jetty實戰之 嵌入式執行Jetty實現簡單檔案伺服器

Jetty實戰之 嵌入式執行Jetty實現簡單檔案伺服器

               

本文連結: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類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”下的所有檔案和目錄了。