diff --git a/LDP/howto/docbook/HOWTO-INDEX/appsSect.sgml b/LDP/howto/docbook/HOWTO-INDEX/appsSect.sgml index cbcc8f24..4f6d540f 100644 --- a/LDP/howto/docbook/HOWTO-INDEX/appsSect.sgml +++ b/LDP/howto/docbook/HOWTO-INDEX/appsSect.sgml @@ -788,9 +788,9 @@ News using the free software package Leafnode. Apache-Overview-HOWTO, -Apache Overview How-to +Apache Overview HOWTO -Updated: February 2002. +Updated: October 2002. An overview of the Apache webserver and related projects. It provides pointers for further information and implementation details. diff --git a/LDP/howto/docbook/HOWTO-INDEX/howtoChap.sgml b/LDP/howto/docbook/HOWTO-INDEX/howtoChap.sgml index 40b35e5d..cbd92e98 100644 --- a/LDP/howto/docbook/HOWTO-INDEX/howtoChap.sgml +++ b/LDP/howto/docbook/HOWTO-INDEX/howtoChap.sgml @@ -144,9 +144,9 @@ mod_dynvhost, mod_roaming, mod_jserv, and mod_php. Apache-Overview-HOWTO, -Apache Overview How-to +Apache Overview HOWTO -Updated: February 2002. +Updated: October 2002. An overview of the Apache webserver and related projects. It provides pointers for further information and implementation details. diff --git a/LDP/howto/linuxdoc/Apache-Overview-HOWTO.sgml b/LDP/howto/linuxdoc/Apache-Overview-HOWTO.sgml index 96fb0fac..d9987835 100644 --- a/LDP/howto/linuxdoc/Apache-Overview-HOWTO.sgml +++ b/LDP/howto/linuxdoc/Apache-Overview-HOWTO.sgml @@ -1,53 +1,36 @@ - - -
Apache Overview HOWTO <author>Daniel Lopez Ridruejo, <tt/ridruejo@apache.org/ -<date>v0.7, 2002-02-28 +<date>v0.9, 2002-10-10 <!-- Abstract --> <abstract> -This document gives you an overview of the Apache webserver and -related projects. It provides pointers for further information and -implementation details. +This document gives you an overview of the different Apache projects, +such as the Apache HTTP server and the Tomcat Servlet and JSP engine. +It provides pointers for further information and implementation details. </abstract> <!-- Table of Contents --> <toc> <sect>Introduction <p> -This document gives you an overview of the Apache web server and -related projects. Apache is the <url name="most popular server on the -Internet" url="http://www.netcraft.com/survey/">. New Apache users, -especially those coming from a Windows background, are often unaware -of the possibilities of Apache, its useful addons and, more in -general, how everything works together. This document aims to show a -general picture of such possibilities with a brief description of each -one and pointers for further information. The information has been -gathered from many sources, including projects' web pages, conference -talks, mailing lists, Apache websites and my own hands-on +This document gives you an overview of the Apache world, including +Apache Software Foundation projects such as the Apache web server +and commercial and open source third party software. Apache is the <url +name="most popular server on the Internet" +url="http://www.netcraft.com/survey/">. New Apache users, especially those +coming from a Windows background, are often unaware of the possibilities of +Apache, its useful addons and, more in general, how everything works +together. This document aims to show a general picture of such possibilities +with a brief description of each one and pointers for further information. +The information has been gathered from many sources, including projects' web +pages, conference talks, mailing lists, Apache websites and my own hands-on experience. Full credit is given to these authors. Without them and their work, this document would not have been possible or necessary. -<p>Disclaimer: I work for <url name="Covalent" -url="http://www.covalent.net">. We provide products and support -services for the Apache webserver, and I mention some of them here, as -I do for our competitors and similar open source projects. -<p>If you find typos, errors, or if you have suggestions for improvement -or comments, please let me know so I can correct the document. <p>Copyright 2002 Daniel Lopez Ridruejo @@ -56,6 +39,27 @@ under the terms of the Open Content Open Publication License, Version 1.1. A copy of the license is included in the appendix entitled "Open Content Open Publication License", or at www.opencontent.org/openpub/. +<sect1>Apache Software Foundation +<p> +<em>The Apache Software Foundation provides support for the Apache community of +open-source software projects. The Apache projects are characterized by a +collaborative, consensus based development process, an open and pragmatic +software license, and a desire to create high quality software that leads +the way in its field. We consider ourselves not simply a group of projects +sharing a server, but rather a community of developers and users.</em> +<p>The ASF is home to many successful Open Source projects, such as the +Tomcat Servlet/JSP engine and the ANT build tool. +<p>You can learn more about the foundation <url name="here" url="http://www.apache.org/foundation/">. + +<sect1>Structure of this document +<p>The first part of this document deals with the Apache Web Server and +related modules. It covers the history, architecture and capabilities of the +server and describes ways in which you can extend and customize it. +<p>The second part of this document covers projects of the Apache Software +Foundation, such as those form the Jakarta and Java XML communities. Rather +than organizing the projects around a certain programming language or +technology, they are organized based on functionality provided. + <sect>Apache <p>Apache is the leading internet web server, with over 60% market share, according to the <url name="Netcraft survey" url="http://www.netcraft.com/survey">. @@ -69,7 +73,7 @@ with a variety of backgrounds and an open development process based on technical <item>Modular architecture. Apache users can easily add functionality or tailor Apache to their specific enviroment. <item>Portable: Apache runs on nearly all flavors of Unix (and Linux), Windows, BeOs, mainframes... -<item>Robustness and security +<item>Robustness and security. </itemize> Many commercial vendors have adopted Apache-based solutions for their products, including <url name="Oracle" url="http://www.oracle.com">, <url name="Red Hat" url="http://www.redhat.com"> and <url name="IBM" url="http://www.ibm.com">. @@ -81,730 +85,221 @@ is good enough for them, it is also good enough for you :) <item><url name="Yahoo!" url="http://www.yahoo.com"> <item><url name="W3 Consortium" url="http://www.w3c.org"> <item><url name="Financial Times" url="http://www.ft.com"> -<item><url name="Network solutions" url="http://www.networksolutions.com"> +<item><url name="Apple" url="http://www.apple.com"> <item><url name="MP3.com" url="http://www.mp3.com" <item><url name="Stanford" url="http://www.stanford.edu"> </itemize> <p> ->From the <url name="Apache website" url="http://www.apache.org">: +>From the <url name="Apache website" url="http://httpd.apache.org">: <p> -<em>The Apache Project is a collaborative software development effort aimed at creating a robust, commercial-grade, featureful, and freely-available source code implementation of an HTTP (Web) server. </em> +<em>The Apache HTTP Server Project is an effort to develop and maintain an +open-source HTTP server for modern operating systems including UNIX and +Windows NT. The goal of this project is to provide a secure, efficient and +extensible server that provides HTTP services in sync with the current HTTP +standards.</em> +<p>Apache started its life as modifications to the NCSA Web server, +one of the first HTTP servers. You can learn more about Apache's history +<url name="here" url="http://httpd.apache.org/ABOUT_APACHE.html">: <p> -The Apache project has grown beyond building just a web server into other critical server side technologies -like Java or XML. The Apache Software Foundation, described in the next section, serves as an umbrella for these projects. +The Apache project has grown beyond building just a web server into developing other +critical server side technologies. The Apache Software Foundation, described +in a later section, serves as an umbrella for these projects. -<p>Related talk -<itemize> -<item>W09: Introduction to the Apache Web Server -<item>F16: Licensing issues in commercial OSS products -</itemize> - -<sect>Apache Software Foundation +<sect1>Architecture +<p>There are two main versions of Apache, the 1.3 series and the +2.0 series. Although both versions are considered production quality, they +differ in architecture and capabilities. <p> -<em>The Apache Software Foundation exists to provide organizational, legal, and financial support for the Apache open-source -software projects. Formerly known as the Apache Group, the Foundation has been incorporated as a membership-based, not-for-profit -corporation in order to ensure that the Apache projects continue to exist beyond the participation of individual volunteers, to -enable contributions of intellectual property and funds on a sound basis, and to provide a vehicle for limiting legal exposure -while participating in open-source software projects. </em> -<p>Or, as Roy T. Fielding, the chairman of the ASF describes it: -<em>The mission of the Apache Software Foundation is to facilitate and support -collaborative software development projects that use the Apache methods of -collaboration over the Internet to create, maintain, and extend the infrastructure -of the Web and enforce the standards that define it.</em> -<p>You can learn more about the foundation <url name="here" url="http://www.apache.org/foundation/">. +<sect2>2.1.1 Apache 1.3 +<p>Apache 1.3 has been ported to a great variety of Unix platforms and is +the most widely deployed Web server on the Internet. -<sect>Developing web applications with Apache +<sect3>Process-based Web server <p> -There are several ways of providing content with Apache. +Apache 1.3 on Unix is a process-based Web server. The Apache program forks +several children at startup. Forking means that a parent process makes identical copies +of itself, called <em>children</em>. Each one of the children can serve a +request independent of the others. This approach has the advantage of +improved stability: If one of the children misbehaves (runs out of control +or has memory leaks) it can be terminated without affecting the others. +The stability comes with a performance penalty. In most Unix operating +systems, creating processes and context switching (assigning processor time +to each process) are expensive operations. Since processes are isolated from +each other, they cannot easily share code and data, consuming system resources. -<p>Related talk -<itemize> -<item>W07: Web Application Technologies - surveying the landscape -</itemize> - -<sect1>Static Content +<sect3>Windows support <p> -Apache can serve static content, like HTML files, images, etc. -If this is all you need, Apache is probably right for you. -A low end Pentium running Linux and Apache can easily saturate a 10Mbps -line serving static content. If that is your primary use of Apache, make -sure you also check the <ref id="performance" name="performance"> section. -<!-- References to mmap, bandwidth management, 2.0, alternative webservers --> -<sect1>Dynamic content -<p>For many websites, the information changes constantly and pages need to -be updated periodically or generated on the fly. This is what server side -programming is all about: programming languages, tools and frameworks that -help developers query and modify information from different sources (databases, -directory services, customer records, other websites) and deliver the content -to the user. -<sect1>CGI scripts -<p> -CGI stands for Common Gateway Interface. CGI scripts are external programs -that are called when a user requests a certain page. The CGI receives information -from the web server (form variable values, type of browser, IP -address of the client, etc) and uses that information to output a web page to the client.<p> -<em>Pros</em>: Since it is an external program, it can be coded in any -language. The same script will also be portable among different web -servers. The CGI protocol is simple, and the return result consists of writing -the response to the standard output. It is a mature technology, and there are -plenty of online and book references and examples. -<p> -<em>Cons</em>: Spawning and initializing a process takes time. Since a -CGI script is external to the server and an instance has to be -launched/destroyed for every request there is a performance hit. If -the process has to load external libraries or perform a connection to -an external database the delay can be important. Same thing if the -number of hits per second is high. CGIs are stateless and session -management has to be achieved by external means. -<p> -Since CGI usually involves heavy text manipulation, scripting languages are -the natural choice. Part of <url name="Perl's" url="http://www.perl.com/"> -popularity stems from its being the CGI programming language of choice. This is due -to its extensive support for string handling and text processing. There are plenty -of freely available CGI scripts and libraries. A good starting point is: -<url name="the Open Directory CGI section" url="http://dmoz.org/Computers/Programming/Internet/CGI/"> -<sect1>Site generators -<p>If your site is high volume, you may run into performance problems -when generating content dynamically. Offline content generators are an -alternative. These solutions separate content from presentation. The -HTML generator reads both content and presentation data and outputs -the static files that build the website. The generator can be run -periodically or triggered by content changes.<p> -Future versions of <ref name="Cocoon" id="cocoon"> -plan on having a batch mode to accomplish this. Another option is the -<url name="Web site meta language" url="http://www.engelschall.com/sw/wml/">. -<sect1>Out of process servers -<p> -The web server can pass dynamic requests to another program. This program -sits idle until a request arrives. The request is processed and returned to the -webserver which in turn returns it to the client. This eliminates the overhead -associated with CGI scripts. Examples of this approach are <ref name="Fast CGI" -id="fastcgi">, <ref name="Java servlets" id="javaservlets">, etc. -<sect1>Fast CGI<label id="fastcgi"> -<p>This standard was developed to address some shortcomings of the CGI -protocol. The main improvement is that a single spawned process can process -more than one request. There is an Apache module that implements the Fast CGI -protocol and libraries for Tcl, Perl etc. More information at <htmlurl -url="http://www.fastcgi.com"> +Apache 1.3 is the first version of Apache to support Windows, although the +port is not considered to be as stable as its Unix counterparts. This is due +to the fact that the server had been designed with Unix in mind and the +Windows port was a later addition that did not integrate very well. -<p>Related talk -<itemize> -<item>F18: FastCGI -- The forgotten treasure -</itemize> +<sect3>Modular +<p>Apache 1.3 has a modular architecture. You can enable or disable modules +to add and remove Web server functionality. You can customize Apache +to improve performance and security. In addition to modules bundled with the +server, there is a great number of third party modules, providing extended +functionality. -<sect1>Java servlets<label id="javaservlets"> <p>To provide Java -servlets, a Java virtual machine (in a process separate from the web -server) processes requests. The JVM can reside in the same computer or -in a different one. This is how many application servers work. Usually -standard libraries are included for server side processing. <ref -name="JServ" id="jserv"> and <ref name="Tomcat" id="tomcat"> are -Apache projects that provide this functionality. Related Java -application server projects can be found -<ref name="here" id="applicationservers"> - -<p>Related talk -<itemize> -<item>W16: Recommendations for Java-Based Web Application Architectures -</itemize> +<sect2>2.1.2 Apache 2.0 +<p>Apache 2.0 is the latest and greatest version of the Apache server. +The architecture contains significant improvements over the 1.3 series. The +following are some of them. -<sect1>Embeded interpreters -<p>An alternative to out-of-process webservers is to embed the interpreter in -the server itself. There are roughly two categories in this kind of modules: -Modules that answer or modify requests directly and modules that process -commands embedded in HTML pages before serving it to the client. The most -representative approaches are <ref name="mod_perl" id="mod_perl"> and <ref -name="PHP" id="php"> +<sect3>Multi Processing Modules +<p>Apache 2.0 abstracts the request processing architecture in special server +modules, called Multi Processing modules (MPMs). This means that Apache can be configured to be a pure process-based +server, a purely threaded server or a mixture of those models. Threads are +contained inside processes and run simultaneously. Unlike processes, threads +can share data and code. Threads are thus more "lighweight" than +processes, and in most cases threaded servers scale better than process +based servers. The disadvantage is that the server is less reliable, since +if a thread misbehaves it can corrupt data or code belonging to other threads. -<sect>Performance and bandwidth management<label id="performance"> +<sect3>Protocol Modules +<p>The protocol handling has been encapsulated in its own layer in +Apache 2.0. That means it is possible to write modules to serve protocols +other than HTTP, such as POP3 for mail or FTP for file transfer. These +protocol modules can take advantage of a solid server framework and module +functionality, such as authentication and dynamic content generation. This +means that, for example, you can authenticate your POP3 users against the +same user database Apache uses for web requests and that FTP content can be +generated dynamically using PHP, CGI or any other technologies explained +later in this document. + +<sect3>Module and filter architecture. +<p>Apache 2.0 maintains the 1.3 modular architecture and adds an additional +extension mechanism: filters. Filters allow modules to modify the content +generated by other modules. They can encrypt, scan for viruses or compress +not only static files but dynamically generated content. + +<sect3>Compatibility issues +<p>Unfortunately, though the module API is similar between versions, they are not identical +and Apache 1.3 modules need to be ported to the new architecture. Most +mainstream modules such as PHP and mod_perl already have Apache 2.0 versions +and others, such as mod_dav and mod_ssl, are now part of the server +distribution. Running modules on a threaded architecture requires specific +changes to modules. Modules distributed with Apache have undergone those +changes and are considered `thread-safe', but third-party modules or +libraries may not. If you need one of those, you will be limited to running +Apache as a pure process-based server. + +<sect3>Portable +<p>Apache runs equally well now on Windows and Unix platforms thanks to the +Apache Portable Runtime (APR) library. It abstracts the differences among +operating systems, such as file or network access APIs. Porting Apache to a +new platform is often as simple as porting the Apache Portable Runtime. +This abstraction layer also provides for platform-specific tuning and +optimization. + + +<sect1>Security +<p>Apache provides several security-related modules for securing and +restricting access to the server. + +<sect2>Authentication +<p>Authentication modules allow you to determine the identity of a client, +usually by verifying an username and password against a backend database. +Apache includes modules to authenticate against plain text and database files. +Additional authentication modules exist that connect Apache to +existing security frameworks or databases, including: NT Domain +controller, Oracle, mySQL, PostgresSQL and so on.<p> +The LDAP modules are specially interesting, as they allow integration with +company and enterprise wide existing directory services. +You can find these modules at <htmlurl url="http://modules.apache.org">. +An Apache 2.0 LDAP module can be found <url name="at the Apache website" +url="http://httpd.apache.org/docs-2.0/mod/mod_auth_ldap.html">. + + +<sect2>Access Control +<p>Apache provides the mod_access module that can restrict access to +resources based on parameters of the client request, such as the presence of +a specific header or the IP address or hostname of the client. Third party +modules allow you to restrict access to clients that misbehave, as explained +in later sections on performance and bandwidth control. + +<sect2>SSL/TLS +<p>The Secure Sockets Layer/Transport Layer Security protocols allow data +between the Web server and client to be encrypted. In Apache 1.3, the +protocols are implemented by mod_ssl, which is distributed separately from the +<url name="mod_ssl website" url="http://www.modssl.org"> and requires +applying patches to the server. This was necessary because of export +regulations on encryption. Most of those restrictions have since then being +lifted and starting with Apache 2.0, mod_ssl is now included as a base +module with Apache. + +<sect1>Proxy +<p>A proxy is a program that performs requests on behalf of another. There +are different kind of Web proxies. A traditional HTTP proxy, also called a +<em>forward proxy</em>, accepts requests from clients (usually Web +browsers), contacts the remote server, and returns the responses. +<p>A reverse proxy is a Web server that is placed in front of other servers, +providing a unified front end and offloading certain tasks, such as SSL +processing, from the backend Web servers. +<p>Apache supports both types of proxy, caching of proxied content and +differente proxy backends such as FTP. + +<sect1>Performance and scalability<label id="performance"> <p>Raw performance is only one of the factors to consider in a web server (flexibility and stability come usually first).<p> Having said that, there are solutions to improve performance on heavy loaded webservers serving static content. If you are in the hosting business Apache also provides ways in which you can measure and control bandwidth usage. Throttling in this context usually means slowing down the delivery of content -based on the file requested, a specific client IP address, etc. This is done +based on the file requested, a specific client IP address and so on. This is done to prevent abuse. <itemize> -<item><bf>mod_mmap</bf>: Included in current Apache releases, it maps to -memory a statically configured list of files that are frequently requested but infrequently changed. -<item><bf><url name="Mod_bandwidth" url="http://www.cohprog.com/mod_bandwidth.html"></bf>: <em>Enables the setting of server-wide or per connection bandwidth limits, based on the specific directory, -size of files and remote IP/domain</em>. -<item><bf><url name="Bandwidth share module" url="http://www.topology.org/src/bwshare/README.html"></bf>: provides bandwidth throttling and balancing by client IP address. It is actively maintained. -<item><bf><url name="Mod_throttle" url="http://www.snert.com/Software/Throttle/index.shtml"></bf>:Throttle bandwidth per virtual host or user. -<item><bf><url name="Mod_throttle_access" url="http://www.fremen.org/apache/"></bf>: useful if you are <url name="slashdotted" url="http://everything2.com/index.pl?node_id=13464">. Allows throttling based on resources -(file, directory, etc.) +<item><bf>mod_mmap</bf>: Included in current Apache 1.3 releases, it maps to +memory a statically configured list of files that are frequently requested +but infrequently changed. This functionality is included in mod_file_cache +in Apache 2. +<item><bf><url name="Mod_bandwidth" +url="http://www.cohprog.com/mod_bandwidth.html"></bf>: This Apache 1.3 module +enables the setting of server-wide or per connection bandwidth limits, based +on the specific directory, size of files and remote IP/domain. +<item><bf><url name="Bandwidth share module" +url="http://www.topology.org/src/bwshare/README.html"></bf>: provides +bandwidth throttling and balancing by client IP address. It supports Apache 1.3 and earlier versions of Apache 2. +<item><bf><url name="Mod_throttle" +url="http://www.snert.com/Software/Throttle/index.shtml"></bf>:Throttle +bandwidth per virtual host or user. For Apache 1.3 </itemize> - -<sect>Virtual hosting -<p> -Apache provides extensive virtual hosting support; there are additional modules that provide specific functionality: - -<itemize> -<item><url name="mod_dynvhost" url="http://funkcity.com/0101/"> -<item><url name="mod_pweb" url="http://www.joytec.de/mod_pweb.html"> -<item><url name="mod_v2h" url="http://www.fractal.net/mod_v2h.tm"> -</itemize> -<p> -In addition, Apache 2.0 allows children serving different domains to have different user ids, improving security. - -<sect>Load balancing -<p>Apache has several modules that allow distribution of requests among servers, for redundancy, increased availability, etc. -<p> -<itemize> -<item><bf>Reverse proxying + mod_rewrite</bf>: There is nothing in Apache that you can not do with <url name="mod_rewrite" -url="http://www.apache.org/docs/mod/mod_rewrite.html"> ... :) This technique consists of having an Apache front-end server acting -as a proxy for the backend servers. You can find more information <url name="here" +<sect2>Load Balancing +<p>Using the Apache reverse proxy and mod_rewrite you can have an Apache +process distributing requests among a variety of backend web servers. +You can find more information at <htmlurl url="http://www.apache.org/docs/misc/rewriteguide.html"> -<!-- <item><bf>Mod_redundancy</bf>: Takeover web and ip in case of failure. You can find more information -<url name="here" url="http://www.ask-the-guru.com">. --> -<item><bf>Mod_backhand</bf>: <em>Allows seamless redirection of HTTP requests from one web server to another. This redirection -can be used to target machines with under-utilized resources, thus providing fine-grained, per-request load balancing of web -requests</em>. More information at <htmlurl url="http://www.backhand.org/">. -</itemize> +<p>Additionally, mod_backhand is an Apache 1.3 module that allows seamless +redirection of HTTP requests from one web server to another. This +redirection can be used to target machines with under-utilized resources, +thus providing fine-grained, per-request load balancing of web +requests. You can find more information at <htmlurl url="http://www.backhand.org/">. -<p>Related talk -<itemize> -<item>TH06: mod_backhand: Internals explained -</itemize> +<sect2>Compression +<p>Apache 2.0 includes mod_deflate, a filtering module that compresses +content before delivering it to clients. This saves bandwidth but can have a +performance impact. The <url name="mod_gzip module" +url="http://www.remotecommunications.com/apache/mod_gzip/"> +provides this functionality for Apache 1.3 -<sect>Secure transactions -<p>There are several solutions that provide secure transactions for Apache servers. -This enables Apache servers to be used for e-commerce or other scenarios where -sensitive information (like your credit card number) is exchanged. -<itemize> -<item><url name="Mod_ssl" url="http://www.modssl.org"> and <url name="Apache-SSL" url="http://www.apache-ssl.org"> are open source -implementations. They are European based, unencumbered by RSA patents. -<item><url name="Red Hat" url="http://www.redhat.com"> offers a secure server derived from Apache. Red Hat acquired C2Net, makers -of StrongHold, another Secure server derived from Apache. -<item><url name="Covalent" url="http://www.covalent.net"> sells secure versions of Apache as well as the CovalentSSL module that -plugs into existing Apache installations. -</itemize> -<p><bf>Credit card transactions</bf> -<p>Apache specific solutions exist for credit card transactions: -<itemize> -<!-- <item><url name="Cypay" url="http://www.cypay.com/"> credit card module for -Apache. Template based, tax calculations. --> -<item><url name="Covalent credator" url="http://www.covalent.net">, multiple -clearinghouse support, failover operation, PHP, Perl, Java support. -</itemize> - - - -<sect>SNMP -<p>SNMP stands for Simple Network Management Protocol. It allows monitoring -and management of network servers, equipment, etc. SNMP modules for Apache -help manage large deployments of web servers, measure the quality of service -offered and integration of Apache in existing management frameworks. -<itemize> -<item>Open source <url name="Mod SNMP" -url="http://www.simpleweb.org/software/packages/mod-snmp/"> for Apache 1.3. -<item><url name="Covalent SNMP" url="http://www.covalent.net"> provides -a commercial SNMP module, support for the latest SNMPv3 standard, integration -with HP-Openview, Tivoli, etc. -</itemize> - - -<sect>Authentication modules -<p>In many situations (subscription services, sensitive information, -private areas), user authentication is required. Apache includes basic authentication -support. Additional authentication modules exist that connect Apache to -existing security frameworks or databases, including: NT Domain -controller, Oracle, mySQL, PostgresSQL, etc.<p> -The LDAP modules are specially interesting, as they allow integration with -company and enterprise wide existing directory services.<p> -You can find these modules at <htmlurl url="http://modules.apache.org">. - - - -<sect>GUIs for Apache -<p>Apache is configured thru text configuration files. This has advantages and -disadvantages. Management can be done from any computer that has internet -access via <url name="ssh" url="http://www.openssh.com">. Editing a -configuration file by hand implies a learning curve. There are open source -graphical tools that make this task easier: -<itemize> -<item><url name="Comanche" url="http://www.covalent.net/projects/comanche/">: -It is crossplatform and runs on Unix/Linux, Windows and Mac. Check the website -for screenshots and in-depth information. Disclaimer: I am the main author of -Comanche, so remember, there are no bugs, only undocumented features :) -<item><url name="gui.apache.org" url="http://gui.apache.org">: GUI interfaces -for Apache project. Programs are in various degrees of development. -<item><url name="Webmin" url="http://www.webmin.com/webmin/">: A nice -web based interface. -</itemize> - -<sect>Writing Apache modules +<sect1>CGI scripts <p> -Apache, like many other successful open source projects, has a modular architecture. -This means that to add or modify functionality you do not need to know the whole -code base. -Source code access for Apache means that you can custom build the server with only the -modules that you need and include your own. -<p> -Extending Apache can be done in C or in a variety of other languages using appropriate modules. -These modules expose Apache's internal functionality to different programming languages like Perl or Tcl. -<p><bf>Writing modules in C</bf>: Apache is written in C and so are the modules distributed with Apache. -The best way to get started writing Apache modules is to read Doug MacEachern and Lincoln Stein's book -<url name="Writing Apache modules with Perl and C" url="http://www.modperl.com">. It is a well-written, easy to read book by two -Apache and Perl gurus. The above link will lead you to the book website, which has some of its chapters online. -If you don'e have the money to buy the book and cannot borrow it from a friend, there are other ways. -You can read some of the online tutorials on writing Apache modules: Ken Coar, an Apache Group member, has a nice -<url name="tutorial and slides online" url="http://web.golux.com/coar/slides/">. -An overview of the Apache architecture can be found <url name="here" url="http://www.grad.math.uwaterloo.ca/~oadragoi/CS746G/a1/apache_conceptual_arch.html">. -The Apache website has some <url name="API notes" url="http://www.apache.org/docs/misc/API.html"> that can help you get started. You are also encouraged to browse the -source code of the modules included with Apache. Apache includes a simple one -(mod_example.c) for that purpose. -<p><bf>Writing Apache modules in other languages</bf>: There is a variety of Apache -modules that enable third party languages to access the internal Apache API. -The most popular is <ref name="mod_perl" id="mod_perl">. -<p>If you have any questions about the development of an Apache module you -should join the Apache modules mailing list at <htmlurl url="http://modules.apache.org">. -Remember to do your homework first, research past messages and check -all the documentation previously described. Chances are somebody had the -same problem that you are experiencing and he got an useful response. -<p>If you are interested in the development of core Apache itself, you should -checkout the <url name="Apache development site" url="http://dev.apache.org">. +CGI stands for Common Gateway Interface. CGI programs are external programs +that are called when a user requests a certain page. The CGI program receives information +from the web server (form variable values, type of browser, IP +address of the client and so on) and uses that information to output a web page to the client. +<p>Apache has support for CGIs and there is a third-party Apache 1.3 module +that provides support for the FastCGI protocol. It avoids the performance +penalties associated with starting and stopping a CGI program with every +request. You can find it at <htmlurl url="http://fastcgi.com/"> - -<!-- <sect>Configuring Apache --> -<sect>Apache books -<p> -A comprehensive list of Apache books can be found <url -url="http://httpd.apache.org/info/apache_books.html" name="here">. -<p>A couple of books -that I personally recommend are: -<itemize> -<item><url url="http://www.modperl.com" -name="Writing Apache Modules with Perl and C"> if you are interested in Apache -internals. -<item><url name="Apache server for dummies" url="http://apache-server.com/ForDummies/"> -if you want to get started with Apache. Do not get fooled by the name. This is -a comprehensive book packed with useful information. -</itemize> - -<sect> WebDAV -<p> ->From the <url name="WebDAV website" url="http://www.webdav.org">: <em>WebDAV stands for -"Web-based Distributed Authoring and Versioning". It is a set of extensions to the HTTP protocol -which allows users to collaboratively edit and manage files on remote web servers.</em> -<p>It is the open standards equivalent of the MS FrontPage protocol, but it takes -the idea several steps further. It enables other protocols to be built on top of it (See -the <url name="Subversion website" url="http://subversion.tigris.org/"> for an example. - - - -<sect>Java projects -<p> -For historical reasons, Java projects can be found both under the -java.apache.org and jakarta.apache.org umbrellas. The final goal is that over -time all Java projects will move under the Jakarta umbrella. -<p><em>The goal of the Jakarta Project is to provide commercial-quality -server solutions based on the Java Platform that are developed in an -open and cooperative fashion.</em> -<p>The Java on Apache community is a very dynamic and active one, as shown by -the quantity and quality of its subprojects, which are described now. - -<sect1>Ant -<p>You can think of Ant as the Java equivalent of make. It is a big success -with Java related projects. Developers can write Java instead of shell -commands. This means increased portability and extensibility. Instead of -Makefiles Ant has XML files. -<!-- Example Ant makefile --> -You can learn more about ANT <url name="here" -url="http://jakarta.apache.org/ant/index.html">. - -<p>Related talk -<itemize> -<item>F19: Using Ant to build Java code -</itemize> - -<sect1>ORO and Regexp -<p>ORO is a complete package that provides regular experession support for -Java. It includes Perl5 regular expression support, glob expressions, etc. -All under the Apache license. -You can learn more about ORO <url name="here" url="http://jakarta.apache.org/oro/index.html">. You can find another lightweight regular expression package, -<url name="Regexp" url="http://jakarta.apache.org/regexp/">. -<sect1>Slide -<p><em>Slide is a high-level content management framework. -Conceptually, it provides a hierarchical organization of binary -content which can be stored into arbitrary, heterogenous, distributed -data stores. In addition, Slide integrates security, locking and versioning -services.</em> -<p>If you are familiar with <url name="WedDAV" url="http://www.webdav.org">, -Slide uses it extensively. In simple words, what Slides provides is an unified, -simple way to access resources and information. These resources can be stored -in a database, the filesystem, etc. and accessed either thru a WebDAV interface -or Slide's own API. -<p> -You can learn more at the <url name="Slide home page" -url="http://jakarta.apache.org/slide/index.html">. - -<sect1>Struts -<p>Struts is an Apache project that tries to bring the -Model-View-Controller (MVC) design paradigm to web development. It -builds on <url name="Servlet" -url="http://java.sun.com/products/servlet"> and <url name="JavaServer -Pages" url="http://java.sun.com/products/jsp"> technologies. The model -part is made up of Java server objects, which represent the internal -state of the application. Enterprise Java Beans are commonly used -here. The view part is constructed via JavaServer Pages (JSP), which -is a combination of static HTML/XML and Java. JSPs also allow the -developer to define new tags. The controller part consists of servlets, -which take requests (GET/POST) from the client, perform actions on the -model and update the view by providing the appropriate JSP. You can -learn more at the <url name="Struts project pages" -url="http://jakarta.apache.org/struts/index.html">. -<sect1>Taglibs -<p>The JavaServer pages technology allows developers to provide functionality -by adding custom tags. The Taglibs project intends to be a common repository -for these extensions. It includes tags for common utilities (i.e. date), -SQL database access, etc. -<p> -You can learn about TagLibs -<url name="here" url="http://jakarta.apache.org/taglibs/index.html">. -More documentation is included in the package. -<sect1>Tomcat<label id="tomcat"> -<p>Tomcat is the flagship product of the Jakarta project. -It is the official reference implementation for the Java -Servlet 2.2 and JavaServer Pages 1.1 technologies. -<p> -You can learn more in the <url name="Tomcat homepage" -url="http://jakarta.apache.org/tomcat/index.html">. The Tomcat project -was started with a code donation from Sun Microsystems. - - - -<sect1>Velocity -<p><em>Velocity is a Java based template engine. It can be used as a -stand-alone utility for generating source code, HTML, reports, or -it can be combined with other systems to provide template services.</em> -Velocity has a Model View Controller paradigm that enforces separation of -Java code and the HTML template.<p> -You can learn more about Velocity <url name="here" -url="http://jakarta.apache.org/velocity/index.html">. Velocity is part of -other projects like <ref name="Turbine" id="turbine"> - -<sect1>Watchdog -<p>The Watchdog project provides the validation tests for the Servlet and -JavaServer Pages specifications. You can find more information <url name="here" -url="http://jakarta.apache.org/watchdog/index.html"> - -<sect1>JServ<label id="jserv"> - -<p><em><url name="Apache JServ" -url="http://java.apache.org/jserv/index.html"> is in a maintenance -only mode at this point. This means that there will be no new official -releases and that only well tested patches are being committed. No new -features are being added. If you are looking for the latest -implementation of a Java Servlet Engine and/or Java Server Pages (JSP) -then you should consider using the <ref name="Jakarta Tomcat" -id="tomcat"> product available from the Jakarta Project.</em> - -<!-- -<p><em>Apache JServ is a 100% pure Java servlet engine fully compliant with the -JavaSoft java Servlet APIs 2,0 specification.(...)The result is a pure servlet -engine that works on any "version 1.1" Java Virtual Machine.</em> -<p> -JServ is one of the original Java Apache projects. <ref name="Tomcat" -id="tomcat"> will be the successor of JServ once it is finished. -You can learn more at the <url name="JServ home page" -url="http://java.apache.org/jserv/index.html">. ---> - -<sect1>JSSI -<p>JSSI is an implementation of server side included in the Java language. -Server side includes are tags includes in files that get processed before -the page is served to the client (for example to include the current date) -You can find more information <url name="here" url="http://java.apache.org/jservssi/index.html">. -<sect1>Apache JMeter -<p><em>The Apache JMeter is a 100% pure Java desktop application designed to -load test functional behavior and measure performance. It was originally -designed for testing Web Applications but has since expanded to other test -functions.</em><p>It can be used to test static and dynamic resources and get -inmediate visual feedback. -<p>You can see some screenshots and learn more <url name="here" -url="http://java.apache.org/jmeter/index.html">. -<sect1>Server Pages Foundation Classes -<p>SPFC is a set of libraries to help solve common problems in server side -application development. They focus on two of them: -<itemize> -<item><bf>Mixing HTML and Java</bf>: Provides a library of classes that takes -care of the HTML generation and that can be integrated with the rest of the -Java code. -<item><bf>HTTP is a stateless protocol</bf>: SPFC provides session support, -so applications can keep track of users as they navigate the website. The -application developer does not need to worry about the specific details of -page generation. He can think in more general traditional application terms. -You can learn more about SPFC <url name="here" -url="http://java.apache.org/spfc/index.html"> -</itemize> - -<!-- Removed from java.apache.org - -<sect1>mod_java -<p>Is the Java equivalent of mod_perl. Allows access to the Apache internals -from inside a JVM. This allows for increased flexibility and the possibility -of writing Apache Modules directly in Java. -Unfortunately, no code seems -to be present at the moment. You can find more information <url -name="here" url="http://java.apache.org/mod_java/index.html">. ---> -<sect1>Element Construction Set -<p><em>Element Construction Set (ECS) is a JAVA API for generating elements for -various markup languages. It directly supports HTML 4.0 and XML, but can -easily be extended to create tags for any markup language.</em> -<p>It allows the generation of mark up tags using Java function calls, -leading to a much cleaner solution than mixing HTML and Java code. -You can learn more at the <url name="ECS project page" -url="http://java.apache.org/ecs/index.html">. -<sect1>Avalon -<p>If you are familiar with Perl or BSD systems, Avalon is roughly the -equivalent of <url name="CPAN" url="http://www.cpan.org"> or the Ports -collection for Java Apache technologies. It does not only provide guidelines -for a common repository of code, it goes one step further: <em>is an effort to -create, design, develop and maintain a common framework for server -applications written using the Java language.</em> It provides the means so -server side Java projects can be easily integrated and build on each other. -<sect1>JAMES (Java Apache Mail Enterprise Server) -<p>Complementary to the other Apache server side technologies, JAMES provides -<em>a 100% pure Java server designed to be a complete and portable enterprise -mail engine solution based on currently available open protocols (SMTP, POP3, -IMAP, HTTP)</em> -<p>More information can be found <url name="here" -url="http://jakarta.apache.org/james/index.html">. -<sect1>PicoServer -<p>A lightweight HTTP/1.0 server in pure Java. The project seems to be stalled -and no code is available. The website and CVS are no longer available. -<!-- can be found <url name="here" url="http://java.apache.org/picoserver/index.html">. --> -<sect1>Jetspeed -<p><url name="Jetspeed" url="http://jakarta.apache.org/jetspeed/site/index.html"> -is a web based portal written in Java. It has a modular API that -allows aggregation of different data sources (XML, SMTP, iCalendar) - -<p>Related talk: -<itemize> -<item>TH11: Writing an enterprise information portal with JetSpeed -</itemize> - -<sect1>Turbine<label id="turbine"> -<p><em>Turbine is a servlet based framework that allows experienced Java developers -to quickly build secure web applications</em>. Turbine brings together a platform -for running Java code <em>and</em> reusable components, everything under the Apache -license. Some of its features include: -<itemize> -<item>Integration with template systems -<item>MVC style development -<item>Access Control Lists -<item>Localization support -<item>etc. -</itemize> -If you are interested, you can visit the <url name="Turbine web site" -url="http://java.apache.org/turbine">. - -<sect1>Jyve -<p>The <url name="Jyve project" url="http://java.apache.org/jyve/index.html"> is -built on top of the Turbine framework. It is an application that provides a web -based FAQ system -<sect1>Alexandria -<p>Alexandria is an integrated documentation management system. It brings -together technologies common to many open source projects like CVS and JavaDoc. -The goal is to integrate source code and documentation to encourage code -documentation and sharing. More information <url name="here" url="http://java.apache.org/alexandria/index.html"> - -<p>Related talk -<itemize> -<item>W06: An introduction to Alexandria -</itemize> - -<sect1>Log4j -<p>This package provides a logging framework that Java applications can use. -It can be enabled at runtime without modifying the binary and has been designed -with performance in mind. It can be found <url name="here" -url="http://jakarta.apache.org/log4j/docs/index.html"> - - -<sect>XML projects -<p>Directly from the Apache XML project website, its goals are: -<itemize> - <item><em>To provide commercial-quality standards-based XML solutions that -are developed in an open and cooperative fashion.</em> - <item><em>To provide feedback to standards bodies (such as IETF and W3C) from -an implementation perspective.</em> - <item><em>To be a focus for XML-related activities within Apache projects</em> -</itemize> - - The project homepage is located at <htmlurl url="http://xml.apache.org">. -It is an umbrella for a variety of subprojects. -<sect1>Introduction to XML -<p> -This is a quick introduction to XML. To know more about XML, a good starting -point is <htmlurl url="http://www.xml.com">. XML is a markup language (think -HTML) for describing structured content using tags and attributes. Once -content is separated from presentation, you can choose how to display -(cellphone, html, text) or exchange it. The XML standard only describes how -the tags and attributes can be arranged, not its names of what they mean. -Apache provides the tools described in the following sections. - -<sect1>Xerces -<p> -The Xerces project provides XML parsers for a variety of languages, including -Java, C++ and Perl. The Perl bindings are based on the C++ sources. -There are Tcl bindings for Xerces in the 2.0 version of <url -name="TclXML" url="http://tclxml.sourceforge.net/">, by Steve -Ball. This 2.0 version is available thru the <url name="SourceForge" -url="http://sourceforge.net/projects/tclxml"> project page. -An XML parser is a tool used for programatic access to XML documents. -This is a description of the standards supported by Xerces: -<itemize> -<item><url name="DOM" url="http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html">: DOM stands for Document Object Model. XML documents -are hierarchical by nature (nested tags). XML documents can be accessed thru -a tree like interface. The process is as follow: -<itemize> -<item>Parse document -<item>Build tree -<item>add/delete/modify nodes -<item>Serialize tree -</itemize> -<item><url name="SAX" url="http://www.megginson.com/SAX/index.html">:Simple API for XML. This is a stream based API. This means -that we will receive callbacks as elements are encountered. These callbacks -can be used to construct a DOM tree for example. -<item><url name="XML Namespaces" url="http://www.w3.org/TR/REC-xml-names/"> -<item>XML Schema: The XML standard provides the syntax for writing documents. XML -Schema provides the tools for defining the <em>contents</em> of the XML -document (semantics). It allows to define that a certain element in the -document must be an integer between 10 and 20, etc. -</itemize> -The Xerces XML project initial code base was donated by IBM. You can find more -information in the <url name="Xerces Java" url="http://xml.apache.org/xerces-j/index.html">, <url name="Xerces C++" url="http://xml.apache.org/xerces-c/index.html"> and <url name="Xerces Perl" url="http://xml.apache.org/xerces-p/index.html"> homepages. - -<sect1>Xalan -<p> -Xalan is an XSLT processor available for Java and C++. -XSL is a style sheet language for XML. The T is for Transformation. XML -is good at storing structured data (information). We sometimes need to -display this data to the user or apply some other transformation. -Xalan takes the original XML document, reads transformation configuration -(stylesheet) and outputs HTML, plain text or another XML document. -You can learn more about Xalan at the <url name="Xalan Java" url="http://xml.apache.org/xalan-j/index.html"> and <url name="Xalan C++" url="http://xml.apache.org/xalan-c/index.html"> project homepages. -<sect1>FOP -<p>From the website: <em>FOP is a Java application that reads a formatting -object tree and then turns it into a PDF document</em>. So FOP takes an -XML document and outputs PDF, in a similar way that Xalan does with HTML -or text. You can learn more about FOP <url name="here" -url="http://xml.apache.org/fop">. - - -<sect1>Cocoon<label id="cocoon"> -<p>Cocoon leverages other Apache XML technologies like Xerces, Xalan and FOP -to provide a comprehensive publishing framework. Cocoon is based around -XML and XSL and targeted to sites of medium - high complexity. -It separates content, logic and presentation as described in the website: -<itemize> -<item><bf>XML creation</bf>: <em>the XML file is created by the content owners. -They do not require specific knowledge on how the XML content is further -processed rather than the particular chosen DTD/namespace. -This layer is always performed by humans directly through normal text editors -or XML-aware tools/editors.</em> -<item><bf>XML process generators</bf>:<em> the logic is separated from the content -file.</em> -<item><bf>XSL rendering</bf>:<em> The created document is then rendered by applying an -XSL stylesheet to it and formatting it to the specified resource type (HTML, -PDF, XML, WML, XHTML)</em> -</itemize> -You can learn more about Cocoon at the <url name="project homepage" url="http://xml.apache.org/cocoon/index.html"> - - - -<sect1>Xang -<p>The goal of the Xang project is to <em>make it easy for developers to build -commercial quality XML aware applications for the Web.</em> The application -logic is defined in a hierarchical XML file which can be scripted via -JavaScript. This file defines how to access the data (which can be other XML -files, Java plug-ins, etc.). The Xang engine takes care of mapping HTTP -requests to the appropriate handlers. -You can learn more about Xang at the <url name="project homepage" url="http://xml.apache.org/xang">. -<!--include source code for hello world?--> -<sect1>SOAP -<p><em>Apache SOAP ("Simple Object Access Protocol") is an implementation of -the <url name="SOAP submission" url="http://www.w3.org/TR/SOAP"> to W3C. -It is based on, and supersedes, the IBM SOAP4J implementation</em>. -<p><em>From the draft W3C specification: SOAP is a lightweight protocol for -exchange of information in a decentralized, distributed environment. It is an -XML based protocol that consists of three parts</em>: -<itemize> -<item><em>An envelope that defines a framework for describing what is in a -message and how to process it</em>, -<item><em>a set of encoding rules for expressing instances of -application-defined datatypes</em>, and -<item><em>a convention for representing remote procedure calls and -responses</em>. -</itemize> -Think of SOAP as an XML based remote procedure call or CORBA -system. It is based on HTTP and XML. On the one hand this means it is -verbose and slow compared to other systems. On the other hand it eases -interoperatibility, debugging and development of clients and servers -for a variety of languages (C, Java, , Perl, Python, Tcl, etc.) since -most modern languages have HTTP and XML modules. You can learn more at -the <url name="Apache SOAP homepage" -url="http://xml.apache.org/soap/"> -<p>Related talk -<itemize> -<item>W02: Rub-a-dub-dub-dubya: SOAP and the Web -</itemize> - -<sect1>Batik -<p><em>Batik is a Java based toolkit for applications that want to use images in the -<url name="Scalable Vector Graphics (SVG)" url="http://www.w3.org/TR/SVG/"> format for various -purposes, such as viewing, generation or manipulation.</em> -<p> It is XML centric and compliant with the W3C specification. It is a bit atypical from other Apache -projects, in that it provides a graphical component. Batik provides hooks to extend the -framework thru custom tags and it allows conversion from SVG to other formats like JPEG or PNG. -<p><url name="Batik homepage" url="http://xml.apache.org/batik/index.html"> -<p>Related talk -<itemize> -<item>W14: Introduction to the Batik project. -</itemize> - -<sect1> Crimson -<p> Crimson is an alternative, Java-based, XML parser with support for XML 1.0 thru a variety -of interfaces. It is the parser currently shipping in Sun products, and an intermediate -step until the version 2 of Xerces is released. -<p><url name="Crimson homepage" url="http://xml.apache.org/crimson/index.html"> - -<p>Related talk -<itemize> -<item>TH08: Java API for XML processing (JAXP) version 1.1 -</itemize> - -<sect1>Other XML projects -<p>There are other projects based on Apache and XML that do not live under the -Apache XML umbrella -<itemize> -<item><url name="mod_xslt" url="http://modxslt.sourceforge.net/"> is a C -based module for delivering XML/XSL based content. It has a GPL -license. -<item><url name="AxKit" url="http://axkit.org"> <label id="axkit"> is -an XML based Application Server for mod_perl and Apache. It allows -separation of content and presentation. -</itemize> - -<p>Related talk -<itemize> -<item>TH04: AxKit - An XML Application server for Apache -</itemize> - -<sect>Perl -<p>Perl and Apache make a powerful and popular combination. There are several projects -that use these two technologies. -<sect1>Embperl -<p>Embperl allows embedding of Perl in HTML pages. These pages are processed in the server -before they are delivered to the client. It is similar to <ref name="PHP" id="php">. -You can learn more <url name="here" url="http://perl.apache.org/embperl/index.html">. -<sect1>Mason -<p>The <url name="Mason project" url="http://www.masonhq.com/"> embeds Perl in HTML -with a reusable component model approach. It allows caching, templating, etc. -<sect1>Mod_Perl<label id="mod_perl"> +<sect1>Development Platform Integration +<p>Web applications are written in high-level languages such as Java, Perl, +C# and so on and Apache has several modules that integrate them with the +server. In many cases the modules expose the Apache API so entire Apache +modules can be written in those languages. +<sect2>Perl<label id="mod_perl"> <p> <url name="mod_perl" url="http://perl.apache.org/"> is one of the most veteran and successful Apache projects. It embeds a Perl interpreter @@ -813,33 +308,33 @@ Perl. This allows for entire modules to be written in Perl or a mixture of Perl and C code. In the 1.3 Apache versions, one interpreter has to be embedded in each child, since the server is multiprocess based. In heavy traffic dynamic sites, the increased -size could make a difference. Apache 2.0 is multithreaded, as recent -versions of Perl are. The next generation of mod_perl takes advantage -of this and allows for sharing of code, data and session state among +size could make a difference. In threaded versions of Apache 2.0 +mod_perl allows for sharing of code, data and session state among interpreters. This results in a faster, leaner solution. -<p> -Make sure you also check <ref id="axkit" name="axkit"> +<p>mod_perl is in itself another platform, with a great variety of modules +available such as <url name="Mason" url="www.masonhq.com"> and +<url name="Embperl" url="http://perl.apache.org/embperl/"> for +embedding Perl in HTML pages and <url name="AxKit" url="axkit.org"> for +XML-driven templates. - - - -<sect>PHP<label id="php"> +<sect2>PHP<label id="php"> <p>From the <url name="PHP" url="http://www.php.net"> website: <em>PHP is a server-side, cross-platform, HTML embedded scripting -language.</em> PHP is a scripting language like Perl, Python or Tcl. It is -the <url name="most popular module for Apache" url="http://www.securityspace.com/s_survey/data/man.200102/apachemods.html"> and this is due to a variety -of reasons: +language</em>. It is +the <url name="most popular module for Apache" +url="http://www.securityspace.com/s_survey/data/man.200209/apachemods.html"> +and this is due to a variety of reasons: <itemize> <item>Learning curve is quite low <item>Great documentation <item>Extensive database support <item>Modularity </itemize> -PHP has a modular design. There are modules that provide support for: +PHP has a modular design. Among many others, there are modules that provide +support for: <itemize> -<item>Database connetivity for Oracle, ODBC, mySQL, mSQL, PostgreSQL, -MS-SQL server... and many more, check the <url name="PHP website" -url="http://www.php.net">. +<item>Database connetivity for popular databases such as Oracle, +MS-SQL server, ODBC interface, MySQL, mSQL, PostgreSQL and so on. <item>XML support <item>File transfer: FTP <item>HTTP @@ -847,159 +342,515 @@ url="http://www.php.net">. <item>Mail support: IMAP, POP3, NNTP <item>PDF document generation <item>CORBA +<item>SNMP </itemize> -and many more. You only need to compile/use the modules you need. -<p>PHP can be used with Apache, as an external CGI or with other webservers. -It is crossplatform and it runs on most flavors of Unix and Windows. -<p>If you come from a Windows background, you probably have used Internet +You only need to compile/use the modules you need. PHP can be used with Apache, as an external CGI or with other webservers. +It is crossplatform and it runs on most flavors of Unix and Windows. If you come from a Windows background, you probably have used Internet Information Server with Active Server Pages and MS-SQL Server. A common -replacement in the Unix world for this trio is Apache with PHP and mySQL. +replacement in the Unix world for this trio is Apache with PHP and MySQL. Since PHP works: <itemize> <item>with Apache and with Microsoft IIS -<item>with mySQL and with MS-SQL server +<item>with MySQL and with MS-SQL server <item>on Unix and on Windows </itemize> -you have a nice migration path from a Microsoft-centric solution to more -secure, stable, high performance Unix based solutions (like <url name="FreeBSD" -url="http://www.freebsd.org">, <url name="Solaris" url="http://www.sun.com">, -<url name="Linux" url="http://www.linux.com"> or <url name="OpenBSD" -url="http://www.openbsd.com">) +you have a nice, gradual migration path from a Microsoft-centric solution to Unix based solutions. - -<!-- examples of PHP code --> -<sect>Python +<sect2>Python <p> -Python is an scripting language similar to Perl or Tcl. -Several modules embed Python in the Apache web server: -<itemize> -<item><url name="Mod Python" url="http://www.modpython.org"> -<item><url name="Mod Snake" url="http://modsnake.sourceforge.net">: -runs both in Apache 1.3.x and the upcoming 2.0 -</itemize> -Both modules would be useful if you plan on writing Apache modules in Python -or run existing Python CGIs faster. Mod Snake allows you to embed Python in HTML -, much like <ref name="PHP" id="php"> does. +Python is a popular object oriented scripting language. +<url name="Mod_Python" url="http://www.modpython.org">, which is now +an official Apache project, allows you to integrate Python with the Apache +web server. You can develop complex web applications or accelerate existing +Python CGI scripts. Recent versions run on Apache 2.0. -<p>Related talk: -<itemize> -<item> F08: mod_snake: Boosting productivity with Python -</itemize> - -<sect>Tcl +<sect2>Tcl <p>The <url name="Tcl Apache project" url="http://tcl.apache.org"> integrates Tcl with the Apache webserver. Tcl is a lightweight, extensible scripting language. You can learn more about Tcl <url url="http://tcl.activestate.com/" name="here">. There are several modules currently under the Apache Tcl umbrella: <itemize> -<item><url name="Mod_dtcl" url="http://tcl.apache.org/mod_dtcl/"> allows for embedding Tcl on HTML pages like -<ref name="PHP" id="php"> does. -<item><url name="Neowebscript" url="http://tcl.apache.org/neowebscript/"> takes a similar approach +<item>Both <url name="Mod_dtcl" url="http://tcl.apache.org/mod_dtcl/"> and +<url name="Neowebscript" url="http://tcl.apache.org/neowebscript/"> allow +embedding Tcl on HTML pages. <url name="Rivet" +url="http://tcl.apache.org/rivet/"> combines the best of both modules. <item><url name="Mod_tcl" url="http://tcl.apache.org/mod_tcl/mod_tcl.html"> takes an approach similar -to mod_perl and runs both in 1.3.x and 2.x versions of Apache. +to mod_perl, exposing the Apache API. +<item><url name="WebSH" url="http://tcl.apache.org/websh/"> provides a Tcl Web +application environment </itemize> -Other Tcl Apache projects can be found at <url name="WebSH" url="http://websh.com/">. -<sect>Modules for other languages +<sect2>Microsoft technologies +<p>Several modules allow integration with Microsoft languages and +technologies such as the .Net framework or Active Server Pages. +<sect3>.Net +<p><url name="mod_haydn" url="http://haydn.sourceforge.net/"> integrates +<url name="Mono" url="http://www.go-mono.com"> with Apache and exposes +the Apache API to the .Net framework, allowing you to write modules in C#, +for example. <url name="Covalent" url="http://www.covalent.net"> provides +mod_asp.net, an commercial Windows module that allows Apache to run ASP.Net +applications, allowing you to replace Microsoft IIS. +<sect3>ASP +<p>ASP stands for Active Server Pages and is a Microsoft technology that +allows you to embed code, usually Visual Basic, in HTML pages. Several +companies such as <url name="ChilliSoft" url="http://www.chilisoft.com/"> and <url name="Stryon" +url="http://www.stryon.com/"> provide products that can run ASP +applications on Unix environments. +<sect3>ISAPI +<p>ISAPI is an API that you can use to extend Microsoft IIS, similarly to +how you would use the Apache API. Apache includes a module mod_isapi that +mirrors this functionality and allows you to run ISAPI modules. + +<sect2>Java +<p>Most applications servers, such as those from Oracle, IBM and BEA provide +modules to integrate with the Apache web server. Additionally, several +modules such as mod_jk and mod_webapp allow you to connect to Tomcat, a +Servlet and JavaServer Pages container that is also part of the Apache +Software Foundation. + +<sect2>Modules for other languages <p>This document has described modules for popular server side languages -such as Perl, Python, PHP. You can find additional language modules (JavaScript, Haskell, etc.) +such as Perl, Python and PHP. You can find additional language modules (JavaScript, Haskell, Ruby and others) at the <url name="Apache modules directory" url="http://modules.apache.org">. -<sect>Apache 2.0 -<p>The current version of Apache (the 1.3 series) is process based. That means that -the server forks itself a number of times to answer simultaneous requests. -The children are isolated from each other. -This is reliable: if a module misbehaves, the parent process kills that child and -it only affects the request being served, not the server as a whole. -Threads are similar to lightweight processes. Threads can share common data. -If a thread misbehaves it can corrupt other threads and the server as a whole -can go down. On the other hand, the thread model allows for faster, leaner -webservers. Apache 2.0 brings the best of both worlds, allowing the user to define -number of processes and number of threads per process. Apache 2.0 introduces -APR, the Apache Portable Runtime, which increases Apache's portability even more. -Finally, layered I/O brings a new level of modularity to Apache development. +<sect1>Management +<p>An important part of Web server administration includes building, +configuring and monitoring different servers. +<sect2>Build tools +<p>Apache can be extended and customized in many different ways. Integration +of different modules with the server can sometimes be a difficult task. +Tools such as the <url name="Apache Toolbox" +url="http://www.apachetoolbox.com"> can make this task easier, by +providing a menu driven build framework. - -<sect>Migrating from Netscape (iPlanet) web servers -<p>The bulk of the work may reside in converting custom modules from NSAPI to the Apache API. -Nearly all the other server side technologies (Java, Perl, CGIs) should be portable with little -or no change. -Netscape is tightly integrated with LDAP servers. You may be also interested in LDAP modules in <htmlurl url="http://modules.apache.org">. -<!-- Netscape includes server side JavaScript support; you can check the Apache equivalent, <url name="mod_javascript" -url="http://www.geocities.com/TimesSquare/Fortress/9743/binjs.html">. --> - -<sect>Migrating from Microsoft IIS -<p>Common reasons why people migrate from IIS to Apache (and not the other way around) include -stability, performance and security. This is partly because most people running Apache do it on -an Unix variant (like Solaris, FreeBSD or Linux). Fortunately, Apache is multiplatform and runs -on both Unix and Windows, offering a sensible migration path. -<p>Common Windows based web development environments like Coldfusion or Active Server Pages -have Unix ports or compatible environments (some are commmercial, some are freely available): +<sect2>User Interfaces for Apache +<p>Apache is configured thru text configuration files, and that sometimes +can be hard, specially for people coming from a Windows background. +There are open source graphical tools that make this task easier: <itemize> -<item><url name="Coldfusion for Linux" url="http://www.macromedia.com/software/coldfusion/"> -<item><url name="Perl ASP module" url="http://www.apache-asp.org/"><label id="perlasp"> -<item><url name="Halcyon ASP" url="http://www.halcyonsoft.com/"> -<!-- <item><url name="OpenASP" url="http://www.activescripting.org/"> --> +<item><url name="Comanche" url="http://www.comanche.org">, by yours truly, +is crossplatform and runs on Unix/Linux, Windows and Mac. +<item><url name="Webmin" url="http://www.webmin.com/webmin/">: A nice +web based interface. +<item><url name="gui.apache.org" url="http://gui.apache.org">: GUI interfaces +for Apache project. Programs are in various degrees of development. </itemize> -Apache for Windows supports also the ISAPI interface. -<p>If you want to go for a complete open source solution and you come from a Windows background ( -IIS + ASP + MS-SQL server) the roughly equivalent (and highly popular) combination is Apache + PHP -+ <url name="MySQL" url="http://www.mysql.com"> or <url name="PostgresSQL" url="http://www.postgresql.org">. -You can learn more about PHP <ref name="here" id="php"> -<p>Support for Windows is greatly improved in the new 2.0 Apache version, still in beta stage at the time of this writing. + +<sect2>SNMP +<p>SNMP stands for Simple Network Management Protocol. It allows monitoring +and management of network servers, equipment and so on. SNMP modules for Apache +help manage large deployments of web servers, measure the quality of service +offered and integration of Apache with existing management frameworks. +<itemize> +<item>Open source <url name="Mod SNMP" +url="http://www.simpleweb.org/software/packages/mod-snmp/"> for Apache 1.3. +<item><url name="Covalent SNMP" url="http://www.covalent.net"> provides +a commercial SNMP module, support for the latest SNMPv3 standard, integration +with HP-Openview, Tivoli and so on. +</itemize> + +<sect1>Publishing +<p>Authors of Web content require a means of managing that content and +uploading it to the server. One of the protocols used for this purpose is +DAV (Distributed Authoring and Versioning). DAV is an extension to the HTTP +protocol that enables users and applications to publish and modify Web +content. DAV technology is widely implemented, Microsoft supports it +at the operating system level (WebFolders) and in its Office suite. Same +goes for Apple OS-X and a variety of third party products from Adobe, +Oracle and so on. You can get the mod_dav module for Apache 1.3 at +<htmlurl url="http://www.webdav.org/mod_dav/">. In Apache 2.0, mod_dav is +included with the base distribution. +<p>Previous to DAV, Microsoft had its own publishing protocol, integrated +with the Microsoft FrontPage tool. You can add server-side support for Frontpage using +the modules at <htmlurl url="http://www.rtr.com/Ready-to-Run_Software/">, +though due to the way they integrate with Apache they are not considered +secure. + +<sect1>Protocol modules +<p>Apache 2.0 introduced the concept of protocol modules. That means that +developers can reuse the Apache server framework to implement new protocols +such as those dealing with mail and file transfer. mod_ftp is a commercial +Apache-based FTP module from <url name="Covalent" +url="http://www.covalent.net">. <url name="mod_pop3" +url="http://cvs.apache.org/viewcvs.cgi/httpd-pop3/"> is an open source module that +implements the POP3 protocol, commonly used by mail readers to retrieve +messages from mail servers. + +<sect1>Virtual Hosting +<p> +Apache provides extensive virtual hosting support which means that you can +serve multiple websites from a single server. In Apache 2.0, with the +per-child MPM you can have multiple children, each one serving a different +domain under different Unix user ids. This is very important for security +in shared hosting scenarios, as it allows you to isolate +customers from each other. The following are additional, alternative, virtual +hosting modules. +<itemize> +<item><url name="mod_dynvhost" url="http://funkcity.com/0101/"> +<item><url name="mod_pweb" url="http://www.joytec.de/mod_pweb.html"> +<item><url name="mod_v2h" url="http://www.fractal.net/mod_v2h.tm"> +</itemize> +<p> + +<sect1>Commercial support +<p>Apache is the web server of choice for many commercial entities, +including big enterprises. These companies have certain requirements when +adopting a technology, specially one that is at the core of their Internet +strategy, such as Web servers. Those requirements include performance, +stability, management capabilities, support, professional services and +integration with legacy systems. A number of commercial companies, such as +<url name="IBM" url="http://www.ibm.com">, <url name="Red Hat" +url="http://www.redhat.com"> and <url name="Covalent" +url="http://www.covalent.net">, provide the products and services necessary to +make Apache meet the needs of Enterprise customers. +<p>In addition, many other companies and OEMs ship Apache as a bundled web +server with their products. +<sect>ASF Projects +<p>Although Apache is probably the most popular, the Apache Software +Foundation is home to many other projects. This section provides an overview +of the most relevant ones, organized logically. Most of them belong either +to the Jakarta project and the XML project. The Jakarta project hosts +Java-based projects and the XML project hosts, surprise, XML-related projects. -<!-- -Ready to run Apaches ---> -<sect>Links +<sect1>Applications and Frameworks +<p>The following are application and development frameworks that are part +of the ASF. + +<sect2>3.1.1 Servers +<p>The following are some ASF server projects. +<sect3>Tomcat<label id="tomcat"> +<p>Tomcat is the flagship product of the Jakarta project. +It is the official reference implementation for the Java +Servlet and JavaServer Pages technologies. +<p>You can learn more in the <url name="Tomcat homepage" +url="http://jakarta.apache.org/tomcat/">. + +<sect3>JAMES (Java Apache Mail Enterprise Server) +<p>Complementary to the other Apache server side technologies, JAMES provides +<em>a 100% pure Java server designed to be a complete and portable enterprise +mail engine solution based on currently available open protocols (SMTP, POP3, +IMAP, HTTP)</em> +<p>More information can be found <url name="here" +url="http://jakarta.apache.org/james/">. + +<sect3>Lucene +<p>Jakarta Lucene is a high-performance, full-featured text search engine +written in Java and part of the Jakarta project. You can find more +information at <htmlurl url="http://jakarta.apache.org/lucene/"> + +<sect3>Jetspeed +<p><url name="Jetspeed" url="http://jakarta.apache.org/jetspeed/"> +is a web based portal written in Java. It has a modular API that +allows aggregation of different data sources (XML, SMTP, iCalendar) + + +<sect2>3.1.2 Content management +<p>The following are projects related to content management + +<sect3>Slide +<p>Slide is a high-level content management framework. +Conceptually, it provides a hierarchical organization of binary +content which can be stored into arbitrary, heterogenous, distributed +data stores. In addition, Slide integrates security, locking and versioning +services. It also provides a <url name="WebDAV" url="http://www.webdav.org"> +server and client implementation. +You can learn more at the <url name="Slide home page" +url="http://jakarta.apache.org/slide/index.html">. + +<sect3>Alexandria +<p>Alexandria is an integrated documentation management system. It brings +together technologies common to many open source projects like CVS and JavaDoc. +The goal is to integrate source code and documentation to encourage code +documentation and sharing. More information at <htmlurl +url="http://jakarta.apache.org/alexandria/index.html"> + +<sect2>3.1.3 Frameworks +<p>The following are application development frameworks. + +<sect3>Turbine<label id="turbine"> +<p>Turbine is a servlet based framework that allows experienced Java developers +to quickly build secure web applications. Turbine brings together a platform +for running Java code and reusable components. Some of its features include: +Integration with template systems, MVC style development, Access Control +Lists, localization support and so on. You can find more information at the +<url name="Turbine web site" url="http://java.apache.org/turbine">. + +<sect3>Avalon +<p>If you are familiar with Perl or BSD systems, Avalon is roughly the +equivalent of <url name="CPAN" url="http://www.cpan.org"> or the Ports +collection for Java Apache technologies. It does not only provide guidelines +for a common repository of code, it goes one step further: <em>is an effort to +create, design, develop and maintain a common framework for server +applications written using the Java language.</em> It provides the means so +server side Java projects can be easily integrated and build on each other. +You can find more information at +the <url name="Avalon web site" url="http://java.apache.org/avalon/">. + +<sect1>Presentation +<p>The following template systems, transformation engines and other +presentation related projects. + +<sect2>Cocoon<label id="cocoon"> +<p>Cocoon leverages other Apache XML technologies like Xerces, Xalan and FOP +to provide a comprehensive XML publishing framework. The framework can talk +to many different data sources and can transform the content into several +different delivery formats such as PDF, HTML, XML and RTF. It can run as a +servlet or as a command line program. You can learn more about Cocoon at the +<url name="project homepage" url="http://xml.apache.org/cocoon/"> + +<sect2>Velocity +<p><em>Velocity is a Java based template engine. It can be used as a +stand-alone utility for generating source code, HTML, reports, or +it can be combined with other systems to provide template services.</em> +Velocity has a Model View Controller paradigm that enforces separation of +Java code and the HTML template. You can learn more about Velocity <url name="here" +url="http://jakarta.apache.org/velocity/index.html">. + +<sect2>AxKit +<p> +<url name="AxKit" url="http://axkit.org"> <label id="axkit"> is +a popular XML-based Application Server for mod_perl and Apache. It allows +separation of content and presentation and provides on-the-fly conversion +from XML to any format. + +<sect2>Xalan +<p> +Xalan is an XSLT processor available for Java and C++. +XSL is a style sheet language for XML. The T is for Transformation. XML +is good at storing structured data (information). You sometimes need to +display this data to the user or apply some other transformation. +Xalan takes the original XML document, reads transformation configuration +(stylesheet) and outputs HTML, plain text or another XML document. +You can learn more about Xalan at the <url name="Xalan Java" +url="http://xml.apache.org/xalan-j/index.html"> and <url name="Xalan C++" +url="http://xml.apache.org/xalan-c/index.html"> project homepages. + +<sect2>FOP +<p>From the website: <em>FOP is a Java application that reads a formatting +object tree and then turns it into a PDF document</em>. So FOP takes an +XML document and outputs PDF, in a similar way that Xalan does with HTML +or text. You can learn more about FOP <url name="here" +url="http://xml.apache.org/fop">. + + +<sect1>Parsers and Document Access libraries +<p>The following are different libraries that can be used to parse and +manipulate a variety of document formats. + +<sect2>Xerces +<p> +The Xerces project provides XML parsers for a variety of languages, including +Java, C++ and Perl. The Perl bindings are based on the C++ sources. +An XML parser is a tool used for programatic access to XML documents. +This is a description of the standards supported by Xerces: +<itemize> +<item><url name="DOM" url="http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html">: DOM stands for Document Object Model. XML documents +are hierarchical by nature (nested tags). XML documents can be accessed thru +a tree like interface. The process is as follows: +<itemize> +<item>Parse document +<item>Build tree +<item>add/delete/modify nodes +<item>Serialize tree +</itemize> +<item><url name="SAX" url="http://www.saxproject.org">:Simple API for XML. This is a stream based API. This means +that we will receive callbacks as elements are encountered. These callbacks +can be used to construct a DOM tree for example. +<item><url name="XML Namespaces" url="http://www.w3.org/TR/REC-xml-names/"> +<item>XML Schema: The XML standard provides the syntax for writing documents. XML +Schema provides the tools for defining the <em>contents</em> of the XML +document (semantics). It allows to define that a certain element in the +document must be an integer between 10 and 20 or contain an IP address. +</itemize> +The Xerces XML project initial code base was donated by IBM. You can find more +information in the <url name="Xerces Java" +url="http://xml.apache.org/xerces-j/index.html">, <url name="Xerces C++" +url="http://xml.apache.org/xerces-c/index.html"> and <url name="Xerces Perl" +url="http://xml.apache.org/xerces-p/index.html"> homepages. + +<sect2>Batik +<p><em>Batik is a Java based toolkit for applications that want to use images in the +<url name="Scalable Vector Graphics (SVG)" url="http://www.w3.org/TR/SVG/"> format for various +purposes, such as viewing, generation or manipulation.</em> +<p> It is XML centric and compliant with the W3C specification. It is a bit atypical from other Apache +projects, in that it provides a graphical component. Batik provides hooks to extend the +framework thru custom tags and it allows conversion from SVG to other formats like JPEG or PNG. +You can learn more at the <url name="Batik homepage" url="http://xml.apache.org/batik/"> + +<sect2>POI +<p> +The POI project consists of APIs for manipulating various file formats based +upon Microsoft's OLE 2 Compound Document format using pure Java. This +includes Word and Excel documents. You can find more information at <htmlurl +url="http://jakarta.apache.org/poi/"> + +<sect1>Interoperability +<p>The following are libraries for remote communication and interoperability +between servers. + +<sect2>SOAP +<p>Apache SOAP ("Simple Object Access Protocol") and Axis are +implementations of the <url name="SOAP protocol" url="http://www.w3.org/TR/SOAP"> +<p>SOAP is a lightweight protocol for exchange of information in a +decentralized, distributed environment. It is an XML based protocol that +consists of three parts: +<itemize> +<item><em>An envelope that defines a framework for describing what is in a +message and how to process it</em>, +<item><em>a set of encoding rules for expressing instances of +application-defined datatypes</em>, and +<item><em>a convention for representing remote procedure calls and +responses</em>. +</itemize> +Basically you can think of SOAP as an remote procedure call +system, based on HTTP and XML. On the one hand this means it is +verbose and slow compared to other systems. On the other hand it eases +interoperatibility, debugging and development of clients and servers +for a variety of languages since most modern languages have HTTP and XML +modules. You can learn more at the <url name="Apache SOAP homepage" +url="http://xml.apache.org/soap/"> + +<sect2>XML-RPC +<p>The <url name="XML-RPC project" url="http://xml.apache.org/xmlrpc/"> +is a Java implementation of the XML-RPC protocol, a light-weight protocol +similar and predecessor to SOAP. + +<sect2>XML security +<p>The <url name="XML security project" url="http://xml.apache.org/security/"> provides +XML document signature verification for secure exchange of documents. + +<sect1>Development + +<sect2>Apache Portable Runtime +<p>The <url name="APR" url="http://apr.apache.org"> project provides +a portability layer that abstracts a number of APIs for file manipulation, +network access and so on. It is written in C and works on most Unix flavors, +Windows and a variety of other systems. It is the basis for Apache 2.0 + +<sect2>Ant +<p><url name="Ant" url="http://jakarta.apache.org/ant/"> is a Java based +build tool. It has a modular API and can be extended by creating new tasks. It +is driven by XML configuration files. + +<sect2>Byte Code Library +<p>The <url name="Byte Code Engineering Library" +url="http://jakarta.apache.org/bcel/"> (BCEL) is a +library to analyze, create, and manipulate binary Java class files. + +<sect2>Log4j +<p>This package provides a logging framework that Java applications can use. +It can be enabled at runtime without modifying the binary and has been designed +with performance in mind. It can be found at <htmlurl url="http://jakarta.apache.org/log4j/"> + +<sect2>ORO and Regexp +<p>ORO is a complete package that provides regular expression support for +Java. It includes Perl5 regular expression support, glob expressions and so on. +All under the Apache license. +You can learn more about ORO at <htmlurl url="http://jakarta.apache.org/oro/index.html">. There is another ASF +lightweight regular expression package, <url name="Regexp" url="http://jakarta.apache.org/regexp/">. + +<sect2>Struts +<p>Struts is an Apache project that tries to bring the +Model-View-Controller (MVC) design paradigm to web development. It +builds on <url name="Servlet" +url="http://java.sun.com/products/servlet"> and <url name="JavaServer +Pages" url="http://java.sun.com/products/jsp"> technologies. The model +part is made up of Java server objects, which represent the internal +state of the application. The view part is constructed via JavaServer Pages (JSP), which +is a combination of static HTML/XML and Java. JSPs also allow the +developer to define new tags. The controller part consists of servlets, +which take requests (GET/POST) from the client, perform actions on the +model and update the view by providing the appropriate JSP. You can +learn more at the <url name="Struts project pages" +url="http://jakarta.apache.org/struts/index.html">. + +<sect2>Taglibs +<p>The JavaServer pages technology allows developers to provide functionality +by adding custom tags. The Taglibs project intends to be a common repository +for these extensions. It includes tags for common utilities (i.e. date), +SQL database access and so on. +<p> +You can learn about TagLibs at +<htmlurl url="http://jakarta.apache.org/taglibs/">. +More documentation is included in the package. + +<sect2>Database +<p><url name="OJB" url="http://jakarta.apache.org/ojb/"> is a database +mapping tool that allows persistance and storage of Java objects in +relational databases. <url name="Xindice" +url="http://xml.apache.org/xindice/"> is a native XML database for storing +and querying XML documents. + +<sect2>Commons +<p>The <url name="Commons project" url="http://jakarta.apache.org/commons/"> +provides a great variety of reusable Java components with minimal dependencies. + +<sect1>Testing +<p>The following ASF projects cover testing and performance analisys. + +<sect2>httpd-test +<p>The <url name="httpd-test project" +url="http://httpd.apache.org/test/"> provides a testing framework for the +Apache web server and tools such as <url name="flood" url="http://httpd.apache.org/test/flood/"> for HTTP load testing. + +<sect2>Cactus +<p><url name="Cactus" url="http://jakarta.apache.org/cactus/"> is a +testing framework for testing server side Java code such as Servlets and EJBs. + +<sect2>JMeter +<p>This is a testing tool written in Java with a GUI frontend. It can be obtained at <htmlurl +url="http://jakarta.apache.org/jmeter/">. + +<sect2>Lakta +<p><url name="Lakta" url="http://jakarta.apache.org/lakta/"> is an end-to-end +HTTP testing tool + +<sect2>Watchdog +<p>The <url name="Watchdog project" url="http://jakarta.apache.org/watchdog/"> is a suite of validation sets for the +Servlet and JavaServer Pages specification. + +<sect>Where to find more information <p>Additional Apache related resources <sect1>Websites -<p> +<p>The following are some useful websites <itemize> -<item><url name="Apache" url="http://www.apache.org"> +<item><url name="Apache Website" url="http://www.apache.org"> +<item><url name="Apache Week" url="http://www.apacheweek.com"> <item><url name="Apache modules directory" url="http://modules.apache.org"> <item><url name="Apache today" url="http://www.apachetoday.com"> +<item><url name="Apache World" url="http://www.apacheworld.org"> <item><url name="Slashdot Apache section" url="http://slashdot.org/index.pl?section=apache"> </itemize> - -<sect1>Java application servers<label id="applicationservers"> -<p> -These are open source application servers that build on or are known to play -well with Apache. -<itemize> -<item><url name="Resin" url="http://www.caucho.com/">: Servlets, JSP, XSL -<item><url name="Enhydra" url="http://www.enhydra.com/">: Java/XML application -server. -<!-- <item><url name="Locomotive" url="http://www.locomotive.org/">: Servlets, -load balancing, failover. --> -<item><url name="JBoss" url="http://www.jboss.org/">: Enterprise Java Beans container, J2EE - -</itemize> -<sect>Contacting the author -<p>You can contact me at <htmlurl url="ridruejo@apache.org">. I welcome suggestions -and corrections, but please, please, do not send me messages asking me to -troubleshoot your Apache installation. I just do not have the bandwidth and your -mail will be most likely ignored. If you need support: -<itemize> -<item>Check the error logs, read the docs, especially the <url name="FAQ" url="http://www.apache.org/docs/misc/FAQ.html">. -<item>Try comp.infosystems.www.servers.unix at <htmlurl url="http://groups.google.com">. -Search for a similar problem. -<item>If you are still stuck, provide as much information as you can, -including relevant error_log entries and steps you have taken so far, and post to that -newsgroup. This will increase the chances someone will answer your question. -</itemize> +<sect1>Books +<p>I maintain <url name="a list of books" +url="http://www.apacheworld.org/apache_overview/books/"> related to this +document. It is not a comprehensive list, but rather I include only those +books that I have personally found well-written and useful. +<sect1>Support forums +<p>You can find the Apache users mailing list at <htmlurl +url="http://httpd.apache.org/lists.html">. Similar lists exist for the +rest of projects mentioned there. Make sure you read the Frequently Asked +Questions document before posting . You can also get support in the newsgroup +comp.infosystems.www.servers.unix at <htmlurl url="http://groups.google.com">. <p>If you want commercial support, consider contacting <url name="Covalent" url="http://www.covalent.net">, which provides expert support for Apache (at a fee, of course). If you are using Apache on Linux, your Linux vendor may have support -plans that include Apache too. +plans that include Apache. + +<sect>Contacting the Author +<p>You can contact me at daniel @ rawbyte.com . I welcome suggestions +and corrections, but please, please, do not send me messages asking me to +troubleshoot your Apache installation. I just do not have the time to answer people individually. +If you need support, please refer to the resources mentioned above. +<p> <sect1>Translations <p>If you want to contribute a translation of this document you should use -the SGML source. Check <htmlurl url="http://www.linuxdoc.org"> for info. +the SGML source. Check <htmlurl url="http://www.tldp.org"> for info. Please drop me a note so I can make sure you get the most recent version. <sect>Open Content Open Publication License @@ -1142,9 +993,5 @@ derivative of the work in any standard (paper) book form is prohibited unless prior permission is obtained from the copyright holder.' to the license reference or copy. - - -<!--<sect>Other web servers--> </article> -