Servlet/JSP
Servlet/JSP
Java2 SE 5.0 API
Java2 SE 1.4 API
Java2 EE API
Struts 1.0.2
MSDN2 Library
MySQL 5.1
MySQL 4.1
HTMLリファレンス
CSSリファレンス
JavaScript
基本カラーチャート
カレンダー
 最新PG・講座情報
 最新ニュース
 電子辞書・辞典
ご意見・ご要望はこちらまで

連載

Servlet/JSP

更新日付の表示


1.状況

 自宅サーバに移行する前は、全てがHTML中心でCGIを呼ぶ形でしたから、更新日付が必要なのはクライアント側のHTMLでした。 クライアント側の最終更新日はJavaScript文によるDocument.lastModifiedで得られた日付を表示していました。 これは誰でも頻繁に利用している方法だと思います。
 今回JSPを中心にしたため、この方法では全く意味のないものになってしまいました。得られるものは常に立ち上げ日付で、JSPがサーブレットとしてロードされた日付となってしまいます。

2.getLastModified()の利用

 Webサーバを常時稼動させておくならば、特定のサーブレットでgetLastModified()をオーバライドし、 そのメソッドで返す日付をinit()メソッドで現在日を設定しておけばいいことになります。
 何か変更があればinit()メソッドを通り新しい日付を返し、その後変更がなければブラウザはキャッシュにあるページ(古い日付)を表示するからです。
 このサーブレットを更新日を設定したいJSPの中にincludeしてしまえばJSPが変わった時点で新しい日付を返してくれる・・・と思ったのですが、うまくいきませんでした。
 やはり毎日サーバを止める場合は前と同じ、常に立ち上げ日付の表示となってしまいました。

3.ファイル自体の更新日の利用

 最後に苦肉の策としてファイル自体の更新日を拾う方法があります。ページの最終更新日を表示したいのですから別にこれでかまわないのですが、 サーバの負荷などを考慮した場合はおかしな方法かもしれません。
 今のところこれしか考え付きませんので、何かいい方法があれば誰か教えて下さい。取りあえず次にJSPの内容を示しておきます。 表示結果は各ページ(Index)のインデックス部分の左上です。

 
<%@ page import="java.io.*,java.util.*" %>
<%@ page import="java.util.Date,java.util.GregorianCalendar" %>
<%!
 String[] dow={"日","月","火","水","木","金","土"};
 //---- 文字コード変換 (includeすると化けるため) ---------------------------
 private String code(String str) {
   try {
     str = new String(str.getBytes("8859_1"),"SJIS");
   } catch (Exception e) {}
     return str;
 }
%>
<%
 //---- 最終更新日 yyyy/mm/dd (曜日) ---------------------------------------
 int tempYear; // 年
 int tempMonth; // 月
 int tempDay; // 日
 int tempDayOfWeek; // 曜日

 File file = new File(request.getParameter("file")); // ファイルの設定
 long last = file.lastModified(); // 最終更新日の取得
 Calendar calendar = new GregorianCalendar();
 calendar.setTime(new Date(last)); // カレンダー形式に変換
 tempYear=calendar.get(Calendar.YEAR); // 年
 tempMonth=calendar.get(Calendar.MONTH)+1; // 月
 tempDay=calendar.get(Calendar.DATE); // 日
 tempDayOfWeek=calendar.get(Calendar.DAY_OF_WEEK); // 曜日
 String ld =tempYear+"/"+tempMonth+"/"+tempDay+" ("+
      code(dow[tempDayOfWeek-1])+")";
 //---- 表示 ---------------------------------------------------------------
 out.println("<TR><TD align='center' bgcolor='#a0a0a0'>");
 out.println(" <FONT color=white><I>");
 out.println( code("最終更新日")+"<BR>"+ ld);
 out.println(" </I></FONT></TD></TR>");
%>
 ファイルの更新日付を表示するJSP(メインのTABLEの一部) (lastmodify.jsp)
 
 
<TABLE>
   ・・・

<!---- 最終更新日 ------------------------------------------------->
<jsp:include page = "lastmodify.jsp" flush="true">
<jsp:param name="file" value="d:\www\xxxx\xxxx\index.jsp" />
</jsp:include>
   ・・・
 更新日を表示するメインJSPの一部 (index.jsp)
 

Top
Copyright© 2003-2007 FumikiChan All Rights Reserved.
http://www.fumikichan.net/