次の構造の JSP ページがあります。
<input type='file' id='logo' />
<iframe src='view?media=logo'></iframe>
ここでやろうとしているのは、ユーザーに画像を選択させてから、サーバーの「WEB-INF」内のディレクトリにアップロードすることです。この意味のサーバー側を正常に実装しました。つまり、新しいイメージが宛先フォルダーにコピーされたことを確認できます。ただし、クライアントに画像を表示できる必要があります。画像は「WEB-INF」フォルダーにあるため、「img」要素を使用して「src」属性を操作することはできません。そこで、URL パターン 'view' を使用して別のサーブレットを実装しました。このサーブレットは、クライアントが要求しているメディア (この場合は「ロゴ」) を受け取り、次のコードを使用して要求されたリソースのページに転送します。
String media = request.getParameter("media");
String location = FileManager.getView(media);
getServletContext().getRequestDispatcher(location).forward(request, response);
したがって、すべてが計画どおりに進むと、最近アップロードされた画像が iframe 内に表示されるはずです。
問題は、リクエストに関連付けられた古い画像が iframe に表示され続けることですが、画像を右クリックして [新しいウィンドウで開く] を選択すると、修正された画像が表示されます。
私はいくつかの調査を行い、この問題はブラウザが画像をキャッシュすることに何らかの形で関連していることを発見し、解決策は「src」属性の最後に乱数を追加することを提案しました:
<img src='logo.png?random=klafjeiej3qk213 />
画像は WEB-INF 内に保存され、サーブレットを使用して取得するため、この修正を私の問題に適用することはできません。
このキャッシングの問題を解決することは可能ですか (キャッシングの問題の場合)?