2013-11-26 19 views
10

いくつかの動的データを提供するカスタムサーブレットといくつかのイメージを提供するデフォルトサーブレットの両方を使用して、埋め込みjettyサーバーを作成しようとしています。カスタムサーブレットが動作していますが、イメージファイルを提供するためのデフォルトのサーブレットを追加する方法がわかりません。埋め込みJettyの代替パスからの静的ファイルの提供

これは、私は、ファイルサーバとして動作し、まだDataServeletはまだ動作習慣を持つようにデフォルトサーブレットを設定する方法を見つけ出すことはできません...私が持っているもの

private void setUpServer(ServerOptions options){ 
    s = new Server(options.getPort()); 
    this.options = options; 
    context = new ServletContextHandler(ServletContextHandler.SESSIONS); 
    context.setContextPath("/"); 
    s.setHandler(context); 
    context.addServlet(new ServletHolder(new DataServlet()), "/data/*"); 
    context.addServlet(new ServletHolder(new DefaultServlet()), "/pictures/*"); 
} 

です。

誰にもアイデアはありますか?あなたが必要なもの

答えて

28

  1. 「/」でAデフォルトサーブレット(推奨、それはサーブレット仕様の要件です)
    • これは「デフォルト」の名前のディスパッチャにする必要があります(別の要件サーブレット仕様)の
  2. のinit-のparamsを経由して構成されたカスタム静的コンテンツと交互デフォルトサーブレット、
      あなたが達成するために ServletHolder.setInitParameter(name,value)を使用することができます
    • (他のサーブレット仕様の特徴間の名前の衝突を避けるために)「デフォルト」とは異なる名前のディスパッチャを使用して
    • この
    • はあなたがtruepathInfoOnlyパラメータを設定してください(周りに取得します
  3. 動的コンテンツを提供する独自のサーブレット。

AltDefaultServlet.java

package jetty.demo; 

import org.eclipse.jetty.server.Server; 
import org.eclipse.jetty.server.ServerConnector; 
import org.eclipse.jetty.servlet.DefaultServlet; 
import org.eclipse.jetty.servlet.ServletContextHandler; 
import org.eclipse.jetty.servlet.ServletHolder; 

public class AltDefaultServlet 
{ 
    public static void main(String[] args) 
    { 
     System.setProperty("org.eclipse.jetty.LEVEL","INFO"); 

     Server server = new Server(); 
     ServerConnector connector = new ServerConnector(server); 
     connector.setPort(8080); 
     server.addConnector(connector); 

     // The filesystem paths we will map 
     String homePath = System.getProperty("user.home"); 
     String pwdPath = System.getProperty("user.dir"); 

     // Setup the basic application "context" for this application at "/" 
     // This is also known as the handler tree (in jetty speak) 
     ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); 
     context.setResourceBase(pwdPath); 
     context.setContextPath("/"); 
     server.setHandler(context); 

     // add a simple Servlet at "/dynamic/*" 
     ServletHolder holderDynamic = new ServletHolder("dynamic", DynamicServlet.class); 
     context.addServlet(holderDynamic, "/dynamic/*"); 

     // add special pathspec of "/home/" content mapped to the homePath 
     ServletHolder holderHome = new ServletHolder("static-home", DefaultServlet.class); 
     holderHome.setInitParameter("resourceBase",homePath); 
     holderHome.setInitParameter("dirAllowed","true"); 
     holderHome.setInitParameter("pathInfoOnly","true"); 
     context.addServlet(holderHome,"/home/*"); 

     // Lastly, the default servlet for root content (always needed, to satisfy servlet spec) 
     // It is important that this is last. 
     ServletHolder holderPwd = new ServletHolder("default", DefaultServlet.class); 
     holderPwd.setInitParameter("dirAllowed","true"); 
     context.addServlet(holderPwd,"/"); 

     try 
     { 
      server.start(); 
      server.dump(System.err); 
      server.join(); 
     } 
     catch (Throwable t) 
     { 
      t.printStackTrace(System.err); 
     } 
    } 

} 
+0

これは完全に働きました。ありがとうございました!!!!!!!!! – user3034643

+0

これは...最終的に数時間の無駄な時間の後に動作します。ありがとう!!! – thisarattr

+0

埋め込まれたJettyバージョン9.4で修正されたこの問題は、@Joakim Erdfelt –

関連する問題