public class FreemarkerServlet
extends javax.servlet.http.HttpServlet
This is a general-purpose FreeMarker view servlet.
The main features are:
Request
,
RequestParameters
, Session
, and Application
variables.
Application.attrName
, Session.attrName
,
Request.attrName
is not mandatory; it's enough to write attrName
,
and if no such variable was created in the template, it will search the
variable in Request
, and then in Session
,
and finally in Application
.
JspTaglibs
, that can be used
to load JSP taglibs. For example:<#assign tiles=JspTaglibs["/WEB-INF/struts-tiles.tld"]>
include_page
allows you to
include the output of another servlet resource from your servlet container,
just as if you used ServletRequest.getRequestDispatcher(path).include()
:<@include_page path="/myWebapp/somePage.jsp"/>
. You can also
pass parameters to the newly included page by passing a hash named 'params':
<@include_page path="/myWebapp/somePage.jsp" params={lang: "en", q="5"}/>
.
By default, the request parameters of the original request (the one being
processed by FreemarkerServlet) are also inherited by the include. You can
explicitly control this inheritance using the 'inherit_params' parameter:
<@include_page path="/myWebapp/somePage.jsp" params={lang: "en", q="5"} inherit_params=false/>
.
The servlet will rethrow the errors occurring during template processing,
wrapped into ServletException
, except if the class name of the
class set by the template_exception_handler
contains the
substring "Debug"
. If it contains "Debug"
, then it
is assumed that the template exception handler prints the error message to the
page, thus FreemarkerServlet
will suppress the exception, and
logs the problem with the servlet logger
(javax.servlet.GenericServlet.log(...)
).
Supported init-params are:
Configuration
level setting. See Configuration.setSetting(java.lang.String, java.lang.String)
Modifier and Type | Field and Description |
---|---|
protected boolean |
debug |
static java.lang.String |
KEY_APPLICATION |
static java.lang.String |
KEY_APPLICATION_PRIVATE |
static java.lang.String |
KEY_INCLUDE |
static java.lang.String |
KEY_JSP_TAGLIBS |
static java.lang.String |
KEY_REQUEST |
static java.lang.String |
KEY_REQUEST_PARAMETERS |
static java.lang.String |
KEY_REQUEST_PRIVATE |
static java.lang.String |
KEY_SESSION |
static long |
serialVersionUID |
Constructor and Description |
---|
FreemarkerServlet() |
Modifier and Type | Method and Description |
---|---|
protected Configuration |
createConfiguration()
This method is called from
init() to create the
FreeMarker configuration object that this servlet will use
for template loading. |
protected TemplateModel |
createModel(ObjectWrapper wrapper,
javax.servlet.ServletContext servletContext,
javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response) |
protected ObjectWrapper |
createObjectWrapper()
This method is called from
init() to create the
FreeMarker object wrapper object that this servlet will use
for adapting request, session, and servlet context attributes into
template models.. |
protected HttpRequestParametersHashModel |
createRequestParametersHashModel(javax.servlet.http.HttpServletRequest request) |
protected TemplateLoader |
createTemplateLoader(java.lang.String templatePath)
Create the template loader.
|
protected java.util.Locale |
deduceLocale(java.lang.String templatePath,
javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response)
Returns the locale used for the
Configuration.getTemplate(String, Locale) call. |
void |
doGet(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response) |
void |
doPost(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response) |
protected Configuration |
getConfiguration()
Returns the
Configuration object used by this servlet. |
protected ObjectWrapper |
getObjectWrapper() |
protected java.lang.String |
getTemplatePath() |
void |
init() |
protected void |
initializeServletContext(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response)
Called when servlet detects in a request processing that
application-global (that is, ServletContext-specific) attributes are not yet
set.
|
protected void |
initializeSession(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response)
Called when servlet detects in a request processing that session-global
(that is, HttpSession-specific) attributes are not yet set.
|
protected void |
postTemplateProcess(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response,
Template template,
TemplateModel data)
Called after the execution returns from template.process().
|
protected boolean |
preprocessRequest(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response)
Called as the first step in request processing, before the templating mechanism
is put to work.
|
protected boolean |
preTemplateProcess(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response,
Template template,
TemplateModel data)
Called before the execution is passed to template.process().
|
protected java.lang.String |
requestUrlToTemplatePath(javax.servlet.http.HttpServletRequest request)
Maps the request URL to a template path that is passed to
Configuration.getTemplate(String, Locale) . |
doDelete, doHead, doOptions, doPut, doTrace, getLastModified, service, service
public static final long serialVersionUID
public static final java.lang.String KEY_REQUEST
public static final java.lang.String KEY_INCLUDE
public static final java.lang.String KEY_REQUEST_PRIVATE
public static final java.lang.String KEY_REQUEST_PARAMETERS
public static final java.lang.String KEY_SESSION
public static final java.lang.String KEY_APPLICATION
public static final java.lang.String KEY_APPLICATION_PRIVATE
public static final java.lang.String KEY_JSP_TAGLIBS
protected boolean debug
public void init() throws javax.servlet.ServletException
init
in class javax.servlet.GenericServlet
javax.servlet.ServletException
protected TemplateLoader createTemplateLoader(java.lang.String templatePath) throws java.io.IOException
ClassTemplateLoader
if the template path starts with "class://",
a FileTemplateLoader
if the template path starts with "file://",
and a WebappTemplateLoader
otherwise.templatePath
- the template path to create a loader forjava.io.IOException
public void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException
doGet
in class javax.servlet.http.HttpServlet
javax.servlet.ServletException
java.io.IOException
public void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException
doPost
in class javax.servlet.http.HttpServlet
javax.servlet.ServletException
java.io.IOException
protected java.util.Locale deduceLocale(java.lang.String templatePath, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
Configuration.getTemplate(String, Locale)
call.
The base implementation simply returns the locale setting of the
configuration. Override this method to provide different behaviour, i.e.
to use the locale indicated in the request.protected TemplateModel createModel(ObjectWrapper wrapper, javax.servlet.ServletContext servletContext, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws TemplateModelException
TemplateModelException
protected java.lang.String requestUrlToTemplatePath(javax.servlet.http.HttpServletRequest request)
Configuration.getTemplate(String, Locale)
. You can override it
(i.e. to provide advanced rewriting capabilities), but you are strongly
encouraged to call the overridden method first, then only modify its
return value.request
- the currently processed requestprotected boolean preprocessRequest(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException
request
- the HTTP requestresponse
- the HTTP responsejavax.servlet.ServletException
java.io.IOException
protected Configuration createConfiguration()
init()
to create the
FreeMarker configuration object that this servlet will use
for template loading. This is a hook that allows you
to custom-configure the configuration object in a subclass.
The default implementation returns a new Configuration
instance.protected ObjectWrapper createObjectWrapper()
init()
to create the
FreeMarker object wrapper object that this servlet will use
for adapting request, session, and servlet context attributes into
template models.. This is a hook that allows you
to custom-configure the wrapper object in a subclass.
The default implementation returns a wrapper that depends on the value
of ObjectWrapper
init parameter. If simple
is
specified, ObjectWrapper.SIMPLE_WRAPPER
is used; if jython
is specified, JythonWrapper
is used. In
every other case ObjectWrapper.DEFAULT_WRAPPER
is used.protected ObjectWrapper getObjectWrapper()
protected final java.lang.String getTemplatePath()
protected HttpRequestParametersHashModel createRequestParametersHashModel(javax.servlet.http.HttpServletRequest request)
protected void initializeServletContext(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException
request
- the actual HTTP requestresponse
- the actual HTTP responsejavax.servlet.ServletException
java.io.IOException
protected void initializeSession(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException
request
- the actual HTTP requestresponse
- the actual HTTP responsejavax.servlet.ServletException
java.io.IOException
protected boolean preTemplateProcess(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Template template, TemplateModel data) throws javax.servlet.ServletException, java.io.IOException
Example: Expose the Serlvet context path as "baseDir" for all templates:
((SimpleHash) data).put("baseDir", request.getContextPath() + "/"); return true;
request
- the actual HTTP requestresponse
- the actual HTTP responsetemplate
- the template that will get executeddata
- the data that will be passed to the template. By default this will be
an AllHttpScopesHashModel
(which is a SimpleHash
subclass).
Thus, you can add new variables to the data-model with the
SimpleHash.put(String, Object)
subclass) method.javax.servlet.ServletException
java.io.IOException
protected void postTemplateProcess(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Template template, TemplateModel data) throws javax.servlet.ServletException, java.io.IOException
request
- the actual HTTP requestresponse
- the actual HTTP responsetemplate
- the template that was executeddata
- the data that was passed to the templatejavax.servlet.ServletException
java.io.IOException
protected Configuration getConfiguration()
Configuration
object used by this servlet.
Please don't forget that Configuration
is not thread-safe
when you modify it.