さて、Jettyに私が望んだことをやり遂げる方法を考えました。これは、いくつかのカスタムサーブレットの処理に加えて静的コンテンツをホストすることでした。
これを行う方法は、DefaultServletを作成し、それに応じてresourceBaseとpathSpecを設定し、/ www/*のディレクトリをホストできるようにすることです。しかし、これは決してうまくいかなかった。実際、pathSpecがどのように実際に動作するのか、定義されるべきかについては何の説明も見つけられませんでした。
したがって、追加のServletHandlerとContextを作成し、サーバーに静的コンテンツをホスティングするための元のコンテキストと新しいContextの両方を追加する必要がありました。
私はそうのようなことをやった:
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);
これは、これを行うための好ましい方法ではないかもしれないが、それは私がプログラムで私の桟橋ベースのアプリをホスティング静的なコンテンツを追加することができませんでした。
出典
2010-12-02 21:29:38
Tom
情報をいただきありがとうございますが、それは私が達成しようとしているものではありません。私はWEB-INFディレクトリを持っていません(私は推測するWebアプリケーションを提供していないのですか?)私はプログラムでDefaultServletをセットアップしようとしていて、コード内のパラメータを設定しようとしていますが、 – Tom