web-dev-qa-db-ja.com

Intellij10.XおよびTomcat6.Xで変更した後のJSPのホットデプロイ

1つのJavaクラスと1つのjspを持つHello-Worldアプリケーションがあります。JSPは、JSPに埋め込まれているテキストをJavaクラスから出力します。 。(2つのものを出力します)

私は指示に従いました ここ アプリケーションを作成してデプロイし、それは(ほとんど)機能します! JSPを呼び出すことができ、ページが正しく表示されます。 Intellijリロードボタンを押した後、Javaクラスの変更をホットスワップすることもできます。

問題:JSPを変更しても、ブラウザに反映されません。

私は以下を確認しました:

  • tomcat/confディレクトリのweb.xmlは、「開発」値をオーバーライドしません。デフォルトはtrueです。
  • helloWorld\web\META-INF\context.xmlとTomcat\conf\context.xmlの両方のcontext.xmlにreloadable = trueがあります
  • 変更があれば、JSPがC:\ code\HelloWorld\web\index.jspからC:\ code\HelloWorld\out\artifacts\HelloWorld_war_exploded\index.jspにすぐにコピーされること
  • ブラウザのキャッシュの問題ではありません

何かご意見は?

20
Tihom

Intellij IDEA 10.0.3を使用していますが、同じ問題が発生しました。Tomcatサーバーの設定を確認して解決しました-"フレームの非アクティブ化時にリソースを更新" [実行/デバッグ構成]セクションの設定。これがお役に立てば幸いです。

31
cyanglee

この質問に答えると、IntelliJ IDEAはバージョン13.0.2です。この質問が行われたため、オプションが少し異なります。つまり、プロジェクトの[構成の実行/デバッグ]パネルを使用します。 :

  1. プロジェクトが「戦争爆発」として展開されるように設定されていることを確認します(「展開」を介して)
  2. [サーバー]タブで、[フレームの非アクティブ化時]を[クラスとリソースの更新]に設定します

これらの2つの手順を順番に実行すると、IDEAがフォーカスを失ったとき(つまり、フォーカスをWebブラウザーに変更したとき)にプロジェクトが「ホットスワップ」されます。

完全な手順は http://www.jetbrains.com/help/idea/2016.1/updating-applications-on-application-servers.html?search=application%20servers で入手できます。

30
James Sumners

編集してみてくださいRun/Debug Configuration、[展開]タブに移動し、展開されたwarファイルを展開します。

6
Sasa

数年前、変更された時刻に変更があったときに、jspを再コンパイルするようにTomcatを構成しました。最近、同じ設定を試しましたが、うまくいきませんでした。

私の状況では、確認する必要のある変更は主にhtmlの変更であったため、ほとんどのhtmlを別のhtmlファイルにカプセル化することができました。次に、読み取ったファイルを使用して、その内容をjsp内に含めます。その後、再デプロイせずに、ブラウザーに反映されたhtmlへの変更を即座に取得することができました。 jspインクルードはトリックを行わず(htmlをキャッシュした)、Javaヘルパー内のファイルリーダーを使用してファイルを読み取って文字列をjspに返す必要があったことに注意してください(できます)。 Javaロジックをjspに入れますが、それはmvcのようなものではありません)

このアプローチの1つの注意点は、変数データをファイル読み取りhtmlにマージすることです。使用できるアプローチはいくつかあります。 1.独自の文字列置換アルゴリズムを作成し、ヘルパーアプリに文字列を動的に置換させます2.変数データをjavascriptブロックに出力し、javascriptにファイル内のhtml値を更新させますhtmlブロックを読み取ります(javascriptチョップをプルする必要があると仮定します)そのオフ)。

2
TroyJ