Class ServletContainer

  • All Implemented Interfaces:
    java.io.Serializable, javax.servlet.Filter, javax.servlet.Servlet, javax.servlet.ServletConfig, Container

    public class ServletContainer
    extends javax.servlet.http.HttpServlet
    implements javax.servlet.Filter, Container
    A Servlet or Filter for deploying root resource classes.

    The following sections make reference to initialization parameters. Unless otherwise specified the initialization parameters apply to both server and filter initialization parameters.

    The servlet or filter may be configured to have an initialization parameter "javax.ws.rs.Application" (see ServletProperties.JAXRS_APPLICATION_CLASS) and whose value is a fully qualified name of a class that implements Application. The class is instantiated as a singleton component managed by the runtime, and injection may be performed (the artifacts that may be injected are limited to injectable providers registered when the servlet or filter is configured).

    If the initialization parameter "javax.ws.rs.Application" is not present and a initialization parameter "jersey.config.server.provider.packages" is present (see ServerProperties.PROVIDER_PACKAGES) a new instance of ResourceConfig with this configuration is created. The initialization parameter "jersey.config.server.provider.packages" MUST be set to provide one or more package names. Each package name MUST be separated by ';'.

    If none of the above resource configuration related initialization parameters are present a new instance of ResourceConfig with WebAppResourcesScanner is created. The initialization parameter "jersey.config.server.provider.classpath" is present (see ServerProperties.PROVIDER_CLASSPATH) MAY be set to provide one or more resource paths. Each path MUST be separated by ';'. If the initialization parameter is not present then the following resource paths are utilized: "/WEB-INF/lib" and "/WEB-INF/classes".

    All initialization parameters are added as properties of the created ResourceConfig.

    A new ApplicationHandler instance will be created and configured such that the following classes may be injected onto a root resource, provider and Application classes using @Context annotation: HttpServletRequest, HttpServletResponse, ServletContext, ServletConfig and WebConfig. If this class is used as a Servlet then the ServletConfig class may be injected. If this class is used as a servlet filter then the FilterConfig class may be injected. WebConfig may be injected to abstract servlet or filter deployment.

    Persistence units that may be injected must be configured in web.xml in the normal way plus an additional servlet parameter to enable the Jersey servlet to locate them in JNDI. E.g. with the following persistence unit configuration:

    
     <persistence-unit-ref>
         <persistence-unit-ref-name>persistence/widget</persistence-unit-ref-name>
         <persistence-unit-name>WidgetPU</persistence-unit-name>
     </persistence-unit-ref>
     
    the Jersey servlet requires an additional servlet parameter as follows:
    
     <init-param>
         <param-name>unit:WidgetPU</param-name>
         <param-value>persistence/widget</param-value>
     </init-param>
     
    Given the above, Jersey will inject the EntityManagerFactory found at java:comp/env/persistence/widget in JNDI when encountering a field or parameter annotated with @PersistenceUnit(unitName="WidgetPU").
    See Also:
    Serialized Form
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void destroy()  
      void doFilter​(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, javax.servlet.FilterChain chain)
      Dispatches client requests to the service(URI, URI, HttpServletRequest, HttpServletResponse) method.
      private void doFilter​(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, javax.servlet.FilterChain chain, java.lang.String requestURI, java.lang.String servletPath, java.lang.String queryString)  
      void doFilter​(javax.servlet.ServletRequest servletRequest, javax.servlet.ServletResponse servletResponse, javax.servlet.FilterChain filterChain)  
      ApplicationHandler getApplicationHandler()
      Get the Jersey server-side application handler associated with the container.
      ResourceConfig getConfiguration()
      Return an immutable representation of the current configuration.
      private FilterUrlMappingsProvider getFilterUrlMappingsProvider()
      Resolve the FilterUrlMappingsProvider service via hk2.
      javax.servlet.ServletContext getServletContext()
      Get the servlet context for the servlet or filter, depending on how this class is registered.
      protected java.util.regex.Pattern getStaticContentPattern()
      Get the static content path pattern.
      WebComponent getWebComponent()
      Get WebComponent used by this servlet container.
      void init()  
      void init​(javax.servlet.FilterConfig filterConfig)  
      protected void init​(WebConfig webConfig)
      Initiate the Web component.
      private java.lang.String pickUrlMapping​(java.lang.String requestUri, java.util.List<java.lang.String> filterUrlMappings)
      Picks the most suitable url mapping (in case more than one is defined) based on the request URI.
      void reload()
      Reload the hosted Jersey application using the current configuration.
      void reload​(ResourceConfig configuration)
      Reload the hosted Jersey application using a new configuration.
      Value<java.lang.Integer> service​(java.net.URI baseUri, java.net.URI requestUri, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
      Dispatch client requests to a resource class.
      protected void service​(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
      Receives standard HTTP requests from the public service method and dispatches them to the doXXX methods defined in this class.
      void service​(javax.servlet.ServletRequest req, javax.servlet.ServletResponse res)
      Dispatches client requests to the protected service method.
      private ResponseWriter serviceImpl​(java.net.URI baseUri, java.net.URI requestUri, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
      Dispatch client requests to a resource class and returns ResponseWriter, Servlet's ContainerResponseWriter implementation.
      private void setResponseForInvalidUri​(javax.servlet.http.HttpServletResponse response, java.lang.Throwable throwable)  
      • Methods inherited from class javax.servlet.http.HttpServlet

        doDelete, doGet, doHead, doOptions, doPost, doPut, doTrace, getLastModified
      • Methods inherited from class javax.servlet.GenericServlet

        getInitParameter, getInitParameterNames, getServletConfig, getServletInfo, getServletName, init, log, log
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • filterConfig

        private transient javax.servlet.FilterConfig filterConfig
      • staticContentPattern

        private transient java.util.regex.Pattern staticContentPattern
      • filterContextPath

        private transient java.lang.String filterContextPath
      • filterUrlMappings

        private transient java.util.List<java.lang.String> filterUrlMappings
    • Constructor Detail

      • ServletContainer

        public ServletContainer()
        Create Jersey Servlet container.
      • ServletContainer

        public ServletContainer​(ResourceConfig resourceConfig)
        Create Jersey Servlet container.
        Parameters:
        resourceConfig - container configuration.
    • Method Detail

      • init

        protected void init​(WebConfig webConfig)
                     throws javax.servlet.ServletException
        Initiate the Web component.
        Parameters:
        webConfig - the Web configuration.
        Throws:
        javax.servlet.ServletException - in case of an initialization failure
      • service

        public void service​(javax.servlet.ServletRequest req,
                            javax.servlet.ServletResponse res)
                     throws javax.servlet.ServletException,
                            java.io.IOException
        Dispatches client requests to the protected service method. There's no need to override this method.
        Specified by:
        service in interface javax.servlet.Servlet
        Overrides:
        service in class javax.servlet.http.HttpServlet
        Parameters:
        req - the HttpServletRequest object that contains the request the client made of the servlet
        res - the HttpServletResponse object that contains the response the servlet returns to the client
        Throws:
        java.io.IOException - if an input or output error occurs while the servlet is handling the HTTP request
        javax.servlet.ServletException - if the HTTP request cannot be handled
        See Also:
        Servlet.service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)
      • service

        protected void service​(javax.servlet.http.HttpServletRequest request,
                               javax.servlet.http.HttpServletResponse response)
                        throws javax.servlet.ServletException,
                               java.io.IOException
        Receives standard HTTP requests from the public service method and dispatches them to the doXXX methods defined in this class. This method is an HTTP-specific version of the Servlet.service(javax.servlet.ServletRequest, javax.servlet.ServletResponse) method. There's no need to override this method.
        Overrides:
        service in class javax.servlet.http.HttpServlet
        Parameters:
        request - the HttpServletRequest object that contains the request the client made of the servlet
        response - the HttpServletResponse object that contains the response the servlet returns to the client
        Throws:
        java.io.IOException - if an input or output error occurs while the servlet is handling the HTTP request
        javax.servlet.ServletException - if the HTTP request cannot be handled
        See Also:
        Servlet.service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)
      • setResponseForInvalidUri

        private void setResponseForInvalidUri​(javax.servlet.http.HttpServletResponse response,
                                              java.lang.Throwable throwable)
                                       throws java.io.IOException
        Throws:
        java.io.IOException
      • destroy

        public void destroy()
        Specified by:
        destroy in interface javax.servlet.Filter
        Specified by:
        destroy in interface javax.servlet.Servlet
        Overrides:
        destroy in class javax.servlet.GenericServlet
      • init

        public void init()
                  throws javax.servlet.ServletException
        Overrides:
        init in class javax.servlet.GenericServlet
        Throws:
        javax.servlet.ServletException
      • service

        public Value<java.lang.Integer> service​(java.net.URI baseUri,
                                                java.net.URI requestUri,
                                                javax.servlet.http.HttpServletRequest request,
                                                javax.servlet.http.HttpServletResponse response)
                                         throws javax.servlet.ServletException,
                                                java.io.IOException
        Dispatch client requests to a resource class.
        Parameters:
        baseUri - the base URI of the request.
        requestUri - the URI of the request.
        request - the HttpServletRequest object that contains the request the client made to the Web component.
        response - the HttpServletResponse object that contains the response the Web component returns to the client.
        Returns:
        lazily initialized response status code value provider. If not resolved in the moment of call to Value.get(), -1 is returned.
        Throws:
        java.io.IOException - if an input or output error occurs while the Web component is handling the HTTP request.
        javax.servlet.ServletException - if the HTTP request cannot be handled.
      • serviceImpl

        private ResponseWriter serviceImpl​(java.net.URI baseUri,
                                           java.net.URI requestUri,
                                           javax.servlet.http.HttpServletRequest request,
                                           javax.servlet.http.HttpServletResponse response)
                                    throws javax.servlet.ServletException,
                                           java.io.IOException
        Dispatch client requests to a resource class and returns ResponseWriter, Servlet's ContainerResponseWriter implementation.
        Parameters:
        baseUri - the base URI of the request.
        requestUri - the URI of the request.
        request - the HttpServletRequest object that contains the request the client made to the Web component.
        response - the HttpServletResponse object that contains the response the Web component returns to the client.
        Returns:
        returns ResponseWriter, Servlet's ContainerResponseWriter implementation, into which processed request response was written to.
        Throws:
        java.io.IOException - if an input or output error occurs while the Web component is handling the HTTP request.
        javax.servlet.ServletException - if the HTTP request cannot be handled.
      • init

        public void init​(javax.servlet.FilterConfig filterConfig)
                  throws javax.servlet.ServletException
        Specified by:
        init in interface javax.servlet.Filter
        Throws:
        javax.servlet.ServletException
      • doFilter

        public void doFilter​(javax.servlet.ServletRequest servletRequest,
                             javax.servlet.ServletResponse servletResponse,
                             javax.servlet.FilterChain filterChain)
                      throws java.io.IOException,
                             javax.servlet.ServletException
        Specified by:
        doFilter in interface javax.servlet.Filter
        Throws:
        java.io.IOException
        javax.servlet.ServletException
      • getServletContext

        public javax.servlet.ServletContext getServletContext()
        Get the servlet context for the servlet or filter, depending on how this class is registered.
        Specified by:
        getServletContext in interface javax.servlet.ServletConfig
        Overrides:
        getServletContext in class javax.servlet.GenericServlet
        Returns:
        the servlet context for the servlet or filter.
      • doFilter

        public void doFilter​(javax.servlet.http.HttpServletRequest request,
                             javax.servlet.http.HttpServletResponse response,
                             javax.servlet.FilterChain chain)
                      throws java.io.IOException,
                             javax.servlet.ServletException
        Dispatches client requests to the service(URI, URI, HttpServletRequest, HttpServletResponse) method.

        If the servlet path matches the regular expression declared by the property ServletProperties.FILTER_STATIC_CONTENT_REGEX then the request is forwarded to the next filter in the filter chain so that the underlying servlet engine can process the request otherwise Jersey will process the request.

        Parameters:
        request - the HttpServletRequest object that contains the request the client made to the servlet.
        response - the HttpServletResponse object that contains the response the servlet returns to the client.
        chain - the chain of filters from which the next filter can be invoked.
        Throws:
        java.io.IOException - in case of an I/O error.
        javax.servlet.ServletException - in case of an error while executing the filter chain.
      • doFilter

        private void doFilter​(javax.servlet.http.HttpServletRequest request,
                              javax.servlet.http.HttpServletResponse response,
                              javax.servlet.FilterChain chain,
                              java.lang.String requestURI,
                              java.lang.String servletPath,
                              java.lang.String queryString)
                       throws java.io.IOException,
                              javax.servlet.ServletException
        Throws:
        java.io.IOException
        javax.servlet.ServletException
      • pickUrlMapping

        private java.lang.String pickUrlMapping​(java.lang.String requestUri,
                                                java.util.List<java.lang.String> filterUrlMappings)
        Picks the most suitable url mapping (in case more than one is defined) based on the request URI.
        Parameters:
        requestUri - String representation of the request URI
        filterUrlMappings - set of configured filter url-patterns
        Returns:
        the most suitable context path, or null if empty
      • getFilterUrlMappingsProvider

        private FilterUrlMappingsProvider getFilterUrlMappingsProvider()
        Resolve the FilterUrlMappingsProvider service via hk2. Will only work in Servlet 3 container, as the older API version does not provide access to the filter mapping structure.
        Returns:
        FilterContextPath instance, if available, null otherwise.
      • getStaticContentPattern

        protected java.util.regex.Pattern getStaticContentPattern()
        Get the static content path pattern.
        Returns:
        the Pattern compiled from a regular expression that is the property value of ServletProperties.FILTER_STATIC_CONTENT_REGEX. A null value will be returned if the property is not set or is an empty String.
      • reload

        public void reload()
        Description copied from interface: Container
        Reload the hosted Jersey application using the current configuration.
        Specified by:
        reload in interface Container
      • reload

        public void reload​(ResourceConfig configuration)
        Description copied from interface: Container
        Reload the hosted Jersey application using a new configuration.
        Specified by:
        reload in interface Container
        Parameters:
        configuration - new configuration used for the reload.
      • getApplicationHandler

        public ApplicationHandler getApplicationHandler()
        Description copied from interface: Container
        Get the Jersey server-side application handler associated with the container.
        Specified by:
        getApplicationHandler in interface Container
        Returns:
        Jersey server-side application handler associated with the container.
      • getWebComponent

        public WebComponent getWebComponent()
        Get WebComponent used by this servlet container.
        Returns:
        The web component.