Class TemplateServlet

  • All Implemented Interfaces:
    ResourceConnector, Serializable, Servlet, ServletConfig

    public class TemplateServlet
    extends AbstractHttpServlet
    A generic servlet for serving (mostly HTML) templates.

    It delegates work to a groovy.text.TemplateEngine implementation processing HTTP requests.

    Usage

    helloworld.html is a headless HTML-like template

    
      <html>
        <body>
          <% 3.times { %>
            Hello World!
          <% } %>
          <br>
        </body>
      </html>
     

    Minimal web.xml example serving HTML-like templates

    
     <web-app>
       <servlet>
         <servlet-name>template</servlet-name>
         <servlet-class>groovy.servlet.TemplateServlet</servlet-class>
       </servlet>
       <servlet-mapping>
         <servlet-name>template</servlet-name>
         <url-pattern>*.html</url-pattern>
       </servlet-mapping>
     </web-app>
     

    Template engine configuration

    By default, the TemplateServer uses the SimpleTemplateEngine which interprets JSP-like templates. The init parameter template.engine defines the fully qualified class name of the template to use:

       template.engine = [empty] - equals groovy.text.SimpleTemplateEngine
       template.engine = groovy.text.SimpleTemplateEngine
       template.engine = groovy.text.GStringTemplateEngine
       template.engine = groovy.text.XmlTemplateEngine
     

    Servlet Init Parameters

    Logging and extra-output options

    This implementation provides a verbosity flag switching log statements. The servlet init parameter name is:

       generated.by = true(default) | false
     

    Groovy Source Encoding Parameter

    The following servlet init parameter name can be used to specify the encoding TemplateServlet will use to read the template groovy source files:

       groovy.source.encoding
     
    See Also:
    AbstractHttpServlet.setVariables(ServletBinding), Serialized Form
    • Constructor Detail

      • TemplateServlet

        public TemplateServlet()
        Create new TemplateServlet.
    • Method Detail

      • getTemplate

        protected Template getTemplate​(File file)
                                throws ServletException
        Gets the template created by the underlying engine parsing the request.

        This method looks up a simple (weak) hash map for an existing template object that matches the source file. If the source file didn't change in length and its last modified stamp hasn't changed compared to a precompiled template object, this template is used. Otherwise, there is no or an invalid template object cache entry, a new one is created by the underlying template engine. This new instance is put to the cache for consecutive calls.

        Parameters:
        file - The file containing the template source.
        Returns:
        The template that will produce the response text.
        Throws:
        ServletException - If the request specified an invalid template source file
      • getTemplate

        protected Template getTemplate​(URL url)
                                throws ServletException
        Gets the template created by the underlying engine parsing the request.

        This method looks up a simple (weak) hash map for an existing template object that matches the source URL. If there is no cache entry, a new one is created by the underlying template engine. This new instance is put to the cache for consecutive calls.

        Parameters:
        url - The URL containing the template source..
        Returns:
        The template that will produce the response text.
        Throws:
        ServletException - If the request specified an invalid template source URL
      • initTemplateEngine

        protected TemplateEngine initTemplateEngine​(ServletConfig config)
        Creates the template engine.

        Called by init(ServletConfig) and returns just new groovy.text.SimpleTemplateEngine() if the init parameter template.engine is not set by the container configuration.

        Parameters:
        config - Current servlet configuration passed by the container.
        Returns:
        The underlying template engine or null on error.
      • service

        public void service​(HttpServletRequest request,
                            HttpServletResponse response)
                     throws ServletException,
                            IOException
        Services the request with a response.

        First the request is parsed for the source file uri. If the specified file could not be found or can not be read an error message is sent as response.

        Overrides:
        service in class HttpServlet
        Parameters:
        request - The http request.
        response - The http response.
        Throws:
        IOException - if an input or output error occurs while the servlet is handling the HTTP request
        ServletException - if the HTTP request cannot be handled