001    package railo.servlet.pic;
002    
003    import java.io.FileNotFoundException;
004    import java.io.IOException;
005    import java.io.InputStream;
006    import java.io.OutputStream;
007    
008    import javax.servlet.ServletException;
009    import javax.servlet.http.HttpServlet;
010    import javax.servlet.http.HttpServletRequest;
011    import javax.servlet.http.HttpServletResponse;
012    
013    import railo.commons.io.IOUtil;
014    
015    
016    /**
017     * Die Klasse PicServlet wird verwendet um Bilder darzustellen, 
018     * alle Bilder die innerhalb des Deployer angezeigt werden, 
019     * werden �ber diese Klasse aus der railo.jar Datei geladen, 
020     * das macht die Applikation flexibler 
021     * und verlangt nicht das die Bilder f�r die Applikation an einem bestimmten Ort abgelegt sein m�ssen. 
022     */
023    public final class PicServlet extends HttpServlet {
024            
025            /**
026             * Verzeichnis in welchem die bilder liegen
027             */
028            public final static String PIC_SOURCE=  "/resource/img/";
029            
030            /**
031             * Interpretiert den Script-Name und l�dt das entsprechende Bild aus den internen Resourcen.
032             * @see javax.servlet.http.HttpServlet#service(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
033             */
034            protected void service(HttpServletRequest req, HttpServletResponse rsp)
035                    throws ServletException, IOException {
036                            // get out Stream
037                            
038                            // pic
039                            String[] arrPath=(req.getServletPath()).split("\\.");
040                            String pic=PIC_SOURCE+"404.gif";
041                            if(arrPath.length>=3)        {
042                                    pic=PIC_SOURCE+((arrPath[arrPath.length-3]+"."+arrPath[arrPath.length-2]).replaceFirst("/",""));
043                                    
044                                    // mime type
045                                    String mime="image/"+arrPath[arrPath.length-2];
046                                    rsp.setContentType(mime);
047                            }
048                            
049                            // write data from pic input to response output
050                            OutputStream os=null; 
051                            InputStream is=null;   
052                            try {                
053                                    os = rsp.getOutputStream();      
054                                    is = getClass().getResourceAsStream(pic); 
055                                    if(is==null) {
056                                            is = getClass().getResourceAsStream(PIC_SOURCE+"404.gif"); 
057                                    }   
058    
059                                    byte[] buf = new byte[4*1024];                
060                                    int nread = 0;                
061                                    while ((nread = is.read(buf)) >= 0) {                    
062                                            os.write(buf, 0, nread);                
063                                    }            
064                            } catch (FileNotFoundException e) {                           
065                            } catch (IOException e) {       
066                            } finally {  
067                                    IOUtil.closeEL(is, os);  
068                            }
069            }
070            
071            
072    }