複数の WARS を持つ Web アプリケーションがあります。これらの WARS はすべて異なる機能を実行しますが、Css、Js、ヘッダーとフッター、およびエラー メッセージとトランザクションの確認を出力する特定の jsp など、多くの共通点があります。保守性を高めるために、これらの共有ファイルを 1 つの場所ではなく複数の場所に置きたくないので、1 つを編集するとすべてに表示されます。基本的なコード管理だけです。これをSOの誰かに説明する必要はないと思います。
Css と Js については、ルート War があり、すべての<link>
and<script>
タグを完全にアドレス指定します。ヘッダーとフッター (jsp フラグメント) については、使用して<c:import>
おり、ルート戦争から再度取得しています。私が抱えている最後の問題は、jsps の共有です。
ユーザーがアクションを実行しようとした後、トランザクションが完了したことを確認するためにデータベースに変更が加えられた後、またはフォーマットされたメッセージをユーザーに提供したいその他の状況で、私はよくこれらの jsps に転送します。サーブレットは次のようになります...
public class sampleServlet extends ExtendedHttpServlet{ //ExtendedHttpServlet used to add common function to all of our HttpServlets including the foward function I use below.
public void doPost(HttpServletRequest request, HttpServletResponse response){
//Do some preperation stuff here, then...
try{
ModelJob.insertNewControlMJob(user, submit); //ModelJob is my inteface to our 'Job' Table Model...
submit.setSeqId(ModelJob.getSeqId(user, submit));
EmailFactory.SUBMIT_NEW_EMAIL.sendCMAdminEmail(user, submit, null);
EmailFactory.SUBMIT_NEW_EMAIL.sendUserEmail(user, submit, null);
req.setAttribute("color","Green");
req.setAttribute("message"," Job Successfully Submited. Sequece id : " + submit.getSeqId());
forward("/WEB-INF/TransactionResult.jsp", req, resp);
return;
}catch(Exception e){
req.setAttribute("color","Red");
req.setAttribute("message","Teradata failure : " + e.getMessage());
forward("/WEB-INF/TransactionResult.jsp", req, resp);
e.printStackTrace();
return;
}
}
}
これは、スーパークラスで定義された上記の呼び出しメソッドですExtendedHttpServlet
。
protected void forward(String destination, HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
RequestDispatcher dispatcher = request.getRequestDispatcher(destination.toString());
dispatcher.forward(request, response);
}
しかし、これを使用すると、すべての戦争で TransactionResult.jsp のコピーを保持する必要があり、メンテナンスが少し面倒になります。
私の質問は - 転送先の他の WAR で jsps を見つけるために転送機能を取得する方法はありますか? または、jsp を EAR に含めて、フォワードに jsp ファイルを見つけてもらうこともできます。jsps は単なるファイルであり、特別なサーブレットによって実行時にコンパイルされることを理解しているので、なぜこれが不可能なのかわかりませんか?
アドバイス/洞察/助けをありがとう....
編集 あなたの何人かがどのサーバーを尋ねたので、私は現在Websphere v 7.0を使用しています