JSP 自動コンパイル メカニズムの詳細な紹介
一般に、Jasper の自動検出メカニズムは、JSP ファイルとコンパイルされたクラス ファイルの最終変更時刻が同じかどうかを継続的に検出するバックグラウンド スレッドに依存しています。それらが同じであれば、変更はないと見なされますが、異なる場合は再コンパイルする必要があります。実際、Tomcat にデプロイされたプロジェクトの JSP は他のページや他の jar パッケージを導入する可能性があり、これらのリソースはリモート リソースである可能性があるため、実際の処理は、これらの異なるインポートされたリソースを横断して検出することも必要になります。変更が加えられました。
上の図は、Tomcat アーキテクチャにはエンジン、ホスト、コンテキスト、ラッパーの 4 つのレベルのコンテナーがあり、jsp コンパイルはラッパー レベルに対応するため、StandardWrapper が継続的に実行されることがわかります。 jasper を呼び出すタスクがあり、jasper はさまざまなローカルおよびリモートのリソースを継続的に検出して検証し、再コンパイルが必要であることが判明すると再コンパイルします。これがどのように達成されるかについては、以下をお読みください。
まず、バックグラウンド実行スレッドが必要です。Tomcat には、さまざまなコンテナーのバックグラウンド タスクを処理するための専用のスレッドがあります。異なるコンテナーで特定のバックグラウンド タスクを実行したい場合は、backgroundProcess メソッドを書き直すだけです。 JspServlet は Wrapper レベルに対応するため、StandardWrapper でbackgroundProcess を書き直す必要があります。JspServlet は PeriodicEventListener インターフェイスを実装します。このインターフェイスには、特定の検出ロジックが 1 つだけ実装されます。方法。
第二に、再コンパイルの検出と判断の根拠は何ですか?再コンパイルとは、jsp を Java に変換してから再びクラスに変換することです。このアクションをトリガーする条件は、特定の jsp ファイルを変更するとき、または特定の jsp ファイルによって導入されたリソースが変更された後に、再コンパイル アクションがトリガーされることです。したがって、判断の最良の根拠は、特定の JSP またはリソースの最終変更属性です。通常のシーケンスでは、JSP がコンパイルされてクラス ファイルが生成され、そのクラス ファイルの最終変更属性が、そのクラス ファイルの最終変更属性に設定されます。このとき、jsp ファイルの lastmodified 属性が同じであることを確認して、jsp ファイルを変更して保存すると、jsp の lastmodified 属性が現在時刻に設定されます。 2 つのファイルの lastmodified 属性を判断して再コンパイルするかどうか。再コンパイル後、jsp ファイルとクラス ファイルの lastmodified 属性は再び同じに設定されます。インポートされたリソースの場合、前回のコンパイル時にインポートされたリソースの lastmodified 属性がメモリに保持され、継続的に取得され、メモリ内の対応する lastmodified 属性と比較されるため、再コンパイルかどうかを簡単に判断できます。が必要です。
最後に、ローカルリソースとリモートリソースをそれぞれ検出するにはどうすればよいでしょうか?ローカル リソースの場合、java.io.File クラスを使用すると、JSP ファイルまたはその他のファイルの lastmodified 属性を簡単に読み取ることができます。 jar パッケージなどのリモート リソースの場合、jar に含まれる属性の処理を容易にするために、java.NET.URL を使用すると非常に便利です。これには、一般的な jar、ファイル、ftp などの多くのプロトコルが含まれています。プロトコルは非常に使いやすく、
URL includeUrl = new URL("jar:http://hostname/third.jar!/"); URLConnection iuc = includeUrl.openConnection(); long includeLastModified = ((JarURLConnection) iuc).getJarEntry().getTime();
リモート jar パッケージの読み取りを完了し、最終変更時刻を取得するのに必要な手順は 3 つだけです。もちろん、URL はローカル ファイル リソースの読み取りもサポートしているため、Tomcat でインポートされたリソースの管理には URL が操作オブジェクトとして使用されます。
このセクションでは、Jasper の自動検出メカニズムの実装について説明します。自動検出メカニズムは、自分で JSP を変更してコンパイル操作を実行する必要がなく、代わりに Tomcat を使用することで時間を節約できます。 jasper を通じてコンパイル操作を検出します。
読んでいただきありがとうございます、皆さんのお役に立てれば幸いです