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);
- }
- }
}