JavaA2Z

KAB-studio > プログラミング > JavaA2Z > キャッシュとは

キャッシュ

日本語 貯蔵
英語 cache
ふりがな きゃっしゅ
フリガナ キャッシュ

解説

ホームページクライアント側に保存したファイル、もしくはそのシステム。
Webブラウザは、サーバーから取得した「ホームページ」という情報をファイルとして保存する。このファイルを「キャッシュ」と呼ぶ。
キャッシュを保存することで、次回の読み込みはこのキャッシュと日付を比較し、古ければキャッシュを表示する。
ただし、リロードをった場合にはキャッシュを捨て新しく読み込む。
 
Webアプリケーションでは、キャッシュはしばしば邪魔となる。
キャッシュが残ることで「古い情報」が表示されることになる。「戻るボタン」での移動や「URL直打ち」による読み込みでキャッシュが読み込まれ、それにより古い情報が表示されてしまう可能性があり、整合性が取れなくなってエラーが発生する可能性がある。
そのため、サーブレットによりキャッシュを無効にすることもある。
サーブレットでのキャッシュの無効化は、HttpServletResponseインターフェイスのsetHeader()メソッド及びaddHeader()メソッドを用いて、レスポンスヘッダーに「Cache-Control」及び「Pragma」を適切な値と共に設定する必要がある。
 
ただし、キャッシュは必ずしもWebブラウザの時点で残されるわけではない。
ホームページを提供するWebサーバーや、ホームページ取得時に通過するプロキシーサーバー等にキャッシュが保存されている場合もあり、その場合にはキャッシュを無効化できない場合もある。
また逆に、Webブラウザの設定によってはキャッシュを残さないようにすることもできるため、必ずキャッシュが残る、という前提で作成するのも問題となる。
そのため、キャッシュが残される・残されないということを厳密に必要とすることは避けた方がいいだろう。

参考サイト


(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// webapps/sample-servlet/WEB-INF/src/SampleServlet.java
// http://localhost:8080/sample-servlet/servlet/SampleServlet でアクセスできます。
import java.util.Calendar;
import java.text.SimpleDateFormat;
import java.io.PrintWriter;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
*   サーブレットのテスト。
*/
public class SampleServlet extends HttpServlet
{
    public void doGet( HttpServletRequest request, HttpServletResponse response ) throws IOException, ServletException
    {
        // Content-Typeをセット。
        response.setContentType( "text/html;charset=Windows-31J" );

        // レスポンスヘッダーでキャッシュを無効にします。
        response.setHeader( "Cache-Control""no-store, no-cache, must-revalidate" );
        response.addHeader( "Cache-Control""post-check=0, pre-check=0" );
        response.setHeader( "Pragma""no-cache" ); 

        // HTML出力用のPrintWriterを取得します。
        PrintWriter out = response.getWriter();

        // 出力フォーマット。
        // 「年/月/日 時:分:秒」と出力します。
        String format = "yyyy/MM/dd HH:mm:ss";
        // 現在日時を格納したCalendarクラスのインスタンスを取得します。
        Calendar calendar = Calendar.getInstance();
        // 出力します。
        String nowDate = new SimpleDateFormat( format ).format( calendar.getTime() );

        // HTMLを出力します。
        out.println( "<HTML>" );
        out.println( "<HEAD>" );
        out.println( "<TITLE>サーブレットのテスト</TITLE>" );
        out.println( "</HEAD>" );
        out.println( "<BODY>" );
        out.println( nowDate );
        out.println( "</BODY>" );
        out.println( "</HTML>" );
        // 2005/10/07 22:01:12 
        // ...みたいに出力されます。
        // キャッシュが有効な場合、Internet Explorerの「アドレス」欄で
        // リターンしても更新されませんが、キャッシュが無効な場合には
        // リロードされて日時が更新されます。
    }
}
// webapps/sample-servlet/WEB-INF/src/SampleServlet.java
// http://localhost:8080/sample-servlet/servlet/SampleServlet でアクセスできます。
import java.util.Calendar;
import java.text.SimpleDateFormat;
import java.io.PrintWriter;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
*   サーブレットのテスト。
*/
public class SampleServlet extends HttpServlet
{
    public void doGet( HttpServletRequest request, HttpServletResponse response ) throws IOException, ServletException
    {
        // Content-Typeをセット。
        response.setContentType( "text/html;charset=Windows-31J" );

        // レスポンスヘッダーでキャッシュを無効にします。
        response.setHeader( "Cache-Control", "no-store, no-cache, must-revalidate" );
        response.addHeader( "Cache-Control", "post-check=0, pre-check=0" );
        response.setHeader( "Pragma", "no-cache" ); 

        // HTML出力用のPrintWriterを取得します。
        PrintWriter out = response.getWriter();

        // 出力フォーマット。
        // 「年/月/日 時:分:秒」と出力します。
        String format = "yyyy/MM/dd HH:mm:ss";
        // 現在日時を格納したCalendarクラスのインスタンスを取得します。
        Calendar calendar = Calendar.getInstance();
        // 出力します。
        String nowDate = new SimpleDateFormat( format ).format( calendar.getTime() );

        // HTMLを出力します。
        out.println( "<HTML>" );
        out.println( "<HEAD>" );
        out.println( "<TITLE>サーブレットのテスト</TITLE>" );
        out.println( "</HEAD>" );
        out.println( "<BODY>" );
        out.println( nowDate );
        out.println( "</BODY>" );
        out.println( "</HTML>" );
        // 2005/10/07 22:01:12 
        // ...みたいに出力されます。
        // キャッシュが有効な場合、Internet Explorerの「アドレス」欄で
        // リターンしても更新されませんが、キャッシュが無効な場合には
        // リロードされて日時が更新されます。
    }
}

この単語を含むページ

「みだし」に含まれているページ

「解説」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/10/07
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。