0

組み込みモードでtomcat7.0.19を正常に使用しています。ただし、最近、関心のある領域でいくつかの修正が行われたため、tomcat7.0.32に移行することにしました。ほとんどのものは同じコードと新しいバージョンで期待どおりに機能しますが、何らかの理由で戦争の展開はうまく機能していません。Tomcatにいくつかのサーブレットが登録されています。2つの問題の下に直面して、

  1. 埋め込まれたTomcatの動作から7.0.19から7.0.32に何かが変更されました。これを詳しく説明するために、動作の違いを説明しましょう。7.0.19では、アプリケーションをデプロイでき、「host:port / contextpath」を押すと、アプリケーションのスタートページが読み込まれます(つまり、ウェルカムページ、このページはUI中心であり、サーバーの介入を必要としないので、私のサーブレットはどれも呼び出されません)。ただし、7.0.32では、同じURLでサーブレットが呼び出されます。

  2. したがって、問題をデバッグするために、ほとんどのコードにコメントを付けて、バニラTomcatの実装を作成しました。これは、エンジン名、デフォルトホストの設定、ホストプロパティの設定、コネクタの追加(nio、デフォルトプロパティを使用)などの非常に基本的なものです。戦争を展開します。サーブレットなどはありません。非常に基本的なものが機能するかどうかを確認するだけです。驚いたことに、このコードを実行してもサーブレット内で同じ問題が発生しましたが、どのように発生しましたか?コードにコメントが付けられたため、サーブレットは登録されませんが、どこから取得されますか?埋め込まれたTomcatは、後続の実行でクリーンアップされない古い参照をいくつか保存しますか?ポートを変更してみましたが、それも役に立ちませんでした。

私はここで壁にぶつかっていますが、この奇妙な振る舞いを理解することはできません。#2を理解した場合にのみ、#1である程度の進歩を遂げることができます。

前もって感謝します、

ヴィクラム

4

1 に答える 1

0

問題が何であるかを理解しました。

逆の順序で、

2-これは実際には奇妙な動作であり、バニラに埋め込まれたTomcatコードが、最初から登録されたことのないサーブレットを呼び出しすぎていました。ここでの問題は日食にありました、何らかの理由でそれは私のクラスの古い参照を拾いました。Eclipseの外部から、つまりコマンドプロンプトを介して同じコードを実行した瞬間、状況は正常に戻りました。

1-この問題はWebデプロイメントに関連していました。私のコードでは、クラスローダーをWebappLoaderに追加で設定し、最終的にアプリケーションjarを追加していました。これは、何らかの理由で7.0.19では正常に機能しましたが、7.0.32では機能しませんでした。アプリケーションの起動時に、クラスパスを介してすべてのjarを外部化してロードすると、この問題も解決されました。

ありがとう、

ヴィッキー

于 2012-10-30T09:33:25.087 に答える