java.lang.Object | ||||
↳ | javax.servlet.GenericServlet | |||
↳ | javax.servlet.http.HttpServlet | |||
↳ | org.springframework.web.servlet.HttpServletBean | |||
↳ | org.springframework.web.servlet.FrameworkServlet |
Known Direct Subclasses |
Base servlet for Spring's web framework. Provides integration with a Spring application context, in a JavaBean-based overall solution.
This class offers the following functionality:
WebApplicationContext
instance per servlet. The servlet's configuration is determined by beans
in the servlet's namespace.
Subclasses must implement doService(HttpServletRequest, HttpServletResponse)
to handle requests. Because this extends
HttpServletBean
rather than HttpServlet directly, bean properties are
automatically mapped onto it. Subclasses can override initFrameworkServlet()
for custom initialization.
Detects a "contextClass" parameter at the servlet init-param level,
falling back to the default context class,
XmlWebApplicationContext
,
if not found. Note that, with the default FrameworkServlet,
a custom context class needs to implement the
ConfigurableWebApplicationContext
SPI.
Passes a "contextConfigLocation" servlet init-param to the context instance, parsing it into potentially multiple file paths which can be separated by any number of commas and spaces, like "test-servlet.xml, myServlet.xml". If not explicitly specified, the context implementation is supposed to build a default location from the namespace of the servlet.
Note: In case of multiple config locations, later bean definitions will override ones defined in earlier loaded files, at least when using Spring's default ApplicationContext implementation. This can be leveraged to deliberately override certain bean definitions via an extra XML file.
The default namespace is "'servlet-name'-servlet", e.g. "test-servlet" for a servlet-name "test" (leading to a "/WEB-INF/test-servlet.xml" default location with XmlWebApplicationContext). The namespace can also be set explicitly via the "namespace" servlet init-param.
Constants | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
String | DEFAULT_NAMESPACE_SUFFIX | Suffix for WebApplicationContext namespaces. |
Fields | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
DEFAULT_CONTEXT_CLASS | Default context class for FrameworkServlet. | ||||||||||
SERVLET_CONTEXT_PREFIX | Prefix for the ServletContext attribute for the WebApplicationContext. |
[Expand]
Inherited Fields | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
From class
org.springframework.web.servlet.HttpServletBean
|
Public Constructors | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Close the WebApplicationContext of this servlet.
| |||||||||||
Return the name of the ServletContext attribute which should be used to retrieve the
WebApplicationContext that this servlet is supposed to use. | |||||||||||
Return the custom context class.
| |||||||||||
Return the explicit context config location, if any.
| |||||||||||
Return the namespace for this servlet, falling back to default scheme if
no custom namespace was set: e.g.
| |||||||||||
Return the ServletContext attribute name for this servlet's WebApplicationContext.
| |||||||||||
Return this servlet's WebApplicationContext.
| |||||||||||
Callback that receives refresh events from this servlet's WebApplicationContext.
| |||||||||||
Refresh this servlet's application context, as well as the
dependent state of the servlet.
| |||||||||||
Set the name of the ServletContext attribute which should be used to retrieve the
WebApplicationContext that this servlet is supposed to use. | |||||||||||
Set a custom context class.
| |||||||||||
Set the context config location explicitly, instead of relying on the default
location built from the namespace.
| |||||||||||
Set whether this servlet should dispatch an HTTP OPTIONS request to
the
doService(HttpServletRequest, HttpServletResponse) method. | |||||||||||
Set whether this servlet should dispatch an HTTP TRACE request to
the
doService(HttpServletRequest, HttpServletResponse) method. | |||||||||||
Set a custom namespace for this servlet,
to be used for building a default context config location.
| |||||||||||
Set whether to publish this servlet's context as a ServletContext attribute,
available to all objects in the web container.
| |||||||||||
Set whether this servlet should publish a ServletRequestHandledEvent at the end
of each request.
| |||||||||||
Set whether to expose the LocaleContext and RequestAttributes as inheritable
for child threads (using an
InheritableThreadLocal ). |
Protected Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Build a LocaleContext for the given request, exposing the request's
primary locale as current locale.
| |||||||||||
Instantiate the WebApplicationContext for this servlet, either a default
XmlWebApplicationContext
or a custom context class , if set. | |||||||||||
Instantiate the WebApplicationContext for this servlet, either a default
XmlWebApplicationContext
or a custom context class , if set. | |||||||||||
Delegate DELETE requests to
processRequest(HttpServletRequest, HttpServletResponse) . | |||||||||||
Delegate GET requests to processRequest/doService.
| |||||||||||
Delegate OPTIONS requests to
processRequest(HttpServletRequest, HttpServletResponse) , if desired. | |||||||||||
Delegate POST requests to
processRequest(HttpServletRequest, HttpServletResponse) . | |||||||||||
Delegate PUT requests to
processRequest(HttpServletRequest, HttpServletResponse) . | |||||||||||
Subclasses must implement this method to do the work of request handling,
receiving a centralized callback for GET, POST, PUT and DELETE.
| |||||||||||
Delegate TRACE requests to
processRequest(HttpServletRequest, HttpServletResponse) , if desired. | |||||||||||
Determine the username for the given request.
| |||||||||||
This method will be invoked after any bean properties have been set and
the WebApplicationContext has been loaded.
| |||||||||||
Overridden method of
HttpServletBean , invoked after any bean properties
have been set. | |||||||||||
Initialize and publish the WebApplicationContext for this servlet.
| |||||||||||
Template method which can be overridden to add servlet-specific refresh work.
| |||||||||||
Post-process the given WebApplicationContext before it is refreshed
and activated as context for this servlet.
| |||||||||||
Process this request, publishing an event regardless of the outcome.
|
[Expand]
Inherited Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
From class
org.springframework.web.servlet.HttpServletBean
| |||||||||||
From class
javax.servlet.http.HttpServlet
| |||||||||||
From class
javax.servlet.GenericServlet
| |||||||||||
From class
java.lang.Object
| |||||||||||
From interface
javax.servlet.Servlet
| |||||||||||
From interface
javax.servlet.ServletConfig
| |||||||||||
From interface
org.springframework.context.EnvironmentAware
|
Suffix for WebApplicationContext namespaces. If a servlet of this class is given the name "test" in a context, the namespace used by the servlet will resolve to "test-servlet".
Default context class for FrameworkServlet.
Prefix for the ServletContext attribute for the WebApplicationContext. The completion is the servlet name.
Return the name of the ServletContext attribute which should be used to retrieve the
WebApplicationContext
that this servlet is supposed to use.
Return the namespace for this servlet, falling back to default scheme if no custom namespace was set: e.g. "test-servlet" for a servlet named "test".
Return the ServletContext attribute name for this servlet's WebApplicationContext.
The default implementation returns
SERVLET_CONTEXT_PREFIX + servlet name
.
Return this servlet's WebApplicationContext.
Callback that receives refresh events from this servlet's WebApplicationContext.
The default implementation calls onRefresh(ApplicationContext)
,
triggering a refresh of this servlet's context-dependent state.
event | the incoming ApplicationContext event |
---|
Refresh this servlet's application context, as well as the dependent state of the servlet.
Set the name of the ServletContext attribute which should be used to retrieve the
WebApplicationContext
that this servlet is supposed to use.
Set a custom context class. This class must be of type
WebApplicationContext
.
When using the default FrameworkServlet implementation,
the context class must also implement the
ConfigurableWebApplicationContext
interface.
Set the context config location explicitly, instead of relying on the default location built from the namespace. This location string can consist of multiple locations separated by any number of commas and spaces.
Set whether this servlet should dispatch an HTTP OPTIONS request to
the doService(HttpServletRequest, HttpServletResponse)
method.
Default is "false", applying javax.servlet.http.HttpServlet's default behavior (i.e. enumerating all standard HTTP request methods as a response to the OPTIONS request).
Turn this flag on if you prefer OPTIONS requests to go through the regular dispatching chain, just like other HTTP requests. This usually means that your controllers will receive those requests; make sure that those endpoints are actually able to handle an OPTIONS request.
Note that HttpServlet's default OPTIONS processing will be applied in any case. Your controllers are simply available to override the default headers and optionally generate a response body.
Set whether this servlet should dispatch an HTTP TRACE request to
the doService(HttpServletRequest, HttpServletResponse)
method.
Default is "false", applying javax.servlet.http.HttpServlet's default behavior (i.e. reflecting the message received back to the client).
Turn this flag on if you prefer TRACE requests to go through the regular dispatching chain, just like other HTTP requests. This usually means that your controllers will receive those requests; make sure that those endpoints are actually able to handle a TRACE request.
Note that HttpServlet's default TRACE processing will be applied
in any case. Your controllers are simply available to override the
default headers and the default body, calling response.reset()
if necessary.
Set a custom namespace for this servlet, to be used for building a default context config location.
Set whether to publish this servlet's context as a ServletContext attribute, available to all objects in the web container. Default is "true".
This is especially handy during testing, although it is debatable whether it's good practice to let other application objects access the context this way.
Set whether this servlet should publish a ServletRequestHandledEvent at the end of each request. Default is "true"; can be turned off for a slight performance improvement, provided that no ApplicationListeners rely on such events.
Set whether to expose the LocaleContext and RequestAttributes as inheritable
for child threads (using an InheritableThreadLocal
).
Default is "false", to avoid side effects on spawned background threads. Switch this to "true" to enable inheritance for custom child threads which are spawned during request processing and only used for this request (that is, ending after their initial task, without reuse of the thread).
WARNING: Do not use inheritance for child threads if you are
accessing a thread pool which is configured to potentially add new threads
on demand (e.g. a JDK ThreadPoolExecutor
),
since this will expose the inherited context to such a pooled thread.
Build a LocaleContext for the given request, exposing the request's primary locale as current locale.
request | current HTTP request |
---|
Instantiate the WebApplicationContext for this servlet, either a default
XmlWebApplicationContext
or a custom context class
, if set.
Delegates to #createWebApplicationContext(ApplicationContext).
parent | the parent WebApplicationContext to use, or null if none |
---|
Instantiate the WebApplicationContext for this servlet, either a default
XmlWebApplicationContext
or a custom context class
, if set.
This implementation expects custom contexts to implement the
ConfigurableWebApplicationContext
interface. Can be overridden in subclasses.
Do not forget to register this servlet instance as application listener on the
created context (for triggering its callback
, and to call
refresh()
before returning the context instance.
parent | the parent ApplicationContext to use, or null if none |
---|
Delegate DELETE requests to processRequest(HttpServletRequest, HttpServletResponse)
.
IOException | |
---|---|
ServletException |
Delegate GET requests to processRequest/doService.
Will also be invoked by HttpServlet's default implementation of doHead
,
with a NoBodyResponse
that just captures the content length.
IOException | |
---|---|
ServletException |
Delegate OPTIONS requests to processRequest(HttpServletRequest, HttpServletResponse)
, if desired.
Applies HttpServlet's standard OPTIONS processing first.
ServletException | |
---|---|
IOException |
Delegate POST requests to processRequest(HttpServletRequest, HttpServletResponse)
.
IOException | |
---|---|
ServletException |
Delegate PUT requests to processRequest(HttpServletRequest, HttpServletResponse)
.
IOException | |
---|---|
ServletException |
Subclasses must implement this method to do the work of request handling, receiving a centralized callback for GET, POST, PUT and DELETE.
The contract is essentially the same as that for the commonly overridden
doGet
or doPost
methods of HttpServlet.
This class intercepts calls to ensure that exception handling and event publication takes place.
request | current HTTP request |
---|---|
response | current HTTP response |
Exception | in case of any kind of processing failure |
---|
Delegate TRACE requests to processRequest(HttpServletRequest, HttpServletResponse)
, if desired.
Applies HttpServlet's standard TRACE processing first.
ServletException | |
---|---|
IOException |
Retrieve a WebApplicationContext
from the ServletContext
attribute with the configured name
. The
WebApplicationContext
must have already been loaded and stored in the
ServletContext
before this servlet gets initialized (or invoked).
Subclasses may override this method to provide a different
WebApplicationContext
retrieval strategy.
null
if not foundDetermine the username for the given request.
The default implementation takes the name of the UserPrincipal, if any. Can be overridden in subclasses.
request | current HTTP request |
---|
null
if none foundThis method will be invoked after any bean properties have been set and the WebApplicationContext has been loaded. The default implementation is empty; subclasses may override this method to perform any initialization they require.
ServletException | in case of an initialization exception |
---|
Overridden method of HttpServletBean
, invoked after any bean properties
have been set. Creates this servlet's WebApplicationContext.
ServletException |
---|
Initialize and publish the WebApplicationContext for this servlet.
Delegates to createWebApplicationContext(ApplicationContext)
for actual creation
of the context. Can be overridden in subclasses.
Template method which can be overridden to add servlet-specific refresh work. Called after successful context refresh.
This implementation is empty.
context | the current WebApplicationContext |
---|
Post-process the given WebApplicationContext before it is refreshed and activated as context for this servlet.
The default implementation is empty. refresh()
will
be called automatically after this method returns.
wac | the configured WebApplicationContext (not refreshed yet) |
---|
Process this request, publishing an event regardless of the outcome.
The actual event handling is performed by the abstract
doService(HttpServletRequest, HttpServletResponse)
template method.
IOException | |
---|---|
ServletException |