Problema SERVLET URGENTE!!!

jpgu7

Lanero Reconocido
20 Feb 2009
604
Hola.

Estoy trabajando con JSF y primefaces. El problema es que para cargar imágenes desde el servidor tuve que implementar un Servlet que me las sirviera el cual declare en el web.xml de la siguiente manera.

<servlet>
<servlet-name>imageServlet</servlet-name>
<servlet-class>com.buscapiezas.com.utils.common.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>imageServlet</servlet-name>
<url-pattern>/image/*</url-pattern>
</servlet-mapping>


El uso que hago del servlet es el siguiente:

<p:graphicImage value="image/#{b}" width="170" height="110" rendered="#{not empty b}"/>

sucede que este graphinImage está dentro de un foreach para pintar todas las imágenes de un arreglo, sin embargo desde el servlet sólo se ejecuta el primer llamado, es decir, el primer tag que llame al servlet queda con la imagen los demás no logran hacerlo.

He intentado todo lo humanamente posible pero no logro saber cuál es el problema. Agradezo si alguien me puede orientar. Les dejo el código del servlet:

public class ImageServlet extends HttpServlet{

private static final int DEFAULT_BUFFER_SIZE = 209715200;

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{

// Get requested image by path info.
String imagePath = request.getPathInfo();

File image = new File(imagePath);

// Check if file actually exists in filesystem.
if (!image.exists()) {
// Do your thing if the file appears to be non-existing.
// Throw an exception, or send 404, or show default/warning image, or just ignore it.
response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404.
return;
}

// Get content type by filename.
String contentType = getServletContext().getMimeType(image.getName());

// Check if file is actually an image (avoid download of other files by hackers!).
// For all content types, see: http://www.w3schools.com/media/media_mimeref.asp
if (contentType == null || !contentType.startsWith("image")) {
// Do your thing if the file appears not being a real image.
// Throw an exception, or send 404, or show default/warning image, or just ignore it.
response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404.
return;
}

// Init servlet response.
response.reset();
response.setBufferSize(DEFAULT_BUFFER_SIZE);
response.setContentType(contentType);
response.setHeader("Content-Length", String.valueOf(image.length()));
response.setHeader("Content-Disposition", "inline; filename=\"" + image.getName() + "\"");

// Prepare streams.
BufferedInputStream input = null;
BufferedOutputStream output = null;

try {
// Open streams.
input = new BufferedInputStream(new FileInputStream(image));
output = new BufferedOutputStream(response.getOutputStream());

// Write file contents to response.
byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}

input.close();
output.close();
} catch(Exception e){
e.printStackTrace();
}
}

}
 

Los últimos temas