0

次の構造の 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 内に保存され、サーブレットを使用して取得するため、この修正を私の問題に適用することはできません。

このキャッシングの問題を解決することは可能ですか (キャッシングの問題の場合)?

4

2 に答える 2

0

sashok_bg の提案に基づいて、広く提案されているこの修正を再度適用しようとしました。元の質問で述べたように、画像は WEB-INF ディレクトリ内に保存されており、「」タグを使用して JSP ページからアクセスすることはできません。最初に、リクエスト Dispatcher がリクエストを転送しようとしていた場所を操作して、サーブレットに修正を適用しようとしました。うまくいきませんでした...

次に、実行時に JSP ページのソースを調べたところ、次のことがわかりました。

<img style="-webkit-user-select: none" src="http://localhost:8084/simah/view?media=logo">

このタグは、他のいくつかの要素に沿って要素内に配置されました。これにより、iframe ソース自体に修正を適用することになりました。徹底的な観察の後、問題は解決したようです。

<iframe src="<%="view?media=logo&time="+Calendar.getInstance().getTimeInMillis()%>" ></iframe>
于 2013-07-25T17:26:51.540 に答える