2013-04-14 35 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