1

私のプロジェクトの 1 つは、Spring MVC を使用して URL マッピングとディスパッチ ロジックを処理します。機能のメイン エントリ ポイントとして独自のライブラリを使用するサード パーティ ライブラリを使用する必要がありますが、これは別のライブラリのオプションのドロップイン置換であるため、web.xmlHttpServletに宣言を入れることはできません。 <servlet>dControllerと Spring プロファイルを使用して、web.xml を編集せずにそのような実装を切り替えます。

そのような場合を処理するために Spring によって提供される OOTB はありますか? すぐには見つからないようです。

前もって感謝します!

4

2 に答える 2

2

サードパーティのサーブレットをあなたに登録するweb.xmlことはできないので、あなたの最善の策は、あなたのサーブレットのシングルトンインスタンスを作成し、そのサーブレットのメソッドApplicationContextに委譲するカスタムビューを作成することだと思います.service

カスタム ビューの動作例は、このチュートリアルで確認できます。

于 2012-12-05T22:56:29.820 に答える
1

私のアプローチが他の人に役立つ場合に備えて、ここで私自身の質問に答えます。

考慮すべき重要な要素が 2 つあります。

  • サーブレットの適切な初期化
  • サーブレットが HTTP レイヤーを完全に制御できるようにする (例: HTTP ヘッダーの設定など)

私の特定のケースでは、サーブレットの破棄はノーオペレーションであるため、適切に処理する必要はありません。

最終的に、特定の Spring プロファイルがアクティブ化された場合にのみインスタンス化される専用Controllerの を作成しました。これは、サーブレットのインスタンス化と初期化を処理します。次に、次のように、すべてのリクエストがハンドラー メソッドで直接処理さvoidれます。

public class ServletDelegatingController implements ServletConfig {
    private final DelegateServlet delegate = new DelegateServlet();

    public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { 
        delegate.service(request, response);
    }



    // properly initializes the servlet
    public void setServletConfig(ServletConfig servletConfig) {
        try {
            delegate.init(servletConfig);
        } catch (ServletException e) {
            throw new IllegalStateException("Failure while initializing the servlet", e);
        }
    }
}

delegating-servlet.xmlは次のようDispatcherServletになります。

<beans profile="custom">
    <bean id="cmisServiceFactory"
          class="com.foo.ServletDelegatingController"/>
</beans>
于 2012-12-06T16:14:01.970 に答える