3

Jetty-9 を組み込みモードで使用しており、必要な Web アプリケーションは 1 つだけです。したがって、ルート URL がそのアプリケーションのホームページに移動するようにします。つまり、次のようなものです。

http://localhost:4444/

サーブレットになるはずです。私はから始めます:

ServletContextHandler scContext = 
        new ServletContextHandler(ServletContextHandler.SESSIONS);
scContext.setContextPath("/");

次のどれも機能しませんでした。

scContext.addServlet(ListsServlet.class, "/");

または

scContext.setWelcomeFiles(new String[]{"/lists})

where/listsListsServletサーブレットにマップされます。私が得るのは403(禁止)だけです。

DefaultServletウェルカム ファイルを処理しているように見えるは使用しません。しかし、私はそれらを使用するためのロジックが含まれていると思っていましたServletContextHandlersetWelcomeFiles

何か案は?

4

1 に答える 1

3

エラーについては403 Forbidden、ハンドラー/サーブレットへのアクセスを許可していないセキュリティ設定があります。

そのセキュリティを(今のところ)削除し、残りが機能していることを確認してから、少し後でセキュリティを追加して詳細をロックします。

以下の提案が実際に機能していることを確認したい場合は、別のスタックオーバーフローからの回答のコード例を見ることを検討してください

その場所に何も存在しない場合、ウェルカム ファイルは着信要求パスに追加されます。たとえば、ディレクトリをリクエストすると、'index.html' のウェルカム ファイルがリクエスト パスに追加されます。

これは機能しますが...

scContext.setWelcomeFiles(new String[]{"lists"})

// Add Default Servlet (must be named "default")
ServletHolder holderDefault = new ServletHolder("default",DefaultServlet.class);
holderDefault.setInitParameter("resourceBase",baseDir.getAbsolutePath());
holderDefault.setInitParameter("dirAllowed","true");
holderDefault.setInitParameter("welcomeServlets","true");
holderDefault.setInitParameter("redirectWelcome","true");

scContext.addServlet(holderDefault,"/");

ルートパスのみを言ったので、それはあなたが目指しているものではない可能性があります。上記は、次のようなリクエストにも変更を加え/foo/ます/foo/lists

代わりに、welcome-files アプローチの代わりに Rewrite ルール + ハンドラーを使用する方が理にかなっています。

RewriteHandler rewrite = new RewriteHandler();
rewrite.setHandler(scContext);

RewritePatternRule rootRule = new RewritePatternRule();
rootRule.setPattern("/");
rootRule.setReplacement("/list");
rootRule.setTerminating(true);
rewrite.addRule(rootRule);

server.setHandler(rewrite);

これRewritePatternRuleは単にリクエスト パス/を に変更/listし、そのリクエストをラップされた に転送するだけです (ブラウザでssContextを表示したい場合は、代わりに に変更します。 /listRedirectPatternRule

于 2014-10-06T12:27:10.247 に答える