1 package org.roller.presentation.filters; 2 3 import java.io.IOException ; 4 import java.text.SimpleDateFormat ; 5 import java.util.Date ; 6 7 import javax.servlet.Filter ; 8 import javax.servlet.FilterChain ; 9 import javax.servlet.FilterConfig ; 10 import javax.servlet.ServletException ; 11 import javax.servlet.ServletRequest ; 12 import javax.servlet.ServletResponse ; 13 import javax.servlet.http.HttpServletRequest ; 14 import javax.servlet.http.HttpServletResponse ; 15 16 import org.apache.commons.logging.Log; 17 import org.apache.commons.logging.LogFactory; 18 import org.roller.RollerException; 19 import org.roller.model.Roller; 20 import org.roller.presentation.RollerRequest; 21 22 33 public class IfPlanetModifiedFilter implements Filter 34 { 35 private static Log mLogger = 36 LogFactory.getFactory().getInstance(IfPlanetModifiedFilter.class); 37 38 SimpleDateFormat dateFormatter = new SimpleDateFormat ("EEE MMM d HH:mm:ss z yyyy"); 39 40 public IfPlanetModifiedFilter() 41 { 42 super(); 43 } 44 45 48 public void init(FilterConfig filterConfig) throws ServletException 49 { 50 } 51 52 58 public void doFilter( 59 ServletRequest req, 60 ServletResponse res, 61 FilterChain chain) 62 throws IOException , ServletException 63 { 64 HttpServletRequest request = (HttpServletRequest ) req; 65 HttpServletResponse response = (HttpServletResponse ) res; 66 67 Date updateTime = null; 68 try 69 { 70 updateTime = getLastPublishedDate(request); 71 72 request.setAttribute("updateTime", updateTime); 74 75 Date sinceDate = 77 new Date (request.getDateHeader("If-Modified-Since")); 78 79 if (updateTime != null) 80 { 81 synchronized (dateFormatter) 83 { 84 String date = dateFormatter.format(updateTime); 85 updateTime = new Date (date); 86 } 87 if (updateTime.compareTo(sinceDate) <= 0) 88 { 89 response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); 90 return; 91 } 92 } 93 mLogger.debug("Not returning 304 for: "+request.getRequestURI()); 94 } 95 catch (RollerException e) 96 { 97 response.setStatus(HttpServletResponse.SC_BAD_REQUEST); 99 return; 100 } 101 catch (IllegalArgumentException e) 102 { 103 } 107 108 if (updateTime != null) 110 { 111 response.setDateHeader("Last-Modified", updateTime.getTime()); 112 } 113 114 chain.doFilter(request, response); 115 } 116 117 public static Date getLastPublishedDate(HttpServletRequest request) 118 throws RollerException 119 { 120 RollerRequest rreq = RollerRequest.getRollerRequest(request); 121 Roller roller = rreq.getRoller(); 122 Date lastUpdated = roller.getPlanetManager().getLastUpdated(); 123 if (lastUpdated == null) 124 { 125 lastUpdated = new Date (); 126 mLogger.warn("Can't get lastUpdate time, using current time instead"); 127 } 128 return lastUpdated; 129 } 130 131 134 public void destroy() 135 { 136 } 137 } 138 | Popular Tags |