Package 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())
-expandEmptyElements
flag is set to true - "json" :
new JsonBuilder()
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"
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)
-
Constructor Summary
Constructors Constructor Description ServletBinding(HttpServletRequest request, HttpServletResponse response, ServletContext context)
Initializes a servlet binding. -
Method Summary
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)
Sets the value of the given variableMethods inherited from class groovy.lang.Binding
getProperty, hasVariable, removeVariable, setProperty
Methods inherited from class groovy.lang.GroovyObjectSupport
getMetaClass, setMetaClass
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface groovy.lang.GroovyObject
invokeMethod
-
Constructor Details
-
ServletBinding
public ServletBinding(HttpServletRequest request, HttpServletResponse response, ServletContext context)Initializes a servlet binding.- Parameters:
request
- the HttpServletRequest objectresponse
- the HttpServletRequest objectcontext
- the ServletContext object
-
-
Method Details
-
setVariable
public void setVariable(java.lang.String name, java.lang.Object value)Description copied from class:Binding
Sets the value of the given variable- Overrides:
setVariable
in classBinding
- Parameters:
name
- the name of the variable to setvalue
- the new value for the given variable
-
getVariables
public java.util.Map getVariables()- Overrides:
getVariables
in classBinding
-
getVariable
public java.lang.Object getVariable(java.lang.String name)- Overrides:
getVariable
in classBinding
- Parameters:
name
- the name of the variable to lookup- Returns:
- a writer, an output stream, a markup builder or another requested object
-
forward
- Throws:
ServletException
java.io.IOException
-
include
- Throws:
ServletException
java.io.IOException
-
redirect
public void redirect(java.lang.String location) throws java.io.IOException- Throws:
java.io.IOException
-