Emetti un file immagine da un servlet

Come servire un’immagine, memorizzata sul mio disco rigido, in un servlet?
Per esempio:
Ho un’immagine memorizzata nel percorso 'Images/button.png' e voglio servire questo in un servlet con il file/button.png URL file/button.png .

  • mappare un servlet al /file url-pattern del /file
  • leggi il file dal disco
  • scrivilo su response.getOutputStream()
  • imposta l’intestazione Content-Type su image/png (se è solo pngs)

Ecco il codice di lavoro:

  public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { ServletContext cntx= req.getServletContext(); // Get the absolute path of the image String filename = cntx.getRealPath("Images/button.png"); // retrieve mimeType dynamically String mime = cntx.getMimeType(filename); if (mime == null) { resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); return; } resp.setContentType(mime); File file = new File(filename); resp.setContentLength((int)file.length()); FileInputStream in = new FileInputStream(file); OutputStream out = resp.getOutputStream(); // Copy the contents of the file to the output stream byte[] buf = new byte[1024]; int count = 0; while ((count = in.read(buf)) >= 0) { out.write(buf, 0, count); } out.close(); in.close(); } 

Ecco un altro modo molto semplice.

 File file = new File("imageman.png"); BufferedImage image = ImageIO.read(file); ImageIO.write(image, "PNG", resp.getOutputStream());