1 18 19 package org.apache.roller.ui.rendering.servlets; 20 21 import java.io.IOException ; 22 import java.util.HashMap ; 23 import javax.servlet.ServletConfig ; 24 import javax.servlet.ServletException ; 25 import javax.servlet.http.HttpServlet ; 26 import javax.servlet.http.HttpServletRequest ; 27 import javax.servlet.http.HttpServletResponse ; 28 import org.apache.commons.logging.Log; 29 import org.apache.commons.logging.LogFactory; 30 import org.apache.roller.RollerException; 31 import org.apache.roller.config.RollerRuntimeConfig; 32 import org.apache.roller.pojos.StaticTemplate; 33 import org.apache.roller.pojos.Template; 34 import org.apache.roller.pojos.WebsiteData; 35 import org.apache.roller.ui.rendering.util.WeblogRequest; 36 import org.apache.roller.ui.rendering.util.ModDateHeaderUtil; 37 import org.apache.roller.ui.rendering.Renderer; 38 import org.apache.roller.ui.rendering.RendererManager; 39 import org.apache.roller.util.cache.CachedContent; 40 41 42 51 public class RSDServlet extends HttpServlet { 52 53 private static Log log = LogFactory.getLog(RSDServlet.class); 54 55 56 59 public void init(ServletConfig servletConfig) throws ServletException { 60 61 super.init(servletConfig); 62 63 log.info("Initializing RSDServlet"); 64 } 65 66 67 70 public void doGet(HttpServletRequest request, HttpServletResponse response) 71 throws ServletException , IOException { 72 73 log.debug("Entering"); 74 75 WebsiteData weblog = null; 76 77 WeblogRequest weblogRequest = null; 78 try { 79 weblogRequest = new WeblogRequest(request); 80 81 weblog = weblogRequest.getWeblog(); 83 if(weblog == null) { 84 throw new RollerException("Unable to lookup weblog: "+ 85 weblogRequest.getWeblogHandle()); 86 } 87 88 } catch(Exception e) { 89 log.debug("error creating weblog request", e); 91 response.sendError(HttpServletResponse.SC_NOT_FOUND); 92 return; 93 } 94 95 96 97 long lastModified = System.currentTimeMillis(); 99 if (weblog.getLastModified() != null) { 100 lastModified = weblog.getLastModified().getTime(); 101 } 102 if (ModDateHeaderUtil.respondIfNotModified(request,response,lastModified)) { 103 return; 104 } 105 106 ModDateHeaderUtil.setLastModifiedHeader(response,lastModified); 108 109 response.setContentType("application/rsd+xml; charset=utf-8"); 111 112 HashMap model = new HashMap (); 114 model.put("website", weblog); 115 model.put("absBaseURL", RollerRuntimeConfig.getAbsoluteContextURL()); 116 117 118 Renderer renderer = null; 120 try { 121 log.debug("Looking up renderer"); 122 Template template = new StaticTemplate("templates/weblog/rsd.vm", null, "velocity"); 123 renderer = RendererManager.getRenderer(template); 124 } catch(Exception e) { 125 log.error("Couldn't find renderer for rsd template", e); 127 128 if(!response.isCommitted()) response.reset(); 129 response.sendError(HttpServletResponse.SC_NOT_FOUND); 130 return; 131 } 132 133 CachedContent rendererOutput = new CachedContent(4096); 135 try { 136 log.debug("Doing rendering"); 137 renderer.render(model, rendererOutput.getCachedWriter()); 138 139 rendererOutput.flush(); 141 rendererOutput.close(); 142 } catch(Exception e) { 143 log.error("Error during rendering for rsd template", e); 145 146 if(!response.isCommitted()) response.reset(); 147 response.sendError(HttpServletResponse.SC_NOT_FOUND); 148 return; 149 } 150 151 152 154 log.debug("Flushing response output"); 156 response.setContentLength(rendererOutput.getContent().length); 157 response.getOutputStream().write(rendererOutput.getContent()); 158 159 log.debug("Exiting"); 160 } 161 162 } 163 | Popular Tags |