Image 未在Tomcat中调用Servlet

Image 未在Tomcat中调用Servlet,image,mongodb,jsf,tomcat,servlets,Image,Mongodb,Jsf,Tomcat,Servlets,我有一个简单的图像servlet来提供存储在Mongodb GridFS中的图像。然而,我的servlet似乎没有被调用 下面您可以看到my web.xml的一部分,以及浏览器中的xhtml和html源代码。jsf代码似乎工作正常,并且输入了正确的id。从我的日志来看,在显示页面时,似乎没有调用servlet中的doGet方法 如果您有任何关于为什么不这样做的想法,我们将不胜感激 以下是我的web.xml片段: <servlet> <servlet-name>im

我有一个简单的图像servlet来提供存储在Mongodb GridFS中的图像。然而,我的servlet似乎没有被调用

下面您可以看到my web.xml的一部分,以及浏览器中的xhtml和html源代码。jsf代码似乎工作正常,并且输入了正确的id。从我的日志来看,在显示页面时,似乎没有调用servlet中的doGet方法

如果您有任何关于为什么不这样做的想法,我们将不胜感激

以下是我的web.xml片段:

<servlet>
    <servlet-name>imageServlet</servlet-name>
    <servlet-class>com.iLearn.view.servlet.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>imageServlet</servlet-name>
    <url-pattern>/image/*</url-pattern>
</servlet-mapping>
中的相对路径是相对于当前请求URL的。因此,如果当前请求的页面本身位于这样一个文件夹中,那么图像将从中下载,而您希望从上下文根中引用它,如中所示

/
作为URL前缀,使其成为绝对路径,
将呈现相对于上下文根的URL

<h:graphicImage value="/image?id=#{res.idAsString}" />

(在检查参数本身的其他地方也可以这样做)

使用firebug或类似的方法来检查实际发出的http请求,我怀疑web.xml中的url模式是错误的。您正在查找的/images/*-与
不匹配的“image?id=50add3b09383f7b98d0f6e66”
您的html需要是
“images/image?id=50add3b09383f7b98d0f6e66”
谢谢-这已修复。关于IMAThank-这已修复。关于image==null执行路径,我还没有决定如何处理它。如果映像为null,则数据库中可能存在数据完整性问题,因此将其作为404错误发送给用户没有多大意义。我想我会抛出一个数据异常,但是我需要处理它,所以我仍然需要处理这条路径。不过,感谢您指出这一点——有时您会推迟决策,然后忘记,错误情况会隐藏在日志中。我不妨现在抛出这个异常,然后找出以后在哪里处理它。
<table style="width:100px; height:150 px;">
<tbody>
<tr>
<td><img src="image?id=50ad879f93839043ffc4f156" style="width:100px; height:100px;" /></td>
</tr>
<tr>
<td>headshot.JPG</td>
</tr>
<tr>
<td>image/jpeg</td>
</tr>
<tr>
<td></td>
</tr>
</tbody>
</table>
<table style="width:100px; height:150 px;">
<tbody>
<tr>
<td><img src="image?id=50add3b09383f7b98d0f6e66" style="width:100px; height:100px;" /></td>
</tr>
<tr>
<td>workon.JPG</td>
</tr>
<tr>
<td>image/jpeg</td>
</tr>
<tr>
<td></td>
</tr>
</tbody>
</table>
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String idString = request.getParameter("id");
getLogger().debug("ImageServlet got request to serve up image id = " + idString);
    if((idString == null) || (idString.isEmpty())) {
        getLogger().debug("Image id was null, so image not displayed");
        return;
    }
    ObjectId id = new ObjectId(idString);
    Resource image = getResourceRecordDao().load(id);
    if(image == null) {
        getLogger().warn("Could not find image with id: " + id);
        return;
    }
    response.reset();
    response.setContentType(image.getMimeType());
    response.setHeader("Content-Length", String.valueOf(image.getSize()));
    response.setHeader("Content-Disposition", "inline; filename=\"" + image.getName() + "\"");
    image.render(response.getOutputStream());
   }
<h:graphicImage value="/image?id=#{res.idAsString}" />
if (image == null) {
    getLogger().warn("Could not find image with id: " + id);
    response.sendError(HttpServletResponse.SC_NOT_FOUND);
    return;
}