1 18 19 package org.apache.roller.ui.rendering.servlets; 20 21 import java.io.File ; 22 import java.io.FileInputStream ; 23 import java.io.IOException ; 24 import java.io.InputStream ; 25 import java.io.OutputStream ; 26 import java.net.URLDecoder ; 27 import javax.servlet.ServletConfig ; 28 import javax.servlet.ServletContext ; 29 import javax.servlet.ServletException ; 30 import javax.servlet.http.HttpServlet ; 31 import javax.servlet.http.HttpServletRequest ; 32 import javax.servlet.http.HttpServletResponse ; 33 import org.apache.commons.logging.Log; 34 import org.apache.commons.logging.LogFactory; 35 import org.apache.roller.model.RollerFactory; 36 import org.apache.roller.ui.rendering.util.ModDateHeaderUtil; 37 38 39 49 public class ResourceServlet extends HttpServlet { 50 51 private static Log log = LogFactory.getLog(ResourceServlet.class); 52 53 private String upload_dir = null; 54 private ServletContext context = null; 55 56 57 public void init(ServletConfig config) throws ServletException { 58 59 super.init(config); 60 61 log.info("Initializing ResourceServlet"); 62 63 this.context = config.getServletContext(); 64 65 try { 66 this.upload_dir = RollerFactory.getRoller().getFileManager().getUploadDir(); 67 log.debug("upload dir is ["+this.upload_dir+"]"); 68 } catch(Exception e) { 69 log.error(e); 70 } 71 72 } 73 74 75 78 public void doGet(HttpServletRequest request, HttpServletResponse response) 79 throws ServletException , IOException { 80 81 String context = request.getContextPath(); 82 String servlet = request.getServletPath(); 83 String reqURI = request.getRequestURI(); 84 85 87 reqURI = reqURI.replaceAll("\\+", "%2B"); 92 93 reqURI = URLDecoder.decode(reqURI, "UTF-8"); 95 96 String reqResource = reqURI.substring(servlet.length() + context.length()); 99 100 String resource_path = this.upload_dir + reqResource; 102 File resource = new File (resource_path); 103 104 log.debug("Resource requested ["+reqURI+"]"); 105 log.debug("Real path is ["+resource.getAbsolutePath()+"]"); 106 107 if(!resource.exists() || !resource.canRead() || resource.isDirectory()) { 109 response.sendError(HttpServletResponse.SC_NOT_FOUND); 110 return; 111 } 112 113 File uploadDir = new File (this.upload_dir); 115 if(!resource.getCanonicalPath().startsWith(uploadDir.getCanonicalPath())) { 116 response.sendError(HttpServletResponse.SC_NOT_FOUND); 117 return; 118 } 119 120 if (ModDateHeaderUtil.respondIfNotModified(request,response, resource.lastModified())) { 122 return; 123 } 124 125 ModDateHeaderUtil.setLastModifiedHeader(response,resource.lastModified()); 127 128 response.setContentType(this.context.getMimeType(resource.getAbsolutePath())); 130 131 byte[] buf = new byte[8192]; 133 int length = 0; 134 OutputStream out = response.getOutputStream(); 135 InputStream resource_file = new FileInputStream (resource); 136 while((length = resource_file.read(buf)) > 0) 137 out.write(buf, 0, length); 138 139 out.close(); 141 resource_file.close(); 142 } 143 144 } 145 | Popular Tags |