1

Javaアプリの組み込みWebサーバーとしてJetty6を使用しています。これまで静的コンテンツを提供する理由はありませんでしたが、静的コンテンツだけでなく、ディレクトリリストも表示したいと思います。

ResourceHandlerクラスを使用してこれを実行しようとしましたが、ある時点でmortbayはResourceHandlerがディレクトリリストを実行する機能を削除しました。

.jspまたはサーブレット機能を追加せずに、web.xml構成なしでこれを実行したいと思います。要するに、私はこれをプログラムで行おうとしています。

私の人生の間、私はこれの例をオンラインで見つけることができません。誰かが私を正しい方向に向けることができますか?

どうもありがとう!

4

2 に答える 2

3

さて、私はJettyに私が望むことをさせる方法を理解しました。それは、いくつかのカスタムサーブレットの処理に加えて、いくつかの静的コンテンツをホストすることでした。

表面上、これを行う方法は、DefaultServletを作成し、それに応じてresourceBaseとpathSpecを設定して、/ www/*上のディレクトリをホストできるようにすることでした。ただし、これは機能しませんでした。実際、pathSpecsが実際にどのように機能するか、または定義されることになっているのかについての説明は見つかりませんでした。

したがって、追加のServletHandlerとコンテキストを作成し、元のコンテキストと静的コンテンツホスティング用の新しいコンテキストの両方をサーバーに追加する必要がありました。

私はそうしました:


Server srv = new Server( port );

//  create context and handler for my servlets
Context ctx = new Context();
ServletHandler sh = new ServletHandler();

//  ... adding servlets here ...

//  create context and handler for static content
ServletHandler sh2 = new ServletHandler();
ServletHolder holder = new ServletHolder( new DefaultServlet() );
holder.setInitParameter("resourceBase", staticResourceBase);
sh2.addServletWithMapping( holder, "/*" );
staticContext.setContextPath(staticPathSpec);
staticContext.setServletHandler(sh2);

//  add both contexts to server
ContextHandlerCollection contexts = new ContextHandlerCollection();
contexts.setHandlers(new Handler[] { staticContext, ctx });
srv.setHandler(contexts);



これはこれを行うための好ましい方法ではないかもしれませんが、プログラムでJettyベースのアプリに静的コンテンツホスティングを追加することができました。

于 2010-12-02T21:29:38.150 に答える
0

Webアプリケーションがあり、jettyを実行しているだけの場合、デフォルトでは、Webアプリケーションのルートディレクトリ(たとえば、WEB-INFが存在するのと同じディレクトリ)から静的コンテンツを提供すると思います。したがって、たとえば、次のディレクトリがある場合があります。

mywebapp
 - WEB-INF
 - static
     - site_img.gif

そして、 http://mysite.com/static/site_img.gifを提供できるようになりました

私が間違っている場合は訂正してください。この回答を削除します。これは私の頭のすぐ上にあります。

于 2010-11-23T09:28:19.563 に答える