Top Description Fields Constructors Methods
io.undertow.servlet.handlers

public Class DefaultServlet

extends HttpServlet
Class Inheritance
Imports
io.undertow.io.IoCallback, .Sender, io.undertow.server.HttpServerExchange, io.undertow.server.handlers.resource.DefaultResourceSupplier, .DirectoryUtils, .PreCompressedResourceSupplier, .RangeAwareResource, .Resource, .ResourceSupplier, io.undertow.servlet.UndertowServletLogger, io.undertow.servlet.api.DefaultServletConfig, .Deployment, io.undertow.servlet.spec.ServletContextImpl, io.undertow.util.ByteRange, .CanonicalPathUtils, .DateUtils, .ETag, .ETagUtils, .Headers, .Methods, .StatusCodes, jakarta.servlet.DispatcherType, .RequestDispatcher, .ServletConfig, .ServletException, jakarta.servlet.http.HttpServlet, .HttpServletRequest, .HttpServletResponse, java.io.File, .FileNotFoundException, .IOException, java.util.Arrays, .Collections, .Date, .HashSet, .Map, .Set

Default servlet responsible for serving up resources. This is both a handler and a servlet. If no filters match the current path then the resources will be served up asynchronously using the io.undertow.server.HttpHandler#handleRequest(io.undertow.server.HttpServerExchange) method, otherwise the request is handled as a normal servlet request.

By default we only allow a restricted set of extensions.

Todo

this thing needs a lot more work. In particular: - caching for blocking requests - correct mime type - range/last-modified and other headers to be handled properly - head requests - and probably heaps of other things

Author
Stuart Douglas

Field Summary

Modifier and TypeField and Description
public static final String
private Set<String>
public static final String
private boolean
public static final String
private static final Set<String>
private boolean
private Deployment
public static final String
private boolean
private Set<String>
public static final String
public static final String
private boolean
private ResourceSupplier
Inherited from jakarta.servlet.http.HttpServlet:
LEGACY_DO_HEAD

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
private IoCallback
completionCallback(final boolean include)

protected void
doDelete(HttpServletRequest
the HttpServletRequest object that contains the request the client made of the servlet
req
,
HttpServletResponse
the HttpServletResponse object that contains the response the servlet returns to the client
resp
)

Overrides jakarta.servlet.http.HttpServlet.doDelete.

Called by the server (via the service method) to allow a servlet to handle a DELETE request.

protected void
doGet(final HttpServletRequest
an HttpServletRequest object that contains the request the client has made of the servlet
req
,
final HttpServletResponse
an HttpServletResponse object that contains the response the servlet sends to the client
resp
)

Overrides jakarta.servlet.http.HttpServlet.doGet.

Called by the server (via the service method) to allow a servlet to handle a GET request.

protected void
doOptions(HttpServletRequest
the HttpServletRequest object that contains the request the client made of the servlet
req
,
HttpServletResponse
the HttpServletResponse object that contains the response the servlet returns to the client
resp
)

Overrides jakarta.servlet.http.HttpServlet.doOptions.

Called by the server (via the service method) to allow a servlet to handle a OPTIONS request.

protected void
doPost(HttpServletRequest
an HttpServletRequest object that contains the request the client has made of the servlet
req
,
HttpServletResponse
an HttpServletResponse object that contains the response the servlet sends to the client
resp
)

Overrides jakarta.servlet.http.HttpServlet.doPost.

Called by the server (via the service method) to allow a servlet to handle a POST request.

protected void
doPut(HttpServletRequest
the HttpServletRequest object that contains the request the client made of the servlet
req
,
HttpServletResponse
the HttpServletResponse object that contains the response the servlet returns to the client
resp
)

Overrides jakarta.servlet.http.HttpServlet.doPut.

Called by the server (via the service method) to allow a servlet to handle a PUT request.

protected void
doTrace(HttpServletRequest
the HttpServletRequest object that contains the request the client made of the servlet
req
,
HttpServletResponse
the HttpServletResponse object that contains the response the servlet returns to the client
resp
)

Overrides jakarta.servlet.http.HttpServlet.doTrace.

Called by the server (via the service method) to allow a servlet to handle a TRACE request.

private String
getPath(final HttpServletRequest request)

public void
init(ServletConfig
the ServletConfig object that contains configuration information for this servlet
config
)

Overrides jakarta.servlet.http.HttpServlet.init.

Implements jakarta.servlet.Servlet.init.

Called by the servlet container to indicate to a servlet that the servlet is being placed into service.

private boolean
isAllowed(String path, DispatcherType dispatcherType)

private void
serveFileBlocking(final HttpServletRequest req, final HttpServletResponse resp, final Resource resource, HttpServerExchange exchange)

Inherited from jakarta.servlet.http.HttpServlet:
doHeadgetLastModifiedserviceservice

Field Detail

ALLOW_POSTback to summary
public static final String ALLOW_POST
allowedback to summary
private Set<String> allowed
ALLOWED_EXTENSIONSback to summary
public static final String ALLOWED_EXTENSIONS
allowPostback to summary
private boolean allowPost
DEFAULT_ALLOWEDback to summary
public static final String DEFAULT_ALLOWED
DEFAULT_ALLOWED_EXTENSIONSback to summary
private static final Set<String> DEFAULT_ALLOWED_EXTENSIONS
defaultAllowedback to summary
private boolean defaultAllowed
deploymentback to summary
private Deployment deployment
DIRECTORY_LISTINGback to summary
public static final String DIRECTORY_LISTING
directoryListingEnabledback to summary
private boolean directoryListingEnabled
disallowedback to summary
private Set<String> disallowed
DISALLOWED_EXTENSIONSback to summary
public static final String DISALLOWED_EXTENSIONS
RESOLVE_AGAINST_CONTEXT_ROOTback to summary
public static final String RESOLVE_AGAINST_CONTEXT_ROOT
resolveAgainstContextRootback to summary
private boolean resolveAgainstContextRoot
resourceSupplierback to summary
private ResourceSupplier resourceSupplier

Constructor Detail

DefaultServletback to summary
public DefaultServlet()

Method Detail

completionCallbackback to summary
private IoCallback completionCallback(final boolean include)
doDeleteback to summary
protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException

Overrides jakarta.servlet.http.HttpServlet.doDelete.

Doc from jakarta.servlet.http.HttpServlet.doDelete.

Called by the server (via the service method) to allow a servlet to handle a DELETE request. The DELETE operation allows a client to remove a document or Web page from the server.

This method does not need to be either safe or idempotent. Operations requested through DELETE can have side effects for which users can be held accountable. When using this method, it may be useful to save a copy of the affected URL in temporary storage.

If the HTTP DELETE request is incorrectly formatted, doDelete returns an HTTP "Bad Request" message.

Parameters
req:HttpServletRequest

the HttpServletRequest object that contains the request the client made of the servlet

resp:HttpServletResponse

the HttpServletResponse object that contains the response the servlet returns to the client

Annotations
@Override
Exceptions
ServletException:
if the request for the DELETE cannot be handled
IOException:
if an input or output error occurs while the servlet is handling the DELETE request
doGetback to summary
protected void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException

Overrides jakarta.servlet.http.HttpServlet.doGet.

Doc from jakarta.servlet.http.HttpServlet.doGet.

Called by the server (via the service method) to allow a servlet to handle a GET request.

Overriding this method to support a GET request also automatically supports an HTTP HEAD request. A HEAD request is a GET request that returns no body in the response, only the request header fields.

When overriding this method, read the request data, write the response headers, get the response's writer or output stream object, and finally, write the response data. It's best to include content type and encoding. When using a PrintWriter object to return the response, set the content type before accessing the PrintWriter object.

The servlet container must write the headers before committing the response, because in HTTP the headers must be sent before the response body.

Where possible, set the Content-Length header (with the jakarta.servlet.ServletResponse#setContentLength method), to allow the servlet container to use a persistent connection to return its response to the client, improving performance. The content length is automatically set if the entire response fits inside the response buffer.

When using HTTP 1.1 chunked encoding (which means that the response has a Transfer-Encoding header), do not set the Content-Length header.

The GET method should be safe, that is, without any side effects for which users are held responsible. For example, most form queries have no side effects. If a client request is intended to change stored data, the request should use some other HTTP method.

The GET method should also be idempotent, meaning that it can be safely repeated. Sometimes making a method safe also makes it idempotent. For example, repeating queries is both safe and idempotent, but buying a product online or modifying data is neither safe nor idempotent.

If the request is incorrectly formatted, doGet returns an HTTP "Bad Request" message.

Parameters
req:HttpServletRequest

an HttpServletRequest object that contains the request the client has made of the servlet

resp:HttpServletResponse

an HttpServletResponse object that contains the response the servlet sends to the client

Annotations
@Override
Exceptions
ServletException:
if the request for the GET could not be handled
IOException:
if an input or output error is detected when the servlet handles the GET request
doOptionsback to summary
protected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException

Overrides jakarta.servlet.http.HttpServlet.doOptions.

Doc from jakarta.servlet.http.HttpServlet.doOptions.

Called by the server (via the service method) to allow a servlet to handle a OPTIONS request. The OPTIONS request determines which HTTP methods the server supports and returns an appropriate header. For example, if a servlet overrides doGet, this method returns the following header:

Allow: GET, HEAD, TRACE, OPTIONS

There's no need to override this method unless the servlet implements new HTTP methods, beyond those implemented by HTTP 1.1.

Parameters
req:HttpServletRequest

the HttpServletRequest object that contains the request the client made of the servlet

resp:HttpServletResponse

the HttpServletResponse object that contains the response the servlet returns to the client

Annotations
@Override
Exceptions
ServletException:
if the request for the OPTIONS cannot be handled
IOException:
if an input or output error occurs while the servlet is handling the OPTIONS request
doPostback to summary
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException

Overrides jakarta.servlet.http.HttpServlet.doPost.

Doc from jakarta.servlet.http.HttpServlet.doPost.

Called by the server (via the service method) to allow a servlet to handle a POST request. The HTTP POST method allows the client to send data of unlimited length to the Web server a single time and is useful when posting information such as credit card numbers.

When overriding this method, read the request data, write the response headers, get the response's writer or output stream object, and finally, write the response data. It's best to include content type and encoding. When using a PrintWriter object to return the response, set the content type before accessing the PrintWriter object.

The servlet container must write the headers before committing the response, because in HTTP the headers must be sent before the response body.

Where possible, set the Content-Length header (with the jakarta.servlet.ServletResponse#setContentLength method), to allow the servlet container to use a persistent connection to return its response to the client, improving performance. The content length is automatically set if the entire response fits inside the response buffer.

When using HTTP 1.1 chunked encoding (which means that the response has a Transfer-Encoding header), do not set the Content-Length header.

This method does not need to be either safe or idempotent. Operations requested through POST can have side effects for which the user can be held accountable, for example, updating stored data or buying items online.

If the HTTP POST request is incorrectly formatted, doPost returns an HTTP "Bad Request" message.

Parameters
req:HttpServletRequest

an HttpServletRequest object that contains the request the client has made of the servlet

resp:HttpServletResponse

an HttpServletResponse object that contains the response the servlet sends to the client

Annotations
@Override
Exceptions
ServletException:
if the request for the POST could not be handled
IOException:
if an input or output error is detected when the servlet handles the request
doPutback to summary
protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException

Overrides jakarta.servlet.http.HttpServlet.doPut.

Doc from jakarta.servlet.http.HttpServlet.doPut.

Called by the server (via the service method) to allow a servlet to handle a PUT request. The PUT operation allows a client to place a file on the server and is similar to sending a file by FTP.

When overriding this method, leave intact any content headers sent with the request (including Content-Length, Content-Type, Content-Transfer-Encoding, Content-Encoding, Content-Base, Content-Language, Content-Location, Content-MD5, and Content-Range). If your method cannot handle a content header, it must issue an error message (HTTP 501 - Not Implemented) and discard the request. For more information on HTTP 1.1 and the PUT method, see RFC 7231 .

This method does not need to be either safe or idempotent. Operations that doPut performs can have side effects for which the user can be held accountable. When using this method, it may be useful to save a copy of the affected URL in temporary storage.

If the HTTP PUT request is incorrectly formatted, doPut returns an HTTP "Bad Request" message.

Parameters
req:HttpServletRequest

the HttpServletRequest object that contains the request the client made of the servlet

resp:HttpServletResponse

the HttpServletResponse object that contains the response the servlet returns to the client

Annotations
@Override
Exceptions
ServletException:
if the request for the PUT cannot be handled
IOException:
if an input or output error occurs while the servlet is handling the PUT request
doTraceback to summary
protected void doTrace(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException

Overrides jakarta.servlet.http.HttpServlet.doTrace.

Doc from jakarta.servlet.http.HttpServlet.doTrace.

Called by the server (via the service method) to allow a servlet to handle a TRACE request. A TRACE returns the headers sent with the TRACE request to the client, so that they can be used in debugging. There's no need to override this method.

Parameters
req:HttpServletRequest

the HttpServletRequest object that contains the request the client made of the servlet

resp:HttpServletResponse

the HttpServletResponse object that contains the response the servlet returns to the client

Annotations
@Override
Exceptions
ServletException:
if the request for the TRACE cannot be handled
IOException:
if an input or output error occurs while the servlet is handling the TRACE request
getPathback to summary
private String getPath(final HttpServletRequest request)
initback to summary
public void init(ServletConfig config) throws ServletException

Overrides jakarta.servlet.http.HttpServlet.init.

Implements jakarta.servlet.Servlet.init.

Doc from jakarta.servlet.GenericServlet.init.

Called by the servlet container to indicate to a servlet that the servlet is being placed into service. See Servlet#init.

This implementation stores the ServletConfig object it receives from the servlet container for later use. When overriding this form of the method, call super.init(config).

Parameters
config:ServletConfig

the ServletConfig object that contains configuration information for this servlet

Annotations
@Override
Exceptions
ServletException:
if an exception occurs that interrupts the servlet's normal operation
isAllowedback to summary
private boolean isAllowed(String path, DispatcherType dispatcherType)
serveFileBlockingback to summary
private void serveFileBlocking(final HttpServletRequest req, final HttpServletResponse resp, final Resource resource, HttpServerExchange exchange) throws IOException