2

異なるポートで実行されている2つの異なるアプリ/ハンドラー(1つはAPI用、もう1つはWebフロントエンド用)を持つclojure/ringプロジェクトがあります。それらは多くのコードを共有しますが、それぞれに独自の名前空間があり、そのインターフェイスに固有のすべての作業を実行します。これを、Tomcatなどで実行されているサーブレットとしてデプロイしたいと思います(実際には、任意のサーブレットコンテナで動作する必要があります)。しかし、lein-ringは、サーブレットにハンドラーが1つしかないことを前提としているように見えるため、問題が発生しています。たとえば、私のproject.cljには、次の行があります。

:ring {:handler caribou.api/app
       :servlet-name "caribou"
       :init caribou.api/init}

これはAPIには最適ですが、フロントエンドについてはどうでしょうか。独自のハンドラーとサーブレットを持つことができるように、これを含む別のプロジェクトを作成する必要がありますか?サーブレットは常に1つのポートで実行されますか?

基本的にわからないことが2つあります。Javaのバックグラウンドを持っていないため、サーブレットアプローチで何が起こっているのか、どのような制限があるのか​​がわかりません。また、clojureがどのように正確に変換されるのかわかりません。このプロジェクトを一般的な方法で構造化するのに十分なサーブレットパラダイム。

どんな助けでもありがたいです、ありがとう!

4

1 に答える 1

1

同じコンテナ内のすべてのサーブレットは、同じサーバー、つまり同じポートから提供されます。/servlet1通常、またはなどのさまざまなURIプレフィックスを付けることで、さまざまなサーブレットを識別します/my/servlet

Ringを使用して個別のサーブレットを作成することを妨げるものがあるかどうかはわかりませんが、一般に、アプリ全体がClojureベースであるかどうかは適切ではないようです。少なくとも、ご指摘のとおり、lein-ringプラグインは、Webアプリケーションに1つのサーブレットのみが使用されるように強制します。

実行できることの1つは、URIに基づいてアプリハンドラーまたはAPIハンドラーのいずれかに委任する親ハンドラーを作成することです。これにより、基本的に、ロジックをサーブレットAPIに委任する必要なしに制御できます。

于 2012-04-03T03:06:50.043 に答える