我有一個簡單的圖像servlet來提供我在Mongodb GridFS中存儲的圖像。但是,我的servlet似乎沒有被調用。未在Tomcat中調用Servlet
下面您可以看到我的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>
下面是一個XHTML文件片段:
<h:panelGrid id="resourcePanel" columns="4">
<a4j:repeat value="#{resourceUpload.resources}" var="res"
rowKeyVar="rowKey">
<h:panelGrid columns="1" style="width:100px; height:150 px;">
<h:graphicImage
value="image?id=#{res.idAsString}"
style="width:100px; height:100px;"
/>
<h:outputText value="#{res.name}" />
<h:outputText value="#{res.mimeType}" />
<h:outputText value="#{res.bytes}" />
</h:panelGrid>
</a4j:repeat>
</h:panelGrid>
這是我從我的瀏覽器中獲取源:
<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>
這是我的servlet中的doGet方法。由於它沒有打到第一個日誌語句,所以我很確定它永遠不會進入這個方法。爲什麼不??
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());
}
使用Firebug的或類似的檢查正在作出實際的http請求的東西,我懷疑網址web.xml中的模式是錯誤的。你正在尋找/ images/* - 那將不匹配'「image?id = 50add3b09383f7b98d0f6e66」'你的html需要''images/image?id = 50add3b09383f7b98d0f6e66「' –
謝謝 - 修正了它 – Ramesh