編集:
次の HTML コードを含むページがあります。
<img src="/static/ads/1111.png"> <!-- 1 -->
<img src="/static/2222.png"> <!-- 2 -->
ページを読み込むと、画像 No. 1 が表示されません。画像No.2が表示されます。
Chrome DevTools のネットワーク タブでイメージ リクエストを確認すると、リクエストは常に「保留中」です。
さらに奇妙なことに、 のように画像番号 1 に直接アクセスするhttp://localhost:8080/static/ads/1111.png
と、画像が実際に読み込まれます。
この問題は Google Chrome にのみ影響するようです。Firefox でテストしたところ、そこで動作します。
Chrome の場合、コンソール エラーが発生します。
Port error: Could not establish connection. Receiving end does not exist.
画像No.1のリクエストヘッダーを見比べてみると
Cache-Control:no-cache
Pragma:no-cache
Referer:http://localhost:8181/index.html
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31
vs 画像No.2
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Host:localhost:8181
Pragma:no-cache
Referer:http://localhost:8181/index.html
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31
大きな違いがあります。何が起こっているか知っている人はいますか?
詳しくは
BalusC のFileServletを使用して、web-app ディレクトリの外にあるファイルを提供しています。
私の Web アプリは、フレームワークとして Struts2 を使用しています。
私のweb.xml:
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>fileServlet</servlet-name>
<servlet-class>com.FileServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>fileServlet</servlet-name>
<url-pattern>/static/*</url-pattern>
</servlet-mapping>
次のように struts.xml でこのパスを除外しました。
<constant name="struts.action.excludePattern" value="/static/.*"/>