2012-02-21 10 views
7

私はJettyを埋め込むことで、自分のアプリケーション用の簡単なWebサービスを設定しようとしています。静的コンテンツ(最終的にはGWTアプリになります)とアプリケーション用のJSONステータスメッセージを吐き出すカスタムサーブレットを提供する単純なHTTPサーバーと、2つの異なるWebサービスを利用したいと思います。埋め込みJettyで静的リソースとカスタムサービスを設定するにはどうすればよいですか?

+ dist/ 
    - MyApp.jar 
    + lib/ 
    + html/ 
    - index.html 

そして、ここでは、私が埋め込まれたサーバーを構成するために、これまで持っているものです。

マイ配布フォルダ構造は次のようになります。 http://localhost/data/にアクセスしたときにカスタムサーブレットからテスト出力を正しく取得できますが、DefaultServletでindex.htmlファイルを見つけることができません。

public Webserver(int port) { 
    server = new Server(port); 

    ServletContextHandler context = new ServletContextHandler(); 
    context.setResourceBase("./html/"); 
    server.setHandler(context); 


    JsonDataApiServlet dataServlet = new JsonDataApiServlet(); 
    DefaultServlet staticServlet = new DefaultServlet(); 

    context.addServlet(new ServletHolder(dataServlet), "/data/*"); 
    context.addServlet(new ServletHolder(staticServlet), "/*"); 
} 

これは、物事に桟橋を埋め込んでいる人々のための共通の仕事であるようです。私は正しい道に就いていますか?

編集

この問題は、相対パスを突堤内部計算される方法の誤解によるものであったが判明しました。私はjava -jar dist\MyApp.jarを使ってdistフォルダの上にある1つのフォルダからこれを実行していて、Jettyは正しいdist\htmlではなくdist\..\htmlを探していました。 distフォルダの中からjarファイルを実行すると、問題が修正されます。私はdistディレクトリの中から実行する必要なしに、どのように動作させたかを答えます。

+1

_私はDefaultServletでindex.htmlファイルを見つけられないようです。したがって、 "/index.html"にアクセスしたときにどのような動作が見られますか? Jettyはどのログ出力を生成しますか? – Tim

+0

ありがとうTim、そのコメントは正しい方向に私を導きます。 – Collin

答えて

6

編集で言うとおり、これは私がjarファイルを実行していたディレクトリの問題です。ここでは、JARを実行した場所からhtmlフォルダを見つけるために使用したメソッドを示します。

まず、jarのマニフェストクラスパスにhtmlフォルダを追加しました。

server = new Server(port); 

ServletContextHandler context = new ServletContextHandler(); 
context.setResourceBase(htmlLoc); 
context.setWelcomeFiles(new String[] { "index.html" }); 
server.setHandler(context); 


JsonDataApiServlet dataServlet = new JsonDataApiServlet(); 
DefaultServlet staticServlet = new DefaultServlet(); 

context.addServlet(new ServletHolder(dataServlet), "/data/*"); 
context.addServlet(new ServletHolder(staticServlet), "/*"); 
:これはその後、桟橋に渡す絶対ディレクトリを見つけ、クラスパスにインデックスファイルを見つけるために、クラスローダーを使用しています

ClassLoader loader = this.getClass().getClassLoader(); 
File indexLoc = new File(loader.getResource("index.html").getFile()); 
String htmlLoc = indexLoc.getParentFile().getAbsolutePath(); 

:次のコードは、JARがからロードされている場所のHTMLフォルダを与えます

関連する問題