package railo.runtime.net.http; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import railo.commons.net.HTTPUtil; import railo.runtime.PageContext; import railo.runtime.engine.ThreadLocalPageContext; public class RequestDispatcherWrap implements RequestDispatcher { private String realPath; private HTTPServletRequestWrap req; public RequestDispatcherWrap(HTTPServletRequestWrap req, String realPath) { this.realPath=realPath; this.req=req; } public void forward(ServletRequest req, ServletResponse rsp)throws ServletException, IOException { PageContext pc = ThreadLocalPageContext.get(); req=HTTPUtil.removeWrap(req); if(pc==null){ this.req.getOriginalRequestDispatcher(realPath).forward(req, rsp); return; } realPath=HTTPUtil.optimizeRealPath(pc,realPath); try{ RequestDispatcher disp = this.req.getOriginalRequestDispatcher(realPath); disp.forward(req,rsp); } finally{ ThreadLocalPageContext.register(pc); } } /*public void include(ServletRequest req, ServletResponse rsp)throws ServletException, IOException { PageContext pc = ThreadLocalPageContext.get(); if(pc==null){ this.req.getOriginalRequestDispatcher(realPath).include(req, rsp); return; } try{ realPath=HTTPUtil.optimizeRealPath(pc,realPath); RequestDispatcher disp = this.req.getOriginalRequestDispatcher(realPath); disp.include(req,rsp); } finally{ ThreadLocalPageContext.register(pc); } }*/ public void include(ServletRequest req, ServletResponse rsp)throws ServletException, IOException { PageContext pc = ThreadLocalPageContext.get(); if(pc==null){ this.req.getOriginalRequestDispatcher(realPath).include(req, rsp); return; } //rsp.getWriter().flush(); //print.out("abc:"+rsp); HTTPUtil.include(pc,req, rsp,realPath); /* realPath=HTTPUtil.optimizeRealPath(pc,realPath); ByteArrayOutputStream baos=new ByteArrayOutputStream(); try{ HttpServletResponse drsp=new HttpServletResponseWrap(pc.getHttpServletResponse(),baos); RequestDispatcher disp = pc.getServletContext().getRequestDispatcher(realPath); if(disp==null) throw new PageServletException(new ApplicationException("Page "+realPath+" not found")); disp.include(req,drsp); if(!drsp.isCommitted())drsp.flushBuffer(); pc.write(IOUtil.toString(baos.toByteArray(), drsp.getCharacterEncoding())); } finally{ ThreadLocalPageContext.register(pc); }*/ } }