Roxen WebServer 2.2
The Roxen WebServer is highly modular, much more so than Apache. In fact, Roxen sometimes needs a couple of modules to do the simplest task. Many preconfigured modules are included that you can enable, disable and setup from the administrative interface. Roxen modules also can be added on the fly, as opposed to Apache modules. It is also much easier to write your own module for Roxen than it is for Apache. The module writer can concentrate on the actual functions in her module because the Roxen WebServer provides frameworks such as the user interface and I/O operations. This approach also ensures the same user interface, and each virtual site can use its own subset of modules. Roxen modules can be written in Pike or Java.
The Roxen WebServer includes a generic database API (accessible through the Pike interpreter), which is used to connect to a different SQL databases. Pike includes native drivers for Oracle 7/8, (you will need to install OCI, Oracle Client Libraries though), Sybase, Informix, MySQL, Postgres and ODBC data sources. You can use the administrative interface to test database connections or to run SQL queries, to browse tables or to perform any other administrative actions for the database engine.
More interesting is that the Roxen WebServer includes a wrapped MySQL server and uses it for storing the system configuration, usernames, passwords, images and help documents. This MySQL sever can be administered entirely through the Roxen web interface as well. Roxen also includes (available through the web interface) for backing up and restoring its internal databases. The internal web server data can be replicated with a shared MySQL database, an excellent idea because it enables many Roxen servers to share the same configuration data, all stored in a single MySQL database.
There are several ways to run scripts in Roxen, and it supports such standards as CGI, FastCGI and SSI. In addition, a built-in macro language RXML(Roxen Macro Language) is also provided. Most popular language scripts can cooperate with Roxen, however, most of them only as CGI scripts. Of course, the most important thing for most web developers is the question of PHP support. In answer, Roxen lacks native PHP support, but there is an experimental module for embedded PHP. The only officially supported mode of running PHP with Roxen is the old-fashioned way, running PHP scripts as CGI scripts.
Let's move on to Perl. The included Perl module provides support for both Perl scripts and Perl tags inside HTML code. In both cases, the actual Perl code is executed in a subprocess and not in the main Roxen process. The module will catch requests to documents whose path ends with any of the suffixes indicated by the extensions setting in the Perl module configuration. The defaults are .perl and .pl. Perl tags, or processing instructions, will be available if the module setting Enable Perl tag is set to Yes. This means that RXML (see below) pages can use Perl code that looks like:
<?perl print scalar(localtime), "\n"; ?>'
The Perl module also optionally provides a <perl></perl> container for embedding Perl code directly inside static HTML.
Roxen also includes its own scripting extension RXML (Roxen Macro Language); it is called a scripting language, but it's not a full featured language. RXML simply adds a new subset of tags to commonly used HTML tags, and it is similar to XML when you look at its tags and entity-based syntax. The really usable RXML feature is that it can be extended with new tags, by writing new modules or creating wrapper tags.
RXML is simple enough to be used by web designers that do not know programming. The common example for RXML power is the If tag, which makes it possible to create dynamic pages based on conditions. RXML makes it easy to have page optimization for different web browsers and screen resolutions or to limit access to pages that can be viewed only by authenticated users.
The Roxen WebServer includes a Java servlet bridge module, which is its interface to Java servlets. To have Java support loaded, the Roxen installer must find a Java 2.0 SDK-compliant virtual machine during installation. Unfortunately I've had trouble using my favorite Java VM, IBM's Java Develop Kit for Linux 1.3.0, with Roxen. I was unable to configure the Java servlet bridge due to compilation errors. In theory, a Java servlet is installed by adding a copy of the Java servlet bridge module. Java modules are just .class files or .jar files within the normal module directories and behave in the same way as do Pike modules. Roxen documentation includes a detailed instruction for setting this all up and examples of how to do it.