Class WebServer
- All Implemented Interfaces:
Runnable
- Direct Known Subclasses:
ServletWebServer
The WebServer
is a minimal HTTP server, that might be used
as an embedded web server.
Use of the WebServer
has grown very popular amongst users
of Apache XML-RPC. Why this is the case, can hardly be explained,
because the WebServer
is at best a workaround, compared to
full blown servlet engines like Tomcat or Jetty. For example, under
heavy load it will almost definitely be slower than a real servlet
engine, because it does neither support proper keepalive (multiple
requests per physical connection) nor chunked mode (in other words,
it cannot stream requests).
If you still insist in using the WebServer
, it is
recommended to use its subclass, the ServletWebServer
instead,
which offers a minimal subset of the servlet API. In other words,
you keep yourself the option to migrate to a real servlet engine
later.
Use of the WebServer
goes roughly like this: First of all,
create a property file (for example "MyHandlers.properties") and
add it to your jar file. The property keys are handler names and
the property values are the handler classes. Once that is done,
create an instance of WebServer:
final int port = 8088; final String propertyFile = "MyHandler.properties"; PropertyHandlerMapping mapping = new PropertyHandlerMapping(); ClassLoader cl = Thread.currentThread().getContextClassLoader(); mapping.load(cl, propertyFile); WebServer webServer = new WebServer(port); XmlRpcServerConfigImpl config = new XmlRpcServerConfigImpl(); XmlRpcServer server = webServer.getXmlRpcServer(); server.setConfig(config); server.setHandlerMapping(mapping); webServer.start();
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final List
private InetAddress
protected final List
(package private) static final String
private Thread
private boolean
private ThreadPool
private int
protected final XmlRpcStreamServer
protected ServerSocket
-
Constructor Summary
ConstructorsConstructorDescriptionWebServer
(int pPort) Creates a web server at the specified port number.WebServer
(int pPort, InetAddress pAddr) Creates a web server at the specified port number and IP address. -
Method Summary
Modifier and TypeMethodDescriptionvoid
acceptClient
(String pAddress) Add an IP address to the list of accepted clients.protected boolean
Checks incoming connections to see if they should be allowed.protected ServerSocket
createServerSocket
(int pPort, int backlog, InetAddress addr) Factory method to manufacture the server socket.void
denyClient
(String pAddress) Add an IP address to the list of denied clients.int
getPort()
Returns the port, on which the web server is running.Returns theXmlRpcServer
.protected boolean
Returns the client filtering state.void
Logs a message.void
Logs an error.protected ThreadPool.Task
newTask
(WebServer pServer, XmlRpcStreamServer pXmlRpcServer, Socket pSocket) protected ThreadPool
protected XmlRpcStreamServer
void
run()
Listens for client requests until stopped.void
setParanoid
(boolean pParanoid) Switch client filtering on/off.private void
setupServerSocket
(int backlog) Initializes this server's listener socket with the specified attributes, assuring that a socket timeout has been set.void
shutdown()
Stop listening on the server port.void
start()
Spawns a new thread which binds this server to the port it's configured to accept connections on.
-
Field Details
-
serverSocket
-
listener
-
pool
-
accept
-
deny
-
server
-
address
-
port
private int port -
paranoid
private boolean paranoid -
HTTP_11
- See Also:
-
-
Constructor Details
-
WebServer
public WebServer(int pPort) Creates a web server at the specified port number.- Parameters:
pPort
- Port number; 0 for a random port, choosen by the operating system.
-
WebServer
Creates a web server at the specified port number and IP address.- Parameters:
pPort
- Port number; 0 for a random port, choosen by the operating system.pAddr
- Local IP address; null for all available IP addresses.
-
-
Method Details
-
newXmlRpcStreamServer
-
createServerSocket
protected ServerSocket createServerSocket(int pPort, int backlog, InetAddress addr) throws IOException Factory method to manufacture the server socket. Useful as a hook method for subclasses to override when they desire different flavor of socket (i.e. aSSLServerSocket
).- Parameters:
pPort
- Port number; 0 for a random port, choosen by the operating system.backlog
-addr
- Ifnull
, binds toINADDR_ANY
, meaning that all network interfaces on a multi-homed host will be listening.- Throws:
IOException
- Error creating listener socket.
-
setupServerSocket
Initializes this server's listener socket with the specified attributes, assuring that a socket timeout has been set. ThecreateServerSocket(int, int, InetAddress)
method can be overridden to change the flavor of socket used.- Throws:
IOException
- See Also:
-
start
Spawns a new thread which binds this server to the port it's configured to accept connections on.- Throws:
IOException
- Binding the server socket failed.- See Also:
-
setParanoid
public void setParanoid(boolean pParanoid) Switch client filtering on/off.- Parameters:
pParanoid
- True to enable filtering, false otherwise.- See Also:
-
isParanoid
protected boolean isParanoid()Returns the client filtering state.- Returns:
- True, if client filtering is enabled, false otherwise.
- See Also:
-
acceptClient
Add an IP address to the list of accepted clients. The parameter can contain '*' as wildcard character, e.g. "192.168.*.*". You must call setParanoid(true) in order for this to have any effect.- Parameters:
pAddress
- The IP address being enabled.- Throws:
IllegalArgumentException
- Parsing the address failed.- See Also:
-
denyClient
Add an IP address to the list of denied clients. The parameter can contain '*' as wildcard character, e.g. "192.168.*.*". You must call setParanoid(true) in order for this to have any effect.- Parameters:
pAddress
- The IP address being disabled.- Throws:
IllegalArgumentException
- Parsing the address failed.- See Also:
-
allowConnection
Checks incoming connections to see if they should be allowed. If not in paranoid mode, always returns true.- Parameters:
s
- The socket to inspect.- Returns:
- Whether the connection should be allowed.
-
newTask
protected ThreadPool.Task newTask(WebServer pServer, XmlRpcStreamServer pXmlRpcServer, Socket pSocket) throws IOException - Throws:
IOException
-
run
public void run()Listens for client requests until stopped. Callstart()
to invoke this method, andshutdown()
to break out of it.- Specified by:
run
in interfaceRunnable
- Throws:
RuntimeException
- Generally caused by either anUnknownHostException
orBindException
with the vanilla web server.- See Also:
-
newThreadPool
-
shutdown
public void shutdown()Stop listening on the server port. Shutting down ourlistener
effectively breaks it out of itsrun()
loop.- See Also:
-
getPort
public int getPort()Returns the port, on which the web server is running. This method may be invoked afterstart()
only.- Returns:
- Servers port number
-
log
Logs an error.- Parameters:
pError
- The error being logged.
-
log
Logs a message.- Parameters:
pMessage
- The being logged.
-
getXmlRpcServer
Returns theXmlRpcServer
.- Returns:
- The server object.
-