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




