Class AbstractHttpServlet
- All Implemented Interfaces:
ResourceConnector,Serializable,Servlet,ServletConfig
- Direct Known Subclasses:
GroovyServlet,TemplateServlet
Resource name mangling (pattern replacement)
Also implements Groovy's ResourceConnector in a dynamic
manner. It allows you to modify the resource name that is searched for with a
replace all operation. See Pattern and
Matcher for details.
The servlet init parameter names are:
"resource.name.regex" = empty - defaults to null resource.name.replacement = empty - defaults to null resource.name.replace.all = true (default) | false means replaceFirst()Note: If you specify a regex, you have to specify a replacement string too! Otherwise an exception gets raised.
Logging and bug-hunting options
This implementation provides a verbosity flag switching log statements. The servlet init parameter name is:
verbose = false(default) | true
In order to support class-loading-troubles-debugging with Tomcat 4 or higher, you can log the class loader responsible for loading some classes. See GROOVY-861 for details. The servlet init parameter name is:
log.GROOVY861 = false(default) | true
If you experience class-loading-troubles with Tomcat 4 (or higher) or any other servlet container using custom class loader setups, you can fall back to use (slower) reflection in Groovy's MetaClass implementation. Please contact the dev team with your problem! Thanks. The servlet init parameter name is:
reflection = false(default) | true
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringContent type of the HTTP response.protected StringEncoding to use, becomes charset part of contentType.static final StringServlet API include key name: path_infostatic final Stringstatic final StringServlet API include key name: servlet_pathstatic final Stringstatic final Stringprotected Stringa.fink: it was inremoveNamePrefix(java.lang.String), but was extracted to var for optimizationprotected booleanMirrors the static value of the reflection flag in MetaClass.protected PatternEithernullor a compiled pattern read from ""resource.name.regex"" and used ingetScriptUri(HttpServletRequest).protected booleanThe replace method to use on the matcher.protected StringThe replacement used by the resource name matcher.protected ServletContextServlet (or the web application) context.protected booleanControls almost all log output. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected Stringprotected voidgetResourceConnection(String name) Interface method for ResourceContainer.protected StringgetScriptUri(HttpServletRequest request) Returns the include-aware uri of the script or template file.protected FilegetScriptUriAsFile(HttpServletRequest request) Parses the http request for the real script or template source file.voidinit(ServletConfig config) Overrides the generic init method to set some debug flags.protected StringremoveNamePrefix(String name) protected voidsetVariables(ServletBinding binding) Override this method to set your variables to the Groovy binding.Methods inherited from class javax.servlet.http.HttpServlet
doDelete, doGet, doHead, doOptions, doPost, doPut, doTrace, getLastModified, service, serviceMethods inherited from class javax.servlet.GenericServlet
destroy, getInitParameter, getInitParameterNames, getServletConfig, getServletContext, getServletInfo, getServletName, init, log, log
-
Field Details
-
INIT_PARAM_RESOURCE_NAME_REGEX
- See Also:
-
INIT_PARAM_RESOURCE_NAME_REGEX_FLAGS
- See Also:
-
CONTENT_TYPE_TEXT_HTML
Content type of the HTTP response.- See Also:
-
INC_PATH_INFO
Servlet API include key name: path_info- See Also:
-
INC_REQUEST_URI
- See Also:
-
INC_SERVLET_PATH
Servlet API include key name: servlet_path- See Also:
-
servletContext
Servlet (or the web application) context. -
resourceNamePattern
Eithernullor a compiled pattern read from ""resource.name.regex"" and used ingetScriptUri(HttpServletRequest). -
resourceNameReplacement
The replacement used by the resource name matcher. -
resourceNameReplaceAll
protected boolean resourceNameReplaceAllThe replace method to use on the matcher.true - replaceAll(resourceNameReplacement); (default) false - replaceFirst(resourceNameReplacement);
-
verbose
protected boolean verboseControls almost all log output. -
encoding
Encoding to use, becomes charset part of contentType. -
reflection
protected boolean reflectionMirrors the static value of the reflection flag in MetaClass. See AbstractHttpServlet#logGROOVY861 -
namePrefix
a.fink: it was inremoveNamePrefix(java.lang.String), but was extracted to var for optimization
-
-
Constructor Details
-
AbstractHttpServlet
public AbstractHttpServlet()Initializes all fields with default values.
-
-
Method Details
-
generateNamePrefixOnce
protected void generateNamePrefixOnce() -
removeNamePrefix
- Throws:
ResourceException
-
getResourceConnection
Interface method for ResourceContainer. This is used by the GroovyScriptEngine.- Specified by:
getResourceConnectionin interfaceResourceConnector- Throws:
ResourceException
-
getScriptUri
Returns the include-aware uri of the script or template file.- Parameters:
request- the http request to analyze- Returns:
- the include-aware uri either parsed from request attributes or hints provided by the servlet container
-
applyResourceNameMatcher
-
getScriptUriAsFile
Parses the http request for the real script or template source file.- Parameters:
request- the http request to analyze- Returns:
- a file object using an absolute file path name, or
nullif the servlet container cannot translate the virtual path to a real path for any reason (such as when the content is being made available from a .war archive).
-
init
Overrides the generic init method to set some debug flags.- Specified by:
initin interfaceServlet- Overrides:
initin classGenericServlet- Parameters:
config- the servlet configuration provided by the container- Throws:
ServletException- if init() method defined in super class javax.servlet.GenericServlet throws it
-
setVariables
Override this method to set your variables to the Groovy binding.All variables bound the binding are passed to the template source text, e.g. the HTML file, when the template is merged.
The binding provided by TemplateServlet does already include some default variables. As of this writing, they are (copied from
ServletBinding):- "request" : HttpServletRequest
- "response" : HttpServletResponse
- "context" : ServletContext
- "application" : ServletContext
- "session" : request.getSession(false)
And via implicit hard-coded keywords:
- "out" : response.getWriter()
- "sout" : response.getOutputStream()
- "html" : new MarkupBuilder(response.getWriter())
The binding also provides convenient 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);
Example binding all servlet context variables:
class MyServlet extends TemplateServlet { protected void setVariables(ServletBinding binding) { // Bind a simple variable binding.setVariable("answer", new Long(42)); // Bind all servlet context attributes... ServletContext context = (ServletContext) binding.getVariable("context"); Enumeration enumeration = context.getAttributeNames(); while (enumeration.hasMoreElements()) { String name = (String) enumeration.nextElement(); binding.setVariable(name, context.getAttribute(name)); } } }- Parameters:
binding- to be modified
-