プログラミング・ノウハウ集 〜 JSP 編 (1)

WEBページで 最終更新日を正確に取得するには

JSPを使用していないページで最終更新日を取得する場合、Java Script のdocumentオブジェクトに定義されている lastModifiedメソッドを使用できました。
しかし、これをJSP使用ページで使うと、正確に最終更新日を表示できないという不具合が発生します。(ページを表示した日時が表示されてしまう)
それを回避するために、苦し紛れの方策として考え出したのが以下のコードです。
その内容はいたって簡単で、自分自身のファイルの絶対パスを取得して、そのファイルの最終更新日時を取得するというものです。(そのまま、という意見もありますが・・・。)

サンプルプログラム

sample.jsp

<%@ page import="java.io.File" %>
<%@ page import="java.util.Calendar" %>
<%@ page import="java.util.GregorianCalendar" %>

<%@ page import="common.LastModified" %>

<%@ page contentType="text/html;charset=Shift_JIS" %>
<html>
<%
    String          strThisFile;
    File            thisFile;
    LastModified    lm;
%>
<body>

(中略)

<%
    // このファイルの更新時刻取得
    strThisFile = application.getRealPath( request.getRequestURI());
    thisFile = new File( strThisFile );

    // ファイル最新時刻取得クラスのインスタンスを生成する
    lm = new LastModified( thisFile );
%>
    <!-- ファイルの更新日時を表記する。(曜日は英語表記) -->
    Last update: <%= lm.getLastModifiedEng() %>
</body>
</html>


LastModified.java

import  java.io.File;
import  java.util.Date;
import  java.text.SimpleDateFormat;

/**
 *  ファイル最終更新日時取得クラス
 *  指定されたファイルの最終更新日時を取得します。
 *  また、最終更新日付を取得するメソッドを提供します。
 *  その際、曜日表記は日本語と英語を選べます。
 */
public class LastModified {

    /** 最終更新日時の日付部分書式 */
    SimpleDateFormat sdfDate = new SimpleDateFormat( "yyyy/MM/dd" ) ;

    /** 最終更新日時の曜日部分書式 */
    SimpleDateFormat sdfWeek = new SimpleDateFormat( "(EEE)" ) ;

    /** ファイルの最終更新日時 */
    Date    dtv ;

    /**
     *  最終更新日時コンストラクタ。
     *  最終更新日時はシステム日時とします。
     */
    public LastModified() {
        dtv = new Date() ;
    }

    /**
     *  最終更新日時コンストラクタ。
     *  最終更新日時は引数で指定されたファイルの最終更新日時とします。
     *  @param file : 最終更新日時を取得するファイルのオブジェクト
     */
    public LastModified( File file ) {
        if( file.exists() ) {
            dtv = new Date( file.lastModified() ) ;
        } else {
            dtv = new Date() ;
        }
    }

    /**
     *  最終更新日付取得メソッド。
     *  最終更新日付を取得します。その際、曜日表記は英語3文字とします。
     *  @return 最終更新日付。曜日は英語3文字。
     */
    public String getLastModifiedEng() {

        /* ファイルの更新日付 */
        String strDate ;

        /* ファイルの更新曜日 */
        String strWeek ;

        /* 内部で持っている最終更新日時を書式指定に従い変換する。 */
        strDate = sdfDate.format( dtv ) ;
        strWeek = sdfWeek.format( dtv ) ;

        /* 取得した曜日が日本語表記の場合、英語表記に変換する。 */
        if( "(日)".equals( strWeek ) ) {
            strWeek = "(Sun)" ;
        }
        if( "(月)".equals( strWeek ) ) {
            strWeek = "(Mon)" ;
        }
        if( "(火)".equals( strWeek ) ) {
            strWeek = "(Tue)" ;
        }
        if( "(水)".equals( strWeek ) ) {
            strWeek = "(Wed)" ;
        }
        if( "(木)".equals( strWeek ) ) {
            strWeek = "(Thu)" ;
        }
        if( "(金)".equals( strWeek ) ) {
            strWeek = "(Fri)" ;
        }
        if( "(土)".equals( strWeek ) ) {
            strWeek = "(Sat)" ;
        }

        strDate = sdfDate.format( dtv ) ;
        strWeek = sdfWeek.format( dtv ) ;

        return( strDate + strWeek ) ;
    }

    /**
     *  最終更新日付取得メソッド。
     *  最終更新日付を取得します。その際、曜日表記は日本語1文字とします。
     *  @return 最終更新日付。曜日は日本語1文字。
     */
    public String getLastModifiedJpn() {

        /* ファイルの更新日付 */
        String strDate ;

        /* ファイルの更新曜日 */
        String strWeek ;

        /* 内部で持っている最終更新日時を書式指定に従い変換する。 */
        strDate = sdfDate.format( dtv ) ;
        strWeek = sdfWeek.format( dtv ) ;

        /* 取得した曜日が英語表記の場合、日本語表記に変換する。 */
        if( "(Sun)".equals( strWeek ) ) {
            strWeek = "(日)" ;
        }
        if( "(Mon)".equals( strWeek ) ) {
            strWeek = "(月)" ;
        }
        if( "(Tue)".equals( strWeek ) ) {
            strWeek = "(火)" ;
        }
        if( "(Wed)".equals( strWeek ) ) {
            strWeek = "(水)" ;
        }
        if( "(Thu)".equals( strWeek ) ) {
            strWeek = "(木)" ;
        }
        if( "(Fri)".equals( strWeek ) ) {
            strWeek = "(金)" ;
        }
        if( "(Sat)".equals( strWeek ) ) {
            strWeek = "(土)" ;
        }

        return( strDate + strWeek ) ;
    }
}


Back「プログラミング・ノウハウ集」に戻る
Topトップページに戻る