JSP ページを実行し、Web アプリケーションの外部でその出力をキャプチャすることは可能でしょうか? 具体的には、私の場合、通常の Web アプリケーションがまだ存在しますが、クラスパスからではなく、任意のソースから JSP ページをロードします。単純に RequestDispatcher を取得してディスク上の JSP ファイルを指すようにすることはできないようです。
2 に答える
Velocity のようなテンプレート エンジンを使用したほうがよいと思います。これにより、要求している jsp/サーブレットとは明らかに異なる動的コンテンツ用のクリーンなインフラストラクチャが提供されます。
そうは言っても、コンテナーがそれらを取得して変換するために、展開されたディレクトリに jsps をコピーするアプリケーションを見てきました。これを行う場合、これにより将来のオプションが制限されることに注意してください。
- アプリケーションが「展開」されることに依存している - たとえば、WAR アーカイブから直接実行することはできません (これにより、展開オプションが制限される可能性があります)。
- 実行時にjspsを編集可能にすると、スクリプトレットを無効にしないとセキュリティホールが開く可能性があります(無効にした場合も同様ですが、やや難しくなります...)。スクリプトレットを無効にすると、jsps で実際の Java コードが禁止され、タグ ライブラリに制限されます。
- 実行時に利用可能な Java コンパイラが必要になりますが、これは本番システムでは使用したくない場合があります。たとえば、デプロイ前に jsps をプリコンパイルすることはできません。また、生産システムの実行時に通常の jsp-translation-penalty を支払います。
スクリプトを無効にするための web.xml 構成:
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<scripting-invalid>true</scripting-invalid>
</jsp-property-group>
</jsp-config>
この web.xml スニペットがうまくいったことを願っていますが、プレビューでは正しく表示されませんでした...
更新: xml-snippet が正しく表示されるようにしました。
私が間違っている場合は訂正してください。ただし、JSP ではなく、HTML をキャプチャしたいということだと思います。JSP はサーブレット エンジン (Web アプリ サーバー) で (JAVA ファイルに) 処理され、HTML がフォーマットされた後、Web サーバー (Web アプリ サーバーとは異なります) 経由でリクエスターに提供されます。RequestDispatcher をディスクから直接 JSP で動作させることはできません。これは、Web アプリケーション サーバーによってまだ処理されていないためです。さて、JSP の出力を (HTML で) キャプチャすることは可能ですが、これまでに行ったことはありません。私が対処できるよりも知識が豊富な洗練された API がいくつかあるかもしれませんが、HTTP は通常ポート 80 で行われるため、TCPIP ソケットでポート 80 を読み書きできると思います。その上でやるべきことが他にもあるかもしれませんが、少なくともそれは調査を開始するためのポイントです。
申し訳ありませんが、詳細を提供することはできませんが、地獄... 現時点ではすべて理論です.