私のアプローチが他の人に役立つ場合に備えて、ここで私自身の質問に答えます。
考慮すべき重要な要素が 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>