001/* 002 * (C) Copyright 2006-2007 Nuxeo SAS <http://nuxeo.com> and others 003 * 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the Eclipse Public License v1.0 006 * which accompanies this distribution, and is available at 007 * http://www.eclipse.org/legal/epl-v10.html 008 * 009 * Contributors: 010 * Jean-Marc Orliaguet, Chalmers 011 * 012 * $Id$ 013 */ 014 015package org.nuxeo.theme.html.servlets; 016 017import java.io.IOException; 018import java.io.OutputStream; 019import java.io.Serializable; 020 021import javax.servlet.http.HttpServlet; 022import javax.servlet.http.HttpServletRequest; 023import javax.servlet.http.HttpServletResponse; 024 025import org.apache.commons.logging.Log; 026import org.apache.commons.logging.LogFactory; 027import org.nuxeo.common.utils.FileUtils; 028import org.nuxeo.ecm.core.io.download.BufferingServletOutputStream; 029import org.nuxeo.theme.Manager; 030import org.nuxeo.theme.html.Utils; 031import org.nuxeo.theme.themes.ThemeException; 032 033public final class Images extends HttpServlet implements Serializable { 034 035 private static final Log log = LogFactory.getLog(Images.class); 036 037 private static final long serialVersionUID = 1L; 038 039 @Override 040 protected void doGet(final HttpServletRequest request, final HttpServletResponse response) throws IOException { 041 doPost(request, response); 042 } 043 044 @Override 045 protected void doPost(final HttpServletRequest request, final HttpServletResponse response) throws IOException { 046 047 final String path = request.getPathInfo().substring(1); 048 byte[] data = null; 049 try { 050 data = Manager.getThemeManager().getImageResource(path); 051 } catch (ThemeException e) { 052 log.error("Image not found: " + path); 053 } 054 if (data != null) { 055 OutputStream os = response.getOutputStream(); 056 BufferingServletOutputStream.stopBuffering(os); 057 String ext = FileUtils.getFileExtension(path); 058 String mimeType = Utils.getImageMimeType(ext); 059 response.addHeader("content-type", mimeType); 060 061 // Cache headers 062 final String lifetime = "604800"; // 1 week 063 final long now = System.currentTimeMillis(); 064 response.addHeader("Cache-Control", "max-age=" + lifetime); 065 response.addHeader("Cache-Control", "must-revalidate"); 066 response.setDateHeader("Last-Modified", now); 067 response.setDateHeader("Expires", now + new Long(lifetime) * 1000L); 068 069 os.write(data); 070 os.close(); 071 } 072 } 073}