본문 바로가기
IT

JSPベスト・プラクティス: タイム・スタンプの力

by 엘리후 2021. 7. 5.

タイム・スタンプは、通常個人のサイトあるいはコンテンツ主導サイトのような単純なWebサイト上で使用され、ページがいつ更新されたかをユーザーに知らせる働きがあります。その結果、特にEコマースのようなサイトには、それらの本質的な実用性が見落とされがちです。今回は、JSPページへタイム・スタンプを追加することによって、サイトの独自化に門戸を開くこと、およびそれがユーザーにとっていかに安堵をもたらすかについて説明いたします。

タイム・スタンプの追加

JSPページに最終更新日時のタイム・スタンプを置くことは、他のタイプのページにタイム・スタンプを置くことと全く同じです。java.io.Fileクラスは、ちょうどこの目的のためにlastModifiedメソッドを提供しています。唯一の一筋縄にはいかない部分は、Webコンテナーに展開されたJSPページへのFileハンドルの取り込みです。リスト1は、この難関を乗り越えるための短いコード(JSPページ内に置かれた場合はscriptlet)です。

applicationとrequestはどちらも、すべてのJSPページがアクセスすることができる組み込み変数であることに注意してください。applicationは、このJSPページでjavax.servlet.ServletContextオブジェクトをインプリメントするクラスの例です。このオブジェクトはJSPページのservletパスを取得し、取得したパスは物理的なパスに変換されます。その後、このパスはFileに変換されます。

リスト1. JSPへのfileハンドルの取り込み

1
2
String jspPath = application.getRealPath(request.getServletPath());
java.io.File jspFile = new java.io.File(jspPath);

この情報を理解するため実行に移すには、リスト2のようなコードを使用してください。

リスト2. タイム・スタンプの出力

1
2
3
4
5
<%
String jspPath = application.getRealPath(request.getServletPath());
java.io.File jspFile = new java.io.File(jspPath);
out.println(new java.util.Date(jspFile.lastModified()));
%>

ファイルの最終更新日が決められれば、それはDateオブジェクトに変換され、画面に直接出力されます。これは結果を得るためのかなり基礎的なコードになっています。

再使用可能なタイム・スタンプ

タイム・スタンプを入れたいすべてのページに、上のようなコードを追加することは確かに苦痛(そして冗長でもある)となるでしょう。これに対するよりよいアプローチは、日付およびタイム・スタンプを表示する汎用的なJSPページを作成し、タイム・スタンプを入れたいすべての場所でこのJSPページをインクルードすることです。これについては、リスト2をtimestamp.jsp として保存し、タイム・スタンプを出力するために必要な場所でjsp:includeメカニズムを使用すればよいです。リスト3は、JSPタイム・スタンプをインクルードしている単純なフッター・ページの例です。

リスト3. 他のJSPページでタイム・スタンプをインクルードする

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!-- Begin footer section -->
<tr>
<td width="91" align="left" valign="top" bgcolor="#330066"> </td>
<td align="left" valign="top"> </td>
<td class="footer" align="left" valign="top">
<div align="center"><br>
© 2003 <a href="mailto:webmaster@newInstance.com">Brett McLaughlin</a><br>
Last Modified: <jsp:include page="timestamp.jsp" flush="true" />
</div></td>
<td align="left" valign="top"> </td>
<td width="141" align="right" valign="top" bgcolor="#330066"> </td>
</tr>
</table>
<!-- End footer section -->

リスト3は親JSPページ(この場合、footer.jsp )に相当して、インクルードされるtime-stampファイルではないことに気づかれたことでしょう。つまり、最終更新日のタイム・スタンプはtimestamp.jsp ではなくfooter.jsp から引き出されています。これは重要なことです。なぜならtime-stampファイルは静的ファイルであり、更新されないためです。したがって、最終更新日のクエリーは、footer.jsp のような動的に更新されるページにあるべきです。

さらに一歩先に進むには、様々なコンテンツ・ページからなりたっているサイトを考えてみてください。これらの各ページはそれぞれfooter.jsp ページをインクルードしており、footer.jsp ページはtimestamp.jsp をインクルードしています。最終更新日がトップページ(この場合コンテンツ・ページ)を照会すると、コンテンツが変更されてタイム・スタンプだけが変わっています。これがまさに望んでいた結果です。

タイム・スタンプのフォーマット

デフォルトのタイム・スタンプ出力-Fri Mar 28 10:30:10 CST 2003-はやや魅力に欠けています。幸運なことに、出力のフォーマットをコントロールするためにjava.text.SimpleDateFormatクラスを使用することができます。リスト4は、java.text.SimpleDateFormatを追加したtimestamp.jsp です。

リスト4. タイム・スタンプのフォーマット

1
2
3
4
5
6
7
8
<%
String jspPath = application.getRealPath(request.getServletPath());
java.io.File jspFile = new java.io.File(jspPath);
java.util.Date lastModified = new java.util.Date(jspFile.lastModified());
java.text.SimpleDateFormat fmt =
new java.text.SimpleDateFormat("MMM dd, yyyy, K:mm a (zz)");
out.println(fmt.format(lastModified));
%>

出力は、Mar 28, 2003, 10:30 AM (CST)となり、ユーザーにとってはるかに分かりやすいタイムスタンプになっています。フォーマットの他のオプションについては、Javadocでjava.textパッケージをお調べください。

WARの使用

WAR(Webアーカイブ)ファイルに、Webアプリケーションの一部としてJSPページをデプロイする時、わずかな制限に出くわすことになりますが、幸運にもかなり単純な回避策があります。サーブレット・コンテナーは、通常、WARファイルを一時ディレクトリへと展開し、その一時ディレクトリからコンテンツを供給することにより、WARファイルをデプロイしています。厄介なのは、JSPページに関連したFileオブジェクトを取得できない状況のときです。それどころか、一時ファイルへのハンドルを作成することだけはでき、Webコンテナーが再起動するたびにハンドルは再作成されるかもしれません。もし放っておけば、最終更新日は再起動のたびに変更されるでしょう。

回避策はデプロイされることになっているサーバー上でWARファイルを手動で展開させることです。この手動での展開の不便さは比較的小さいものです(特にWARファイルを展開するためのzipツールを使用できるので)。また、一度行えば、タイム・スタンプはここで記述されたように機能するでしょう。

結論

サイト上のコンテンツが新鮮でタイムリーであることでユーザーを安心させることに加えて、タイム・スタンプを追加することがWebサイトの独自化に向けての最初のステップです。Webページ(あるいはJSPページ)にタイム・スタンプを加えたら、選択されたページが更新される際ユーザーにEメールするプログラムをスクリプトするのは簡単なことです。

次回は、カスタム・タグ・ライブラリーの使用を取り入れたタイム・スタンプについて紹介します。それまでは、ここで学習したテクニックを試みるていただくことをお勧めいたします。それでは、次回をお楽しみに。


ダウンロード可能なリソース

このコンテンツのPDF


関連トピック

JSPテクノロジー初心者の方は、Brett McLaughlin氏のJSPベスト・プラクティス・シリーズのこれまでの記事をご覧ください。

JSP対応IDEの使用もご検討ください。これには、次のような選択肢があります。

JEdit

NetBeans

Eclipse

Noel Bergman氏の「JSP taglibs: Better usability by design」(developerWorks 、2001年12月) では、JSTLの誕生を可能にしたカスタム・タグ・ライブラリー機能が紹介されています。

JSPおよびJDBCテクノロジーによる動的Webベース・データ・アクセス」(developerWorks 、2001年9月)では、JSPページのコンテンツにアクセスし操作するための本質的なテクニックがいくつか紹介されています。

JSPテクノロジーを詳細にお知りになりたい方は、ぜひJSP仕様をお読みください。

Hans Bergsten氏の『JavaServer Pages』 (O'Reilly & Associates、2002年) は、JSPの学習に欠かせない優れた書籍です。

developerWorksのJava technology tutorials pageに無料のJavaテクノロジー・チュートリアルの詳細リストがあります。ぜひご覧下さい。

Java technology zone では、JSPテクノロジー関連の記事をはじめとして、developerWorks が提供するJavaプログラミングに関する多数の記事を参照することができます。

댓글