@Override public void execute() throws Exception { ActionInvoker.invoke(request, response); copyResponse(request, response, httpServletRequest, httpServletResponse); }
public static boolean isModified(String etag, String lastDate, HttpServletRequest request) { // See section 14.26 in rfc 2616 http://www.faqs.org/rfcs/rfc2616.html String browserEtag = request.getHeader(IF_NONE_MATCH); String dateString = request.getHeader(IF_MODIFIED_SINCE); if (browserEtag != null) { boolean etagMatches = browserEtag.equals(etag); if (!etagMatches) { return true; } if (dateString != null) { return !isValidTimeStamp(lastDate, dateString); } return false; } else { if (dateString != null) { return !isValidTimeStamp(lastDate, dateString); } else { return true; } } }
@Override public boolean init() { try { return super.init(); } catch (NotFound e) { serve404(httpServletRequest, httpServletResponse, e); return false; } catch (RenderStatic r) { try { serveStatic(httpServletResponse, httpServletRequest, r); } catch (IOException e) { throw new UnexpectedException(e); } return false; } }
loadRouter(httpServletRequest.getContextPath()); response.out = new ByteArrayOutputStream(); Response.current.set(response); request = parseRequest(httpServletRequest); copyResponse(Request.current(), Response.current(), httpServletRequest, httpServletResponse); } else { Invoker.invokeInThread(new ServletInvocation(request, response, httpServletRequest, httpServletResponse)); Logger.trace("ServletWrapper>service, NotFound: " + e); serve404(httpServletRequest, httpServletResponse, e); return; } catch (RenderStatic e) { Logger.trace("ServletWrapper>service, RenderStatic: " + e); serveStatic(httpServletResponse, httpServletRequest, e); return; } catch(URISyntaxException e) { serve404(httpServletRequest, httpServletResponse, new NotFound(e.toString())); return; } catch (Throwable e) {
serve404(servletRequest, servletResponse, new NotFound("The file " + renderStatic.file + " does not exist")); } else { servletResponse.setContentType(MimeTypes.getContentType(file.getName())); boolean raw = Play.pluginCollection.serveStatic(file, Request.current(), Response.current()); if (raw) { copyResponse(Request.current(), Response.current(), servletRequest, servletResponse); } else { if (Play.mode == Play.Mode.DEV) { servletResponse.setHeader("Content-Length", String.valueOf(file.length())); if (!servletRequest.getMethod().equals("HEAD")) { copyStream(servletResponse, file.inputstream()); } else { copyStream(servletResponse, new ByteArrayInputStream(new byte[0])); String etag = "\"" + last + "-" + file.hashCode() + "\""; String lastDate = Utils.getHttpDateFormatter().format(new Date(last)); if (!isModified(etag, lastDate, servletRequest)) { servletResponse.setHeader("Etag", etag); servletResponse.setStatus(304); servletResponse.setHeader("Cache-Control", "max-age=" + Play.configuration.getProperty("http.cacheControl", "3600")); servletResponse.setHeader("Etag", etag); copyStream(servletResponse, file.inputstream());
@Override public void contextInitialized(ServletContextEvent e) { Play.standalonePlayServer = false; ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader(); String appDir = e.getServletContext().getRealPath("/WEB-INF/application"); File root = new File(appDir); String playId = System.getProperty("play.id", e.getServletContext().getInitParameter("play.id")); if (StringUtils.isEmpty(playId)) { throw new UnexpectedException("Please define a play.id parameter in your web.xml file. Without that parameter, play! cannot start your application. Please add a context-param into the WEB-INF/web.xml file."); } // This is really important as we know this parameter already (we are running in a servlet container) Play.frameworkPath = root.getParentFile(); Play.usePrecompiled = true; Play.init(root, playId); Play.Mode mode = Play.Mode.valueOf(Play.configuration.getProperty("application.mode", "DEV").toUpperCase()); if (mode.isDev()) { Logger.info("Forcing PROD mode because deploying as a war file."); } // Servlet 2.4 does not allow you to get the context path from the servletcontext... if (isGreaterThan(e.getServletContext(), 2, 4)) { loadRouter(e.getServletContext().getContextPath()); } Thread.currentThread().setContextClassLoader(oldClassLoader); }
domain, secure, getHeaders(httpServletRequest), getCookies(httpServletRequest));
servletResponse.setHeader("Content-Length", String.valueOf(file.length())); if (!request.method.equals("HEAD")) { copyStream(servletResponse, VirtualFile.open(file).inputstream()); } else { copyStream(servletResponse, new ByteArrayInputStream(new byte[0])); copyStream(servletResponse, (InputStream) response.direct); } else { byte[] content = response.out.toByteArray(); servletResponse.getOutputStream().write(content); } else { copyStream(servletResponse, new ByteArrayInputStream(new byte[0]));