So we now know how to make a simple web server, what can
we do with it?
Several possibilities come to mind:
- Custom server: if you don't want to install a full
function server for your PC, you can develop your own small,
- Client Input: the server could record input from
the client, e.g. an experiment with distributed stations,
each sending their data to a central server.
- Data Monitoring: your custom server could download
recent data files being written by an experiment.
- Applet interaction: you can setup a two way link
between your client side applet and your server to carry
out special tasks (Chapter
15 discusses such a data monitoring system).
- Initiate External processes: a server could start
up an external process (see Chapter
23: Runtime class) via command to do some task such
as to making a measurement, running a calibration, etc.
- Secure interaction: you can customize your server
to respond only to clients with allowed usernames and passwords.
While one can certainly do such things with C/C++, the Java
code is quite compact and straight-forward because of the
networking and threading capabilities in the core language.
Here again, the portability of Java to different platforms
also greatly increases the flexibility and range of applications
for your specialized servers.
Note that the client and server roles are not absolute. A server
can switch roles and become a client when necessary. For example,
a server at a remote station could monitor some system and provide
information to clients seeking status reports on the system. However,
the server might periodically contact a central server to download
data and status information, thus acting as client to the central
If your server application involves handling very high numbers
of connections, then you should look at section Chapter
9: Supplements: NIO Overview, which gives a brief overview
of the NIO packages that were introduced with Java 1.4. NIO provides
a range of tools to improve the performance of Java communications.
In particular, it includes classes that help deal efficiently
with high numbers of simultaneous connections by allowing for
non-blocking socket communications and the use of thread pools.
Latest update: August 18, 2005