public class JettyServletContainer extends Object implements ServletContainerAdapter
org.eclipse.jetty.server.Server
.
This ServletContainerAdapter
starts
a Jetty 8 instance on its own and stops it. Only one single context and servlet
is registered, to handle UPnP requests.
This implementation works on Android, dependencies are jetty-server
and jetty-servlet
Maven modules.
Modifier and Type | Field and Description |
---|---|
static JettyServletContainer |
INSTANCE |
protected org.eclipse.jetty.server.Server |
server |
Modifier and Type | Method and Description |
---|---|
int |
addConnector(String host,
int port)
Might be called several times to set up the connectors.
|
static boolean |
isConnectionOpen(javax.servlet.http.HttpServletRequest request)
Casts the request to a Jetty API and tries to write a space character to the output stream of the socket.
|
static boolean |
isConnectionOpen(javax.servlet.http.HttpServletRequest request,
byte[] heartbeat) |
void |
registerServlet(String contextPath,
javax.servlet.Servlet servlet)
Might be called several times to register (the same) handler for UPnP
requests, should only register it once.
|
void |
removeConnector(String host,
int port)
Removes a previously added connector.
|
protected void |
resetServer() |
void |
setExecutorService(ExecutorService executorService)
Might be called several times to integrate the servlet container with Cling's executor
configuration.
|
void |
startIfNotRunning()
Start your servlet container if it isn't already running, might be called multiple times.
|
void |
stopIfRunning()
Stop your servlet container if it's still running, might be called multiple times.
|
public static final JettyServletContainer INSTANCE
protected org.eclipse.jetty.server.Server server
public void setExecutorService(ExecutorService executorService)
ServletContainerAdapter
ExecutorService
,
make sure the Jetty container won't shut it down when ServletContainerAdapter.stopIfRunning()
is called!setExecutorService
in interface ServletContainerAdapter
executorService
- The service to use when spawning new servlet execution threads.public int addConnector(String host, int port) throws IOException
ServletContainerAdapter
addConnector
in interface ServletContainerAdapter
host
- The host address for the socket.port
- The port, might be -1
to bind to an ephemeral port.IOException
- If the connector couldn't be opened to retrieve the registered local port.public void removeConnector(String host, int port)
ServletContainerAdapter
removeConnector
in interface ServletContainerAdapter
host
- The host address of the socket.port
- The port of the connectorpublic void registerServlet(String contextPath, javax.servlet.Servlet servlet)
ServletContainerAdapter
registerServlet
in interface ServletContainerAdapter
contextPath
- The context path prefix for all UPnP requests.servlet
- The servlet handling all UPnP requests.public void startIfNotRunning()
ServletContainerAdapter
startIfNotRunning
in interface ServletContainerAdapter
public void stopIfRunning()
ServletContainerAdapter
stopIfRunning
in interface ServletContainerAdapter
protected void resetServer()
public static boolean isConnectionOpen(javax.servlet.http.HttpServletRequest request)
This space character might confuse the HTTP client. The Cling transports for Jetty Client and Apache HttpClient have been tested to work with space characters. Unfortunately, Sun JDK's HttpURLConnection does not gracefully handle any garbage in the HTTP request!
public static boolean isConnectionOpen(javax.servlet.http.HttpServletRequest request, byte[] heartbeat)
Copyright © 2016 4th Line GmbH, Switzerland. All rights reserved.