2012-03-30 7 views
1

Tomcatコンテナで現在実行されている従来のJavaサーブレットがあります。私はスタンドアロンのJavaアプリケーションとして、コンテナの外で実行したい。これを行う際の主な目的は、このアプリケーションがデプロイされる新しい役割には計算のみが含まれ、要求の処理は含まれないためです。JavaサーブレットをスタンドアロンJavaアプリケーションに変換する

サーブレットコードの変更についてはどうすればよいですか?サーブレットのinit()コードを新しいクラスのヘルプのmain()メソッドに抜き出しますか?

答えて

1

あなたが言及したように私はサーブレットクラスをメインクラスに変換します。新しいクラスのmainメソッドは、メインクラスのインスタンスを作成し、initメソッドを実行して(コマンドラインから受け取った引数を使用する可能性がある場合)初期化します。その後、try/catch/finallyブロックの中でserviceメソッドを呼び出し、finallyブロック内でサーブレットのdestroyメソッドを呼び出します。もちろん、新しいサービスメソッドはパラメータなしで呼び出され、サーブレットAPIへの参照は含まれません。

1

はい。

サーブレットは、Tomcatサーブレットコンテナと対話するためのインタフェースを実装しています。サーブレットコンテキスト(パス名、構成パラメータ)から読み取られた設定がない場合、ロジックをメインクラスに抽出できます。

サービスで要求/応答方式に頼らないようにする必要があります。通常、1つのプロセスしか実行しない場合、コードは同時のシナリオよりもはるかに簡単です。しかし、そのような影響がないことを確かめることはできません(例えば、リクエストベースのキャッシュは、スタンドアロンでは空になりません)。

また、コード内のサーブレットの依存関係を削除します。それは機能しなくなり、もはや必要ではありません。

幸運!

1

これは慎重に行う必要があります。いくつかのフィルタがサーブレット内で見えない必要な作業を行っている可能性があります。

あなたのケースはかなりシンプルで、GETまたはPOSTだけでコードがトリガされると仮定すると、古典的なJavaアプリケーションに簡単に変換できます。

doGetまたはdoPostの元のinit部分とコードを丁寧に呼び出してください。

1

まず、いくつかのことを理解する必要があります。サーブレットの機能は、おそらくURLのパラメータの一部に反応します。 最初に計算部分が何であり、何のパラメータが期待されているのかを理解すれば、 あなたのスタンドアロンアプリケーションに何を入れるのかはわかりません。

別のアプローチは、メインアプリケーションで桟橋を埋め込んで、それはあなたのサーブレットを実行してみましょう、
これは導入バグ

2

他のサーブレットから必要な機能を抽出するリスクを軽減そのままサーブレットのコードを残すことですサーブレットはその機能に対するWebインタフェースにすぎません。

他のクラスでは、javax.servlet.*には何も使用しないことが理想的です。

次に、これらの他のクラスを適切に使用する別のクラスをmainメソッドで作成します。

関連する問題