Apache Rivet 3.2

## Apache Rivet 3.2

### The Rivet Team

The Apache Software Foundation

`<rivet-dev@tcl.apache.org>`

Copyright © 2002-2020 Apache Software Foundation

List of Examples

1. Hello World
2. Generate a Colorful Table
3. Variable Access
4. File Upload
5. File Download
6. XML Messages and Ajax
7. A Calendar Utility

This manual is released as part of Apache/Rivet 3.2.0 (Tuesday 2020-11-03 00:35:08+01:00).

## Introduction to Apache Rivet version 3.2

Apache Rivet is a system for creating dynamic web content by integrating the Tcl programming language within the Apache Web Server. It is designed to be fast, powerful and extensible, consume few system resources, be easy to learn, and to provide the user with a platform that can also be used for other programming tasks outside the web (GUI's, system administration tasks, text processing, database manipulation, XML, and so on).

In this manual, we aim to help get you started, and then writing productive code as quickly as possible, as well as giving you ideas on how to best take advantage of Rivet's architecture to create different styles of web site.

This documentation is focused on the current version of Rivet, but still a work in progress, and, like everything else about Apache Rivet, it is Free Software. If you see something that needs improving, and have ideas or suggestions, don't hesitate to let us know. If you want to contribute directly, better yet!

### Apache MPM and Rivet Bridge Modules

Rivet 3.2 is a successor to Rivet 3.0, a major rewriting of mod_rivet, the Apache HTTP Websever module at the core of Rivet. Unlike in 2.x of mod_rivet, which only supported the prefork MPM (Multiprocessing Module), starting with 3.0 we attained full support of different MPM for the Apache framework.

Threaded MPM integration was achieved by making mod_rivet multithreaded and modular itself, introducing the MPM-module bridge concept. We developed a set of loadable modules which are supposed not only to overcome the issues related to threading but also to offer the best possible MPM mod_rivet integration. As a side effect of this modular design mod_rivet is not only able to integrate with its environment but also to work as a framework for writing more MPM bridges designed along different multi-threading schemes and workload management models. See the internals section of this manual for further reading. MPM bridges are loaded accordingly to a heuristics of rules based on the Apache introspection calls but they can be determined in the configuration. Only a bridge can be loaded at a time.

### Request Processing

Request processing was performed in mod_rivet version 2.x by chaining together 3 scripts

- BeforeScript, if defined in the configuration
- The URI referenced Tcl script or rvt template dermined with respect to the DocumentRoot and following other resource determination methods such the ones offered by mod_alias and by mod_rewrite.
- AfterScript, if defined in the configuration

Errors and exceptions (raised by the ::rivet::abort_page command) are handled by the ErrorScript and AbortScript (ErrorScript has a default implementation if undefined in the configuration)

Rivet 3.2 implements a new request processing scheme entirely based on Tcl. By default rivet 3.2 provides compatiblity with the version 2.x scheme to handle a request but this can be entirely overridden by the developer replacing the central request handling procedure. See the request processing page.

### Acknowledgements

This version of Rivet received substantial contributions from George Petasis who solved several problems with the threaded code, improved the code in several ways and made the CMake based build scripts

|  | Apache Rivet 3.2 Installation