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();
acceptClient
public void acceptClient(String pAddress)
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.
pAddress
- The IP address being enabled.
allowConnection
protected boolean allowConnection(Socket s)
Checks incoming connections to see if they should be allowed.
If not in paranoid mode, always returns true.
s
- The socket to inspect.
- Whether the connection should be allowed.
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. a SSLServerSocket
).
pPort
- Port number; 0 for a random port, choosen by the operating
system.backlog
- addr
- If null
, binds to
INADDR_ANY
, meaning that all network interfaces on
a multi-homed host will be listening.
denyClient
public void denyClient(String pAddress)
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.
pAddress
- The IP address being disabled.
getPort
public int getPort()
Returns the port, on which the web server is running.
This method may be invoked after
start()
only.
log
public void log(String pMessage)
Logs a message.
pMessage
- The being logged.
log
public void log(Throwable pError)
Logs an error.
pError
- The error being logged.
run
public void run()
Listens for client requests until stopped. Call
start()
to invoke this method, and
shutdown()
to
break out of it.
setParanoid
public void setParanoid(boolean pParanoid)
Switch client filtering on/off.
pParanoid
- True to enable filtering, false otherwise.
acceptClient(java.lang.String)
, denyClient(java.lang.String)
shutdown
public void shutdown()
Stop listening on the server port. Shutting down our
listener
effectively breaks it out of its
run()
loop.
start
public void start()
throws IOException
Spawns a new thread which binds this server to the port it's
configured to accept connections on.