01 import java.awt.*; 
02 import java.awt.image.*; 
03 import java.io.*; 
04 import javax.servlet.*; 
05 import javax.servlet.http.*; 
06 
07 import Acme.JPM.Encoders.*; 
08 
09 public class GreyScaleServletCached extends HttpServlet 
10 
11   // vytvoríme hash tabuľku
12   Hashtable gifs = new Hashtable();
13 
14   public void doGet (HttpServletRequest req, HttpServletResponse res
15                                  throws ServletException, IOException 
16     res.setContentType("image/gif")
17     ServletOutputStream out = res.getOutputStream()
18 
19     // získame info o umiestnení obrázku 
20     String source = req.getPathTranslated()
21     if (source == null) { 
22      throw new ServletException("Chyba v umiestnení obrázku")
23     
24     
25     // ak skonvertovaný obrázok existuje, pošleme ho
26     if (gifs.containsKey(source)) {
27     ByteArrayOutputStream baos = (ByteArrayOutputStreamgifs.get(source);
28     baos.writeTo(out);
29       return;
30     }
31     
32     /* vytvoríme viacnásobne použiteľný frame, pričom 
33     tentokrát nepotrebujeme volať metódu addNotify() */ 
34     Frame frame = new Frame();
35     
36     // natiahneme obrázok do pamäte 
37     Image image = Toolkit.getDefaultToolkit().getImage(source)
38     MediaTracker mt = new MediaTracker(frame)
39     mt.addImage(image, 0)
40     try 
41      mt.waitForAll()
42     
43     catch (InterruptedException e) { 
44      getServletContext().log("Chyba pri načítaní obrázka", e)
45      throw new ServletException(e.getMessage())
46     
47 
48     // zistíme rozmery obrázku 
49     int width = image.getWidth(frame)
50     int height = image.getHeight(frame)
51   
52     // obrázok preženieme cez filter 
53     Image filtered = frame.createImage(new FilteredImageSource(image.getSource(),new GreyScaleFilter()));
54     
55     // obrázok zakódujeme, uložíme do Hashtable a pošleme 
56     ByteArrayOutputStream baos = new ByteArrayOutputStream();
57     GifEncoder encoder = new GifEncoder(filtered, baos);
58     encoder.encode();
59     gifs.put(source, baos);
60     baos.writeTo(out);
61   
62