001    package com.khubla.pragmatach.plugin.jsp;
002    
003    import java.util.Map;
004    
005    import org.apache.jasper.runtime.HttpJspBase;
006    
007    import com.khubla.pragmatach.framework.api.PragmatachException;
008    import com.khubla.pragmatach.framework.api.Response;
009    import com.khubla.pragmatach.framework.controller.impl.template.AbstractTemplateEngineController;
010    
011    /**
012     * @author tome
013     */
014    public class JSPController extends AbstractTemplateEngineController {
015       /**
016        * ctor
017        */
018       public JSPController() {
019       }
020    
021       /**
022        * render
023        */
024       public Response render() throws PragmatachException {
025          try {
026             /*
027              * get the template name from the annotation
028              */
029             final String templateName = getTemplateName();
030             /*
031              * get the servlet
032              */
033             final JSPCompiler jspCompiler = new JSPCompiler(templateName, getRequest().getServletConfig(), getRequest().getServletContext());
034             final HttpJspBase httpServlet = jspCompiler.getServlet();
035             httpServlet.init(getRequest().getServletConfig());
036             /*
037              * add the context info into the request
038              */
039             final Map<String, Object> ctx = getTemplateContext();
040             for (final String s : ctx.keySet()) {
041                getRequest().getServletContext().setAttribute(s, ctx.get(s));
042             }
043             /*
044              * go for it
045              */
046             return new JSPResponse(getCacheHeaders(), httpServlet, getRequest().getHttpServletRequest());
047          } catch (final Exception e) {
048             throw new PragmatachException("Exception in render", e);
049          }
050       }
051    }