groovy.servlet

## Class TemplateServlet

- java.lang.Object
- - javax.servlet.GenericServlet
  - - javax.servlet.http.HttpServlet
    - - groovy.servlet.AbstractHttpServlet
      - - groovy.servlet.TemplateServlet

- All Implemented Interfaces:
    ResourceConnector, java.io.Serializable, javax.servlet.Servlet, javax.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

  Author:
    Christian Stein, Guillaume Laforge
  See Also:
    `AbstractHttpServlet.setVariables(ServletBinding)`, Serialized Form

- - ### Field Summary

    - ### Fields inherited from class groovy.servlet.AbstractHttpServlet

      `CONTENT_TYPE_TEXT_HTML, encoding, INC_PATH_INFO, INC_REQUEST_URI, INC_SERVLET_PATH, INIT_PARAM_RESOURCE_NAME_REGEX, INIT_PARAM_RESOURCE_NAME_REGEX_FLAGS, namePrefix, reflection, resourceNamePattern, resourceNameReplaceAll, resourceNameReplacement, servletContext, verbose`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `TemplateServlet()` Create new TemplateServlet.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected Template` | `getTemplate(java.io.File file)` Gets the template created by the underlying engine parsing the request.
    `protected Template` | `getTemplate(java.net.URL url)` Gets the template created by the underlying engine parsing the request.
    `void` | `init(javax.servlet.ServletConfig config)` Initializes the servlet from hints the container passes.
    `protected TemplateEngine` | `initTemplateEngine(javax.servlet.ServletConfig config)` Creates the template engine.
    `void` | `service(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)` Services the request with a response.

    - ### Methods inherited from class groovy.servlet.AbstractHttpServlet

      `applyResourceNameMatcher, generateNamePrefixOnce, getResourceConnection, getScriptUri, getScriptUriAsFile, removeNamePrefix, setVariables`

    - ### Methods inherited from class javax.servlet.http.HttpServlet

      `doDelete, doGet, doHead, doOptions, doPost, doPut, doTrace, getLastModified, service`

    - ### Methods inherited from class javax.servlet.GenericServlet

      `destroy, getInitParameter, getInitParameterNames, getServletConfig, getServletContext, getServletInfo, getServletName, init, log, log`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### TemplateServlet

          public TemplateServlet()

      Create new TemplateServlet.

  - ### Method Detail

    - #### getTemplate

          protected Template getTemplate(java.io.File file)
                                  throws javax.servlet.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:
        `javax.servlet.ServletException` - If the request specified an invalid template source file

    - #### getTemplate

          protected Template getTemplate(java.net.URL url)
                                  throws javax.servlet.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:
        `javax.servlet.ServletException` - If the request specified an invalid template source URL

    - #### init

          public void init(javax.servlet.ServletConfig config)
                    throws javax.servlet.ServletException

      Initializes the servlet from hints the container passes.

      Delegates to sub-init methods and parses the following parameters:

      - `"generatedBy"` : boolean, appends "Generated by ..." to the HTML response text generated by this servlet.
      Specified by:
        `init` in interface `javax.servlet.Servlet`
      Overrides:
        `init` in class `AbstractHttpServlet`
      Parameters:
        `config` - Passed by the servlet container.
      Throws:
        `javax.servlet.ServletException` - if this method encountered difficulties
      See Also:
        `initTemplateEngine(ServletConfig)`

    - #### initTemplateEngine

          protected TemplateEngine initTemplateEngine(javax.servlet.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(javax.servlet.http.HttpServletRequest request,
                              javax.servlet.http.HttpServletResponse response)
                       throws javax.servlet.ServletException,
                              java.io.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 `javax.servlet.http.HttpServlet`
      Parameters:
        `request` - The http request.
        `response` - The http response.
      Throws:
        `java.io.IOException` - if an input or output error occurs while the servlet is handling the HTTP request
        `javax.servlet.ServletException` - if the HTTP request cannot be handled