groovy.servlet

## Class ServletBinding

- java.lang.Object
- - groovy.lang.GroovyObjectSupport
  - - groovy.lang.Binding
    - - groovy.servlet.ServletBinding

- All Implemented Interfaces:
    GroovyObject

      public class ServletBinding
      extends Binding

  Servlet-specific binding extension to lazy load the writer or the output stream from the response.

  ### Eager variables

  - `"request"` : the HttpServletRequest object
  - `"response"` : the HttpServletRequest object
  - `"context"` : the ServletContext object
  - `"application"` : same as context
  - `"session"` : shorthand for `request.getSession(`false`)` - can be null!
  - `"params"` : map of all form parameters - can be empty
  - `"headers"` : map of all `request` header fields

  ### Lazy variables

  - `"out"` : response.getWriter()
  - `"sout"` : response.getOutputStream()
  - `"html"` : new MarkupBuilder(response.getWriter())
  As per specification a call to response.getWriter() should not be done if a call to response.getOutputStream() have been done already and the other way around. Lazy bound variables can be requested without side effects, since the writer and stream is wrapped. That means response.getWriter() is not directly called if 'out' or 'html' is requested. Only if a write method call is done using the variable, a write method call on 'sout' will cause a IllegalStateException. If a write method call on 'sout' has been done already any further write method call on 'out' or 'html' will cause a IllegalStateException.

  If response.getWriter() is called directly (without using out), then a write method call on 'sout' will not cause the IllegalStateException, but it will still be invalid. It is the responsibility of the user of this class, to not to mix these different usage styles. The same applies to calling response.getOoutputStream() and using 'out' or 'html'.

  ### Methods

  - `"forward(String path)"` : request.getRequestDispatcher(path).forward(request, response);
  - `"include(String path)"` : request.getRequestDispatcher(path).include(request, response);
  - `"redirect(String location)"` : response.sendRedirect(location);
  Author:
    Guillaume Laforge, Christian Stein, Jochen Theodorou

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `ServletBinding(HttpServletRequest request, HttpServletResponse response, ServletContext context)` Initializes a servlet binding.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `forward(String path)`
    `Object` | `getVariable(String name)`
    `Map` | `getVariables()`
    `void` | `include(String path)`
    `void` | `redirect(String location)`
    `void` | `setVariable(String name, Object value)` Sets the value of the given variable

    - ### Methods inherited from class groovy.lang.Binding

      `getProperty, setProperty`

    - ### Methods inherited from class groovy.lang.GroovyObjectSupport

      `getMetaClass, invokeMethod, setMetaClass`

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

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

- - ### Constructor Detail

    - #### ServletBinding

          public ServletBinding(HttpServletRequest request,
                        HttpServletResponse response,
                        ServletContext context)

      Initializes a servlet binding.
      Parameters:
        `request` - the HttpServletRequest object
        `response` - the HttpServletRequest object
        `context` - the ServletContext object

  - ### Method Detail

    - #### setVariable

          public void setVariable(String name,
                         Object value)

      Description copied from class: `Binding`
      Sets the value of the given variable
      Overrides:
        `setVariable` in class `Binding`
      Parameters:
        `name` - the name of the variable to set
        `value` - the new value for the given variable

    - #### getVariables

          public Map getVariables()

      Overrides:
        `getVariables` in class `Binding`

    - #### getVariable

          public Object getVariable(String name)

      Overrides:
        `getVariable` in class `Binding`
      Parameters:
        `name` - the name of the variable to lookup
      Returns:
        a writer, an output stream, a markup builder or another requested object

    - #### forward

          public void forward(String path)
                       throws ServletException,
                              IOException

      Throws:
        `ServletException`
        `IOException`

    - #### include

          public void include(String path)
                       throws ServletException,
                              IOException

      Throws:
        `ServletException`
        `IOException`

    - #### redirect

          public void redirect(String location)
                        throws IOException

      Throws:
        `IOException`