Class ServletBinding

  • All Implemented Interfaces:
    groovy.lang.GroovyObject

    public class ServletBinding
    extends groovy.lang.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()) - expandEmptyElements flag is set to true
    • "json" : new JsonBuilder()
    As per the Servlet specification, a call to response.getWriter() should not be done if a call to response.getOutputStream() has already occurred or the other way around. You may wonder then how the above lazy variables can possibly be provided - since setting them up would involve calling both of the above methods. The trick is catered for behind the scenes using lazy variables. Lazy bound variables can be requested without side effects; under the covers the writer and stream are wrapped. That means response.getWriter() is never directly called until some output is done using 'out' or 'html'. Once a write method call is done using either of these variable, then an attempt to write using 'sout' will cause an IllegalStateException. Similarly, if a write method call on 'sout' has been done already, then any further write method call on 'out' or 'html' will cause an IllegalStateException.

    Reserved internal variable names (see "Methods" below)

    • "forward"
    • "include"
    • "redirect"
    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.getOutputStream() 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)
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void forward​(java.lang.String path)  
      java.lang.Object getVariable​(java.lang.String name)  
      java.util.Map getVariables()  
      void include​(java.lang.String path)  
      void redirect​(java.lang.String location)  
      void setVariable​(java.lang.String name, java.lang.Object value)  
      • Methods inherited from class groovy.lang.Binding

        getProperty, hasVariable, 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​(java.lang.String name,
                                java.lang.Object value)
        Overrides:
        setVariable in class groovy.lang.Binding
      • getVariables

        public java.util.Map getVariables()
        Overrides:
        getVariables in class groovy.lang.Binding
      • getVariable

        public java.lang.Object getVariable​(java.lang.String name)
        Overrides:
        getVariable in class groovy.lang.Binding
        Returns:
        a writer, an output stream, a markup builder or another requested object
      • redirect

        public void redirect​(java.lang.String location)
                      throws java.io.IOException
        Throws:
        java.io.IOException