Save This Page
Home » spring-framework-2.5.4 » org.springframework » web » servlet » [javadoc | source]
org.springframework.web.servlet
abstract public class: FrameworkServlet [javadoc | source]
java.lang.Object
   javax.servlet.GenericServlet
      javax.servlet.http.HttpServlet
         org.springframework.web.servlet.HttpServletBean
            org.springframework.web.servlet.FrameworkServlet

All Implemented Interfaces:
    ApplicationListener, Serializable, Servlet, ServletConfig

Direct Known Subclasses:
    DispatcherServlet

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:

Subclasses must implement #doService 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, org.springframework.web.context.support.XmlWebApplicationContext , if not found. Note that, with the default FrameworkServlet, a custom context class needs to implement the org.springframework.web.context.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.

Field Summary
public static final  String DEFAULT_NAMESPACE_SUFFIX    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". 
public static final  Class DEFAULT_CONTEXT_CLASS    Default context class for FrameworkServlet. 
public static final  String SERVLET_CONTEXT_PREFIX    Prefix for the ServletContext attribute for the WebApplicationContext. The completion is the servlet name. 
Fields inherited from org.springframework.web.servlet.HttpServletBean:
logger
Method from org.springframework.web.servlet.FrameworkServlet Summary:
createWebApplicationContext,   destroy,   doDelete,   doGet,   doOptions,   doPost,   doPut,   doService,   doTrace,   findWebApplicationContext,   getContextAttribute,   getContextClass,   getContextConfigLocation,   getNamespace,   getServletContextAttributeName,   getUsernameForRequest,   getWebApplicationContext,   initFrameworkServlet,   initServletBean,   initWebApplicationContext,   onApplicationEvent,   onRefresh,   postProcessWebApplicationContext,   processRequest,   refresh,   setContextAttribute,   setContextClass,   setContextConfigLocation,   setDispatchOptionsRequest,   setDispatchTraceRequest,   setNamespace,   setPublishContext,   setPublishEvents
Methods from org.springframework.web.servlet.HttpServletBean:
addRequiredProperty,   getServletContext,   getServletName,   init,   initBeanWrapper,   initServletBean
Methods from javax.servlet.http.HttpServlet:
service
Methods from javax.servlet.GenericServlet:
destroy,   getInitParameter,   getInitParameterNames,   getServletConfig,   getServletContext,   getServletInfo,   getServletName,   init,   init,   log,   log,   service
Methods from java.lang.Object:
equals,   getClass,   hashCode,   notify,   notifyAll,   toString,   wait,   wait,   wait
Method from org.springframework.web.servlet.FrameworkServlet Detail:
 protected WebApplicationContext createWebApplicationContext(WebApplicationContext parent) throws BeansException 
 public  void destroy() 
    Close the WebApplicationContext of this servlet.
 protected final  void doDelete(HttpServletRequest request,
    HttpServletResponse response) throws IOException, ServletException 
 protected final  void doGet(HttpServletRequest request,
    HttpServletResponse response) throws 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.

 protected  void doOptions(HttpServletRequest request,
    HttpServletResponse response) throws IOException, ServletException 
    Delegate OPTIONS requests to #processRequest , if desired.

    Applies HttpServlet's standard OPTIONS processing first.

 protected final  void doPost(HttpServletRequest request,
    HttpServletResponse response) throws IOException, ServletException 
 protected final  void doPut(HttpServletRequest request,
    HttpServletResponse response) throws IOException, ServletException 
 abstract protected  void doService(HttpServletRequest request,
    HttpServletResponse response) throws Exception
    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.

 protected  void doTrace(HttpServletRequest request,
    HttpServletResponse response) throws IOException, ServletException 
    Delegate TRACE requests to #processRequest , if desired.

    Applies HttpServlet's standard TRACE processing first.

 protected WebApplicationContext findWebApplicationContext() 
    Retrieve a WebApplicationContext from the ServletContext attribute with the configured name . Thus, 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.

 public String getContextAttribute() 
    Return the name of the ServletContext attribute which should be used to retrieve the WebApplicationContext that this servlet is supposed to use.
 public Class getContextClass() 
    Return the custom context class.
 public String getContextConfigLocation() 
    Return the explicit context config location, if any.
 public String getNamespace() 
    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".
 public String getServletContextAttributeName() 
    Return the ServletContext attribute name for this servlet's WebApplicationContext.

    The default implementation returns SERVLET_CONTEXT_PREFIX + servlet name.

 protected String getUsernameForRequest(HttpServletRequest request) 
    Determine the username for the given request.

    The default implementation takes the name of the UserPrincipal, if any. Can be overridden in subclasses.

 public final WebApplicationContext getWebApplicationContext() 
    Return this servlet's WebApplicationContext.
 protected  void initFrameworkServlet() throws ServletException, BeansException 
    This 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.
 protected final  void initServletBean() throws ServletException, BeansException 
    Overridden method of HttpServletBean , invoked after any bean properties have been set. Creates this servlet's WebApplicationContext.
 protected WebApplicationContext initWebApplicationContext() throws BeansException 
    Initialize and publish the WebApplicationContext for this servlet.

    Delegates to #createWebApplicationContext for actual creation of the context. Can be overridden in subclasses.

 public  void onApplicationEvent(ApplicationEvent event) 
 protected  void onRefresh(ApplicationContext context) throws BeansException 
    Template method which can be overridden to add servlet-specific refresh work. Called after successful context refresh.

    This implementation is empty.

 protected  void postProcessWebApplicationContext(ConfigurableWebApplicationContext wac) 
    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.

 protected final  void processRequest(HttpServletRequest request,
    HttpServletResponse response) throws IOException, ServletException 
    Process this request, publishing an event regardless of the outcome.

    The actual event handling is performed by the abstract #doService template method.

 public  void refresh() throws BeansException 
    Refresh this servlet's application context, as well as the dependent state of the servlet.
 public  void setContextAttribute(String contextAttribute) 
    Set the name of the ServletContext attribute which should be used to retrieve the WebApplicationContext that this servlet is supposed to use.
 public  void setContextClass(Class contextClass) 
 public  void setContextConfigLocation(String contextConfigLocation) 
    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.
 public  void setDispatchOptionsRequest(boolean dispatchOptionsRequest) 
    Set whether this servlet should dispatch an HTTP OPTIONS request to the #doService 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.

 public  void setDispatchTraceRequest(boolean dispatchTraceRequest) 
    Set whether this servlet should dispatch an HTTP TRACE request to the #doService 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.

 public  void setNamespace(String namespace) 
    Set a custom namespace for this servlet, to be used for building a default context config location.
 public  void setPublishContext(boolean publishContext) 
    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.

 public  void setPublishEvents(boolean publishEvents) 
    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.