diff -r 4964cf581166 -r 0efefbf5f8b6 java/nekurak.net-web/src/java/cz/frantovo/nekurak/servlet/Fotky.java --- a/java/nekurak.net-web/src/java/cz/frantovo/nekurak/servlet/Fotky.java Tue Mar 16 13:32:31 2010 +0100 +++ b/java/nekurak.net-web/src/java/cz/frantovo/nekurak/servlet/Fotky.java Sun Jun 20 14:46:47 2010 +0200 @@ -37,91 +37,91 @@ */ public class Fotky extends HttpServlet { - /** Název inicializačního parametru */ - private static final String INIT_ADRESAR = "adresar"; - /** Název podadresáře obsahujícího fotku v plném rozlišení */ - public static final String PODADRESAR_ORIGINAL = "original"; - /** Název podadresáře obsahujícího výchozí náhled fotky */ - public static final String PODADRESAR_NAHLED = "nahled"; - public static final String PRIPONA = "jpg"; - private static final String LOMITKO = File.separator; - /** Regulární výraz */ - private static final String VZOR_CESTY = "^" + LOMITKO + "(" + PODADRESAR_ORIGINAL + "|" + PODADRESAR_NAHLED + ")" + LOMITKO + "\\d+\\." + PRIPONA + "$"; - private static final String MIME_TYP = "image/jpeg"; - private File adresar; - private static final Logger log = Logger.getLogger(Fotky.class.getSimpleName()); + /** Název inicializačního parametru */ + private static final String INIT_ADRESAR = "adresar"; + /** Název podadresáře obsahujícího fotku v plném rozlišení */ + public static final String PODADRESAR_ORIGINAL = "original"; + /** Název podadresáře obsahujícího výchozí náhled fotky */ + public static final String PODADRESAR_NAHLED = "nahled"; + public static final String PRIPONA = "jpg"; + private static final String LOMITKO = File.separator; + /** Regulární výraz */ + private static final String VZOR_CESTY = "^" + LOMITKO + "(" + PODADRESAR_ORIGINAL + "|" + PODADRESAR_NAHLED + ")" + LOMITKO + "\\d+\\." + PRIPONA + "$"; + private static final String MIME_TYP = "image/jpeg"; + private File adresar; + private static final Logger log = Logger.getLogger(Fotky.class.getSimpleName()); - @Override - public void init() throws ServletException { - super.init(); - String initAdresar = getServletConfig().getInitParameter(INIT_ADRESAR); - adresar = new File(initAdresar); - if (adresar.isDirectory()) { - log.log(Level.INFO, "Servlet „Fotka“ byl úspěšně inicializován."); - log.log(Level.INFO, "Adresář s fotkami: " + initAdresar); - log.log(Level.INFO, "RegExp cesty: " + VZOR_CESTY); - } else { - throw new ServletException("Servlet „Fotka“ se nepodařilo inicializovat. Cesta: " + initAdresar); + @Override + public void init() throws ServletException { + super.init(); + String initAdresar = getServletConfig().getInitParameter(INIT_ADRESAR); + adresar = new File(initAdresar); + if (adresar.isDirectory()) { + log.log(Level.INFO, "Servlet „Fotka“ byl úspěšně inicializován."); + log.log(Level.INFO, "Adresář s fotkami: {0}", initAdresar); + log.log(Level.INFO, "RegExp cesty: {0}", VZOR_CESTY); + } else { + throw new ServletException("Servlet „Fotka“ se nepodařilo inicializovat. Cesta: " + initAdresar); + } } - } - /** - * @param pozadavek pouze GET (není důvod podporovat POST) - * @param odpoved odešleme fotku s MIME typem podle konstanty, délkou a datem podle souboru. - * @throws ServletException pokud je požadovaná cesta chybná (nevyhovuje vzoru) - * @throws IOException - */ - @Override - protected void doGet(HttpServletRequest pozadavek, HttpServletResponse odpoved) throws ServletException, IOException { + /** + * @param pozadavek pouze GET (není důvod podporovat POST) + * @param odpoved odešleme fotku s MIME typem podle konstanty, délkou a datem podle souboru. + * @throws ServletException pokud je požadovaná cesta chybná (nevyhovuje vzoru) + * @throws IOException + */ + @Override + protected void doGet(HttpServletRequest pozadavek, HttpServletResponse odpoved) throws ServletException, IOException { - String cesta = zkontrolujParametr(pozadavek.getPathInfo()); - File soubor = new File(adresar, cesta); + String cesta = zkontrolujParametr(pozadavek.getPathInfo()); + File soubor = new File(adresar, cesta); - if (soubor.isFile() && soubor.canRead()) { + if (soubor.isFile() && soubor.canRead()) { - if (soubor.lastModified() > pozadavek.getDateHeader("If-Modified-Since")) { - /** Soubor se změnil nebo ho klient ještě nemá načtený. */ - odpoved.setContentType(MIME_TYP); - odpoved.setContentLength((int) soubor.length()); - odpoved.setDateHeader("Last-Modified", soubor.lastModified()); + if (soubor.lastModified() > pozadavek.getDateHeader("If-Modified-Since")) { + /** Soubor se změnil nebo ho klient ještě nemá načtený. */ + odpoved.setContentType(MIME_TYP); + odpoved.setContentLength((int) soubor.length()); + odpoved.setDateHeader("Last-Modified", soubor.lastModified()); - ServletOutputStream vystup = odpoved.getOutputStream(); - InputStream vstup = new FileInputStream(soubor); + ServletOutputStream vystup = odpoved.getOutputStream(); + InputStream vstup = new FileInputStream(soubor); - try { - byte[] zasobnik = new byte[1024]; - int bajtuNacteno; - while ((bajtuNacteno = vstup.read(zasobnik)) != -1) { - vystup.write(zasobnik, 0, bajtuNacteno); - } - } catch (Exception e) { - throw new ServletException("Chyba při odesílání obrázku klientovi.", e); - } finally { - vstup.close(); - vystup.close(); + try { + byte[] zasobnik = new byte[1024]; + int bajtuNacteno; + while ((bajtuNacteno = vstup.read(zasobnik)) != -1) { + vystup.write(zasobnik, 0, bajtuNacteno); + } + } catch (Exception e) { + throw new ServletException("Chyba při odesílání obrázku klientovi.", e); + } finally { + vstup.close(); + vystup.close(); + } + } else { + /** Soubor se od posledního načtení klientem nezměnil → není potřeba ho posílat znova. */ + odpoved.setStatus(HttpServletResponse.SC_NOT_MODIFIED); + } + + } else { + /** Neexistující nebo nečitelný soubor → HTTP 404 chyba */ + odpoved.sendError(HttpServletResponse.SC_NOT_FOUND); } - } else { - /** Soubor se od posledního načtení klientem nezměnil → není potřeba ho posílat znova. */ - odpoved.setStatus(HttpServletResponse.SC_NOT_MODIFIED); - } + } - } else { - /** Neexistující nebo nečitelný soubor → HTTP 404 chyba */ - odpoved.sendError(HttpServletResponse.SC_NOT_FOUND); + /** + * @param cesta cesta požadovaná klientem: request.getPathInfo() + * @throws ServletException pokud cesta nevyhovuje vzoru + */ + private static String zkontrolujParametr(String cesta) throws ServletException { + if (Pattern.matches(VZOR_CESTY, cesta)) { + /** cesta je v pořádku → pokračujeme */ + return cesta; + } else { + /** Chybná cesta → HTTP 500 chyba */ + throw new ServletException("Chybná cesta k obrázku: " + cesta); + } } - } - - /** - * @param cesta cesta požadovaná klientem: request.getPathInfo() - * @throws ServletException pokud cesta nevyhovuje vzoru - */ - private static String zkontrolujParametr(String cesta) throws ServletException { - if (Pattern.matches(VZOR_CESTY, cesta)) { - /** cesta je v pořádku → pokračujeme */ - return cesta; - } else { - /** Chybná cesta → HTTP 500 chyba */ - throw new ServletException("Chybná cesta k obrázku: " + cesta); - } - } }