| 1 26 package net.sf.packtag.servlet; 27 28 import java.io.IOException ; 29 import java.util.Date ; 30 31 import javax.servlet.Servlet ; 32 import javax.servlet.ServletException ; 33 import javax.servlet.http.HttpServlet ; 34 import javax.servlet.http.HttpServletRequest ; 35 import javax.servlet.http.HttpServletResponse ; 36 37 import net.sf.packtag.cache.PackCache; 38 import net.sf.packtag.cache.Resource; 39 import net.sf.packtag.util.ContextConfiguration; 40 41 42 43 52 public class PackServlet extends HttpServlet implements Servlet { 53 54 private static final long serialVersionUID = 6588877416667767264L; 55 56 private static final String QUESTION_MARK = "?"; 57 private static final String CONTENT_ENCODING = "Content-Encoding"; 58 private static final String ACCEPTED_ENCODING = "Accept-Encoding"; 59 private static final String GZIP = "gzip"; 60 61 private static final String CACHE_CONTROL = "Cache-Control"; 62 private static final String CACHE_CONTROL_PRIVATE = "private"; 63 private static final String EXPIRES = "Expires"; 64 private static final long ONE_YEAR = 31536000000L; 65 private static final String ETAG = "ETag"; 66 private static final String ETAG_PREFIX = "pack"; 67 68 69 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException { 70 StringBuffer fqp = new StringBuffer (); 71 fqp.append(request.getContextPath()); 73 fqp.append(ContextConfiguration.getCacheServletPath(request.getSession().getServletContext())); 74 fqp.append(QUESTION_MARK); 75 fqp.append(request.getQueryString()); 76 Resource resource = PackCache.getResourceByFqp(fqp.toString()); 77 79 response.setHeader(CACHE_CONTROL, CACHE_CONTROL_PRIVATE); 81 82 response.setDateHeader(EXPIRES, new Date ().getTime() + ONE_YEAR); 85 response.setHeader(ETAG, ETAG_PREFIX + Integer.toString(resource.getMinifiedHashcode())); 87 88 95 98 String acceptEncoding = request.getHeader(ACCEPTED_ENCODING); 99 if ((acceptEncoding != null) && (acceptEncoding.indexOf(GZIP) != -1)) { 100 response.setHeader(CONTENT_ENCODING, GZIP); 101 response.getOutputStream().write(resource.getGzippedResource()); 102 } 103 else { 104 response.getWriter().write(resource.getMinifedResource()); 105 } 106 } 107 108 } 109 | Popular Tags |