1

Scalatra で Jetty サーバーをセットアップするための次の Scala コードがあります。

val server = new Server(8080)
val context = new WebAppContext()
context.setResourceBase("visualization")
context.addServlet(new ServletHolder(new CallTreeServlet(dataProvider)), "/*")
context.addServlet(new ServletHolder(new DataLoadingServlet(dataProvider)), "/*")
server.setHandler(context)

私の問題は、単一のサーブレットを登録した場合にのみ機能するように見えることです。

投稿したコードのように、複数登録すると、そのうちの 1 つだけが読み込まれます。

複数のサーブレットをロードすることは可能ですか? だと思いますが、方法がわかりません。

最初のサーブレットからページを読み込もうとすると、2 番目のサーブレットに属するページのみを参照する次のエラー メッセージが表示されます。

Requesting "GET /callTrees" on servlet "" but only have:
GET /components
POST /load
POST /searchCallTrees
POST /selectPlugIn
4

1 に答える 1

2

これをトラブルシューティングするには、サーブレットのライフサイクルを確認する必要があります。これを行う便利な方法の 1 つは、サーブレット コンテナーのログを精査して、Web アプリケーションの起動中に報告される内容を確認することです。各 Web アプリケーション (サーブレット コンテキスト) と各サーブレットについて通知する必要があります。. .

しかし、私はあなたの問題が何であるかがわかると思います。あなたのサーブレット パス マッピングは一種のファンキーです。すべてのリクエストを受信するように両方のサーブレットをマッピングしているように見えます。これは実用的な観点からは機能せず、サーブレット ルールの観点からも機能しない可能性があります。サーブレット仕様から:

SRV.11.2
Specification of Mappings
In the Web application deployment descriptor, the following syntax is used to define
mappings:
• A string beginning with a ‘/’ character and ending with a ‘/*’ suffix is used
for path mapping.
• A string beginning with a ‘*.’ prefix is used as an extension mapping.
• A string containing only the ’/’ character indicates the "default" servlet of
the application. In this case the servlet path is the request URI minus the con-
text path and the path info is null.
• All other strings are used for exact matches only.

両方をユニークにすることをお勧めします。現在のように、「デフォルトのサーブレット」のようなものである「/*」に両方がありますが、ではありません。. .

サニティチェックとして「/first/ 」と「/second/ 」を試してみませんか。そこから、好きなように構成を取得する方向に進みます。

于 2012-11-27T19:25:17.267 に答える