2013-04-14 33 views
1

我使用下面的代碼來從我的服務器圖片:JSP - 404處理的圖像

<a href="#"> 
    <img src="<% 
     if(user.getImageURL()!=null){ 
      out.print(user.getImageURL); 
     }else{ 
      out.print("images/no-profile-pic-small.jpg"); 
     }%>" /> 
</a> 

上面的代碼處理的情況下,當IMAGEURL爲空,但我要如何處理時的情況imageURL返回一個合適的URL,但該圖像在服務器上找不到,即404 Not Found?

編輯:圖像位於不同的服務器上。

+0

如果你有一個正確的圖片URL,那麼怎麼會出現「* 404 Not Found *」?但由於許可因素,可能是「*拒絕訪問*」的情況。 – Lion

+0

網址存儲在數據庫中。但圖像可能會或可能不會呈現,因爲它是一種外部資源。數千人中只有少數這樣的情況,但我仍想處理它們。 – soundswaste

+1

由於瀏覽器試圖獲取圖像,您無法在服務器端知道這一點。要麼嘗試在服務器端獲取圖像以確定它是否存在(不推薦),要麼在客戶端執行一些JS/CSS魔術。 或者您在用戶提供URL時檢查它。這可能仍然會導致404天后/幾周,但可惜... – skirsch

回答

2

目前,您沒有對JSP中的路徑進行任何檢查,只是將路徑放在HTML中(如果存在)。這意味着你不知道路徑是否存在,直到HTTP請求通過圖像。您將兩個主要的選項:

檢查是否有在包括它之前,你的JSP代碼路徑的文件,否則退回到您的佔位符:

<% 
    String userImagePath = user.getImageURL(); 
    File userImage= new File(userImagePath); 
    if(!userImage.exists()){ 
     userImagePath = "fallBackImagePath.png"; 
    } 
%> 

<img src="<%= userImagePath %>"/> 

或者讓你的HTML處理非顯示圖像,例如:

<img src="non-existent.png" class="fallBackBackground"/> 

<style> 
    .fallBackBackground { 
     background: url(./placeholderImage.png); 
    } 
</style> 

這可能會導致您提供不需要的後備圖像,但它依賴於圖像大小相同。

+0

這是一個更好的方法比檢查它使用JavaScript? – soundswaste

+0

通過JSP進行檢查會將努力轉移到服務器端,這將使您在客戶端的性能得到增加。通常認爲在後端進行這項工作更可取,但這取決於您的網站! – anotherdave

+0

噢,如果這張圖片位於不同的服務器上,這個功能會不會起作用?說..從Facebook取得?我似乎正在爲加載正常的圖像獲得'錯誤'。 – soundswaste

0

我使用jQuery和解決了這個問題onerror屬性:

我的服務器端代碼現在是:

<a href="#"> 
    <img src="<% 
     if(user.getImageURL()!=null){ 
      out.print(user.getImageURL); 
     }else{ 
      out.print("images/no-profile-pic-small.jpg"); 
     }%>" onerror="profilePicNotFound(this);" 
    /> 
</a> 

和一個小的jQuery功能:

function profilePicNotFound(image){ 
    image.src='images/no-profile-pic-small.jpg'; 
} 

這很好地工作如果圖像位於不同的服務器上。更多here