com.google.gwt.user.server.rpc

## Class AbstractRemoteServiceServlet

- java.lang.Object
- - javax.servlet.GenericServlet
  - - javax.servlet.http.HttpServlet
    - - com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet

- All Implemented Interfaces:
    java.io.Serializable, javax.servlet.Servlet, javax.servlet.ServletConfig
  Direct Known Subclasses:
    RemoteServiceServlet

      public abstract class AbstractRemoteServiceServlet
      extends javax.servlet.http.HttpServlet

  An abstract base class containing utility methods.
  See Also:
    Serialized Form

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected java.lang.ThreadLocal<javax.servlet.http.HttpServletRequest>` | `perThreadRequest`
    `protected java.lang.ThreadLocal<javax.servlet.http.HttpServletResponse>` | `perThreadResponse`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `AbstractRemoteServiceServlet()`

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)` Standard HttpServlet method: handle the POST.
    `protected void` | `doUnexpectedFailure(java.lang.Throwable e)` Override this method to control what should happen when an exception escapes the `doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)` method.
    `protected java.lang.String` | `getPermutationStrongName()` Returns the strong name of the permutation, as reported by the client that issued the request, or `null` if it could not be determined.
    `protected javax.servlet.http.HttpServletRequest` | `getThreadLocalRequest()` Gets the `HttpServletRequest` object for the current call.
    `protected javax.servlet.http.HttpServletResponse` | `getThreadLocalResponse()` Gets the `HttpServletResponse` object for the current call.
    `protected void` | `onAfterRequestDeserialized(RPCRequest rpcRequest)` Override this method to examine the deserialized version of the request before the call to the servlet method is made.
    `protected abstract void` | `processPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)` Called by `doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)` for type-specific processing of the request.
    `protected java.lang.String` | `readContent(javax.servlet.http.HttpServletRequest request)` Override this method in order to control the parsing of the incoming request.

    - ### Methods inherited from class javax.servlet.http.HttpServlet

      `doDelete, doGet, doHead, doOptions, doPut, doTrace, getLastModified, service, service`

    - ### Methods inherited from class javax.servlet.GenericServlet

      `destroy, getInitParameter, getInitParameterNames, getServletConfig, getServletContext, getServletInfo, getServletName, init, init, log, log`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### perThreadRequest

          protected transient java.lang.ThreadLocal<javax.servlet.http.HttpServletRequest> perThreadRequest

    - #### perThreadResponse

          protected transient java.lang.ThreadLocal<javax.servlet.http.HttpServletResponse> perThreadResponse

  - ### Constructor Detail

    - #### AbstractRemoteServiceServlet

          public AbstractRemoteServiceServlet()

  - ### Method Detail

    - #### doPost

          public final void doPost(javax.servlet.http.HttpServletRequest request,
                                   javax.servlet.http.HttpServletResponse response)

      Standard HttpServlet method: handle the POST. Delegates to `processPost(HttpServletRequest, HttpServletResponse)`. This doPost method swallows ALL exceptions, logs them in the ServletContext, and returns a GENERIC_FAILURE_MSG response with status code 500.
      Overrides:
        `doPost` in class `javax.servlet.http.HttpServlet`

    - #### doUnexpectedFailure

          protected void doUnexpectedFailure(java.lang.Throwable e)

      Override this method to control what should happen when an exception escapes the `doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)` method. The default implementation will log the failure and send a generic failure response to the client.

      An "expected failure" is an exception thrown by a service method that is declared in the signature of the service method. These exceptions are serialized back to the client, and are not passed to this method. This method is called only for exceptions or errors that are not part of the service method's signature, or that result from SecurityExceptions, SerializationExceptions, or other failures within the RPC framework.

      Note that if the desired behavior is to both send the GENERIC_FAILURE_MSG response AND to rethrow the exception, then this method should first send the GENERIC_FAILURE_MSG response itself (using getThreadLocalResponse), and then rethrow the exception. Rethrowing the exception will cause it to escape into the servlet container.

      Parameters:
        `e` - the exception which was thrown

    - #### getPermutationStrongName

          protected final java.lang.String getPermutationStrongName()

      Returns the strong name of the permutation, as reported by the client that issued the request, or `null` if it could not be determined. This information is encoded in the "X-GWT-Permutation" HTTP header.

    - #### getThreadLocalRequest

          protected final javax.servlet.http.HttpServletRequest getThreadLocalRequest()

      Gets the `HttpServletRequest` object for the current call. It is stored thread-locally so that simultaneous invocations can have different request objects.

    - #### getThreadLocalResponse

          protected final javax.servlet.http.HttpServletResponse getThreadLocalResponse()

      Gets the `HttpServletResponse` object for the current call. It is stored thread-locally so that simultaneous invocations can have different response objects.

    - #### onAfterRequestDeserialized

          protected void onAfterRequestDeserialized(RPCRequest rpcRequest)

      Override this method to examine the deserialized version of the request before the call to the servlet method is made. The default implementation does nothing and need not be called by subclasses.
      Parameters:
        `rpcRequest` -

    - #### processPost

          protected abstract void processPost(javax.servlet.http.HttpServletRequest request,
                                              javax.servlet.http.HttpServletResponse response)
                                       throws java.lang.Throwable

      Called by `doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)` for type-specific processing of the request. Because `doPost` swallows all `Throwables`, this method may throw any exception the implementor wishes.
      Throws:
        `java.lang.Throwable`

    - #### readContent

          protected java.lang.String readContent(javax.servlet.http.HttpServletRequest request)
                                          throws javax.servlet.ServletException,
                                                 java.io.IOException

      Override this method in order to control the parsing of the incoming request. For example, you may want to bypass the check of the Content-Type and character encoding headers in the request, as some proxies re-write the request headers. Note that bypassing these checks may expose the servlet to some cross-site vulnerabilities. Your implementation should comply with the HTTP/1.1 specification, which includes handling both requests which include a Content-Length header and requests utilizing `Transfer-Encoding: chuncked`.
      Parameters:
        `request` - the incoming request
      Returns:
        the content of the incoming request encoded as a string.
      Throws:
        `javax.servlet.ServletException`
        `java.io.IOException`