LDP/LDP/howto/linuxdoc/Apache-Overview-HOWTO.sgml

1154 lines
55 KiB
Plaintext
Raw Normal View History

2000-11-02 22:00:54 +00:00
2001-04-16 14:45:52 +00:00
<!-- To-do: Apache toolbox, (development a packaged versions of Apache (Nusphere, etc.)
Databases currently used with Apache
APR
Caching
LDAP
Hosting
Wireless
Frontpage
-->
2000-11-02 22:00:54 +00:00
<!doctype linuxdoc system>
<article>
<!-- Title Information -->
2001-04-16 14:45:52 +00:00
<title>Apache Overview HOWTO
2000-11-02 22:00:54 +00:00
<author>Daniel Lopez Ridruejo, <tt/ridruejo@apache.org/
2002-02-28 23:09:54 +00:00
<date>v0.7, 2002-02-28
2000-11-02 22:00:54 +00:00
<!-- Abstract -->
<abstract>
2002-02-28 23:09:54 +00:00
This document gives you an overview of the Apache webserver and
2001-04-16 14:45:52 +00:00
related projects. It provides pointers for further information and
implementation details.
2000-11-02 22:00:54 +00:00
</abstract>
<!-- Table of Contents -->
<toc>
<sect>Introduction
<p>
2002-02-28 23:09:54 +00:00
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
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.
2002-03-25 23:30:47 +00:00
<p>Copyright 2002 Daniel Lopez Ridruejo
Permission is granted to copy, distribute and/or modify this document
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/.
2000-11-02 22:00:54 +00:00
<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">.
Several key factors have contributed to Apache's success:
<itemize>
<item>The <url name="Apache license" url="http://www.apache.org/LICENSE.txt">. It is
an open source, BSD-like license that allows for both commercial and non-commercial
2001-04-16 14:45:52 +00:00
uses of Apache.
2002-02-28 23:09:54 +00:00
<item>Talented community of <url name="developers" url="http://www.apache.org/foundation/members.html">
2000-11-02 22:00:54 +00:00
with a variety of backgrounds and an open development process based on technical merits.
2002-02-28 23:09:54 +00:00
<item>Modular architecture. Apache users can easily add functionality or tailor Apache to their
2001-04-16 14:45:52 +00:00
specific enviroment.
2000-11-02 22:00:54 +00:00
<item>Portable: Apache runs on nearly all flavors of Unix (and Linux), Windows, BeOs, mainframes...
2001-04-16 14:45:52 +00:00
<item>Robustness and security
2000-11-02 22:00:54 +00:00
</itemize>
2002-02-28 23:09:54 +00:00
Many commercial vendors have adopted Apache-based solutions for their products, including <url name="Oracle"
2000-11-02 22:00:54 +00:00
url="http://www.oracle.com">, <url name="Red Hat" url="http://www.redhat.com"> and <url name="IBM" url="http://www.ibm.com">.
In addition, <url name="Covalent" url="http://www.covalent.net"> provides add-on modules and 24x7 support for Apache.
<p>The following websites use Apache or derivatives. Chances are that if Apache
is good enough for them, it is also good enough for you :)
<itemize>
<item><url name="Amazon.com" url="http://www.amazon.com">
<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="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">:
<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>
<p>
The Apache project has grown beyond building just a web server into other critical server side technologies
2002-02-28 23:09:54 +00:00
like Java or XML. The Apache Software Foundation, described in the next section, serves as an umbrella for these projects.
2000-11-02 22:00:54 +00:00
2001-04-16 14:45:52 +00:00
<p>Related talk
<itemize>
<item>W09: Introduction to the Apache Web Server
<item>F16: Licensing issues in commercial OSS products
</itemize>
2000-11-02 22:00:54 +00:00
<sect>Apache Software Foundation
<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/">.
<sect>Developing web applications with Apache
<p>
There are several ways of providing content with Apache.
2001-04-16 14:45:52 +00:00
<p>Related talk
<itemize>
<item>W07: Web Application Technologies - surveying the landscape
</itemize>
2002-02-28 23:09:54 +00:00
<sect1>Static Content
2000-11-02 22:00:54 +00:00
<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>
2002-02-28 23:09:54 +00:00
CGI stands for Common Gateway Interface. CGI scripts are external programs
2000-11-02 22:00:54 +00:00
that are called when a user requests a certain page. The CGI receives information
2002-02-28 23:09:54 +00:00
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
2000-11-02 22:00:54 +00:00
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>
2002-02-28 23:09:54 +00:00
<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.
2000-11-02 22:00:54 +00:00
<p>
Since CGI usually involves heavy text manipulation, scripting languages are
2002-02-28 23:09:54 +00:00
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
2000-11-02 22:00:54 +00:00
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
2002-02-28 23:09:54 +00:00
<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>
2000-11-02 22:00:54 +00:00
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
2002-02-28 23:09:54 +00:00
sits idle until a request arrives. The request is processed and returned to the
2000-11-02 22:00:54 +00:00
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">
2001-04-16 14:45:52 +00:00
<p>Related talk
<itemize>
<item>F18: FastCGI -- The forgotten treasure
</itemize>
2002-02-28 23:09:54 +00:00
<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">
2001-04-16 14:45:52 +00:00
<p>Related talk
<itemize>
<item>W16: Recommendations for Java-Based Web Application Architectures
</itemize>
2000-11-02 22:00:54 +00:00
<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:
2002-02-28 23:09:54 +00:00
Modules that answer or modify requests directly and modules that process
commands embedded in HTML pages before serving it to the client. The most
2001-04-16 14:45:52 +00:00
representative approaches are <ref name="mod_perl" id="mod_perl"> and <ref
2000-11-02 22:00:54 +00:00
name="PHP" id="php">
2001-04-16 14:45:52 +00:00
2000-11-02 22:00:54 +00:00
<sect>Performance and bandwidth management<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
to prevent abuse.
<itemize>
<item><bf>mod_mmap</bf>: Included in current Apache releases, it maps to
2002-02-28 23:09:54 +00:00
memory a statically configured list of files that are frequently requested but infrequently changed.
2000-11-02 22:00:54 +00:00
<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.)
</itemize>
2001-04-16 14:45:52 +00:00
<sect>Virtual hosting
<p>
2002-02-28 23:09:54 +00:00
Apache provides extensive virtual hosting support; there are additional modules that provide specific functionality:
2001-04-16 14:45:52 +00:00
<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.
2000-11-02 22:00:54 +00:00
<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"
url="http://www.apache.org/docs/misc/rewriteguide.html">
2002-02-28 23:09:54 +00:00
<!-- <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">. -->
2000-11-02 22:00:54 +00:00
<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>
2001-04-16 14:45:52 +00:00
<p>Related talk
<itemize>
<item>TH06: mod_backhand: Internals explained
</itemize>
2000-11-02 22:00:54 +00:00
<sect>Secure transactions
<p>There are several solutions that provide secure transactions for Apache servers.
2002-02-28 23:09:54 +00:00
This enables Apache servers to be used for e-commerce or other scenarios where
sensitive information (like your credit card number) is exchanged.
2000-11-02 22:00:54 +00:00
<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.
2002-02-28 23:09:54 +00:00
<item><url name="Red Hat" url="http://www.redhat.com"> offers a secure server derived from Apache. Red Hat acquired C2Net, makers
2000-11-02 22:00:54 +00:00
of StrongHold, another Secure server derived from Apache.
2001-04-16 14:45:52 +00:00
<item><url name="Covalent" url="http://www.covalent.net"> sells secure versions of Apache as well as the CovalentSSL module that
2002-02-28 23:09:54 +00:00
plugs into existing Apache installations.
2000-11-02 22:00:54 +00:00
</itemize>
<p><bf>Credit card transactions</bf>
<p>Apache specific solutions exist for credit card transactions:
<itemize>
2002-02-28 23:09:54 +00:00
<!-- <item><url name="Cypay" url="http://www.cypay.com/"> credit card module for
Apache. Template based, tax calculations. -->
2000-11-02 22:00:54 +00:00
<item><url name="Covalent credator" url="http://www.covalent.net">, multiple
2002-02-28 23:09:54 +00:00
clearinghouse support, failover operation, PHP, Perl, Java support.
2000-11-02 22:00:54 +00:00
</itemize>
2001-04-16 14:45:52 +00:00
2000-11-02 22:00:54 +00:00
<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.
2001-04-16 14:45:52 +00:00
<item><url name="Covalent SNMP" url="http://www.covalent.net"> provides
2000-11-02 22:00:54 +00:00
a commercial SNMP module, support for the latest SNMPv3 standard, integration
with HP-Openview, Tivoli, etc.
</itemize>
2001-04-16 14:45:52 +00:00
2000-11-02 22:00:54 +00:00
<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">.
2001-04-16 14:45:52 +00:00
2000-11-02 22:00:54 +00:00
<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>
2002-02-28 23:09:54 +00:00
<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 :)
2000-11-02 22:00:54 +00:00
<item><url name="gui.apache.org" url="http://gui.apache.org">: GUI interfaces
2002-02-28 23:09:54 +00:00
for Apache project. Programs are in various degrees of development.
2001-04-16 14:45:52 +00:00
<item><url name="Webmin" url="http://www.webmin.com/webmin/">: A nice
2000-11-02 22:00:54 +00:00
web based interface.
</itemize>
<sect>Writing Apache modules
<p>
2002-02-28 23:09:54 +00:00
Apache, like many other successful open source projects, has a modular architecture.
2000-11-02 22:00:54 +00:00
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
2002-02-28 23:09:54 +00:00
modules that you need and include your own.
2000-11-02 22:00:54 +00:00
<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.
2002-02-28 23:09:54 +00:00
<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
2000-11-02 22:00:54 +00:00
<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.
2002-02-28 23:09:54 +00:00
If you don'e have the money to buy the book and cannot borrow it from a friend, there are other ways.
2000-11-02 22:00:54 +00:00
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.
2001-04-16 14:45:52 +00:00
The most popular is <ref name="mod_perl" id="mod_perl">.
2000-11-02 22:00:54 +00:00
<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">.
2001-04-16 14:45:52 +00:00
2000-11-02 22:00:54 +00:00
<!-- <sect>Configuring Apache -->
<sect>Apache books
<p>
2002-02-28 23:09:54 +00:00
A comprehensive list of Apache books can be found <url
url="http://httpd.apache.org/info/apache_books.html" name="here">.
2000-11-02 22:00:54 +00:00
<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.
2002-02-28 23:09:54 +00:00
<item><url name="Apache server for dummies" url="http://apache-server.com/ForDummies/">
2000-11-02 22:00:54 +00:00
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>
2001-04-16 14:45:52 +00:00
<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.
2000-11-02 22:00:54 +00:00
<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
2001-04-16 14:45:52 +00:00
time all Java projects will move under the Jakarta umbrella.
2000-11-02 22:00:54 +00:00
<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>
2002-02-28 23:09:54 +00:00
<p>The Java on Apache community is a very dynamic and active one, as shown by
2000-11-02 22:00:54 +00:00
the quantity and quality of its subprojects, which are described now.
2001-04-16 14:45:52 +00:00
2000-11-02 22:00:54 +00:00
<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">.
2001-04-16 14:45:52 +00:00
<p>Related talk
<itemize>
<item>F19: Using Ant to build Java code
</itemize>
2000-11-02 22:00:54 +00:00
<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
2002-02-28 23:09:54 +00:00
or Slide's own API.
2000-11-02 22:00:54 +00:00
<p>
You can learn more at the <url name="Slide home page"
url="http://jakarta.apache.org/slide/index.html">.
<sect1>Struts
2002-02-28 23:09:54 +00:00
<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">.
2000-11-02 22:00:54 +00:00
<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
2002-02-28 23:09:54 +00:00
for these extensions. It includes tags for common utilities (i.e. date),
2000-11-02 22:00:54 +00:00
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.
2001-04-16 14:45:52 +00:00
2000-11-02 22:00:54 +00:00
<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">
2002-02-28 23:09:54 +00:00
<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>
<!--
2000-11-02 22:00:54 +00:00
<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">.
2002-02-28 23:09:54 +00:00
-->
2000-11-02 22:00:54 +00:00
<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
2002-02-28 23:09:54 +00:00
<p>SPFC is a set of libraries to help solve common problems in server side
2000-11-02 22:00:54 +00:00
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>
2001-04-16 14:45:52 +00:00
<!-- Removed from java.apache.org
2000-11-02 22:00:54 +00:00
<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
2001-04-16 14:45:52 +00:00
of writing Apache Modules directly in Java.
Unfortunately, no code seems
2000-11-02 22:00:54 +00:00
to be present at the moment. You can find more information <url
name="here" url="http://java.apache.org/mod_java/index.html">.
2001-04-16 14:45:52 +00:00
-->
2000-11-02 22:00:54 +00:00
<sect1>Element Construction Set
2002-02-28 23:09:54 +00:00
<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
2000-11-02 22:00:54 +00:00
easily be extended to create tags for any markup language.</em>
<p>It allows the generation of mark up tags using Java function calls,
2002-02-28 23:09:54 +00:00
leading to a much cleaner solution than mixing HTML and Java code.
2000-11-02 22:00:54 +00:00
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"
2002-02-28 23:09:54 +00:00
url="http://jakarta.apache.org/james/index.html">.
2000-11-02 22:00:54 +00:00
<sect1>PicoServer
<p>A lightweight HTTP/1.0 server in pure Java. The project seems to be stalled
2002-02-28 23:09:54 +00:00
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">. -->
2000-11-02 22:00:54 +00:00
<sect1>Jetspeed
2002-02-28 23:09:54 +00:00
<p><url name="Jetspeed" url="http://jakarta.apache.org/jetspeed/site/index.html">
2000-11-02 22:00:54 +00:00
is a web based portal written in Java. It has a modular API that
2001-04-16 14:45:52 +00:00
allows aggregation of different data sources (XML, SMTP, iCalendar)
<p>Related talk:
<itemize>
<item>TH11: Writing an enterprise information portal with JetSpeed
</itemize>
2000-11-02 22:00:54 +00:00
<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
2002-02-28 23:09:54 +00:00
license. Some of its features include:
2000-11-02 22:00:54 +00:00
<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"
2002-02-28 23:09:54 +00:00
url="http://java.apache.org/turbine">.
2000-11-02 22:00:54 +00:00
<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">
2001-04-16 14:45:52 +00:00
<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">
2000-11-02 22:00:54 +00:00
<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.
2002-02-28 23:09:54 +00:00
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.
2000-11-02 22:00:54 +00:00
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
2002-02-28 23:09:54 +00:00
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.
2000-11-02 22:00:54 +00:00
<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.
2002-02-28 23:09:54 +00:00
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.
2000-11-02 22:00:54 +00:00
<sect1>FOP
2002-02-28 23:09:54 +00:00
<p>From the website: <em>FOP is a Java application that reads a formatting
2000-11-02 22:00:54 +00:00
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">
2001-04-16 14:45:52 +00:00
2000-11-02 22:00:54 +00:00
<sect1>Xang
2002-02-28 23:09:54 +00:00
<p>The goal of the Xang project is to <em>make it easy for developers to build
2000-11-02 22:00:54 +00:00
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.
2002-02-28 23:09:54 +00:00
You can learn more about Xang at the <url name="project homepage" url="http://xml.apache.org/xang">.
2000-11-02 22:00:54 +00:00
<!--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
2002-02-28 23:09:54 +00:00
application-defined datatypes</em>, and
<item><em>a convention for representing remote procedure calls and
2000-11-02 22:00:54 +00:00
responses</em>.
</itemize>
2002-02-28 23:09:54 +00:00
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/">
2001-04-16 14:45:52 +00:00
<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
2002-02-28 23:09:54 +00:00
<p> Crimson is an alternative, Java-based, XML parser with support for XML 1.0 thru a variety
2001-04-16 14:45:52 +00:00
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>
2000-11-02 22:00:54 +00:00
<sect1>Other XML projects
<p>There are other projects based on Apache and XML that do not live under the
Apache XML umbrella
<itemize>
2002-02-28 23:09:54 +00:00
<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.
2000-11-02 22:00:54 +00:00
</itemize>
2001-04-16 14:45:52 +00:00
<p>Related talk
<itemize>
<item>TH04: AxKit - An XML Application server for Apache
</itemize>
2000-11-02 22:00:54 +00:00
<sect>Perl
2001-04-16 14:45:52 +00:00
<p>Perl and Apache make a powerful and popular combination. There are several projects
2000-11-02 22:00:54 +00:00
that use these two technologies.
<sect1>Embperl
2002-02-28 23:09:54 +00:00
<p>Embperl allows embedding of Perl in HTML pages. These pages are processed in the server
2000-11-02 22:00:54 +00:00
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.
2001-04-16 14:45:52 +00:00
<sect1>Mod_Perl<label id="mod_perl">
2000-11-02 22:00:54 +00:00
<p>
2002-02-28 23:09:54 +00:00
<url name="mod_perl" url="http://perl.apache.org/"> is one of the most
veteran and successful Apache projects. It embeds a Perl interpreter
in Apache and allows access to the web server internals from
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
interpreters. This results in a faster, leaner solution.
2000-11-02 22:00:54 +00:00
<p>
2002-02-28 23:09:54 +00:00
Make sure you also check <ref id="axkit" name="axkit">
2000-11-02 22:00:54 +00:00
2001-04-16 14:45:52 +00:00
2000-11-02 22:00:54 +00:00
<sect>PHP<label id="php">
2002-02-28 23:09:54 +00:00
<p>From the <url name="PHP" url="http://www.php.net"> website:
2000-11-02 22:00:54 +00:00
<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
2001-04-16 14:45:52 +00:00
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
2000-11-02 22:00:54 +00:00
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:
<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>XML support
<item>File transfer: FTP
<item>HTTP
<item>Directory support: LDAP
<item>Mail support: IMAP, POP3, NNTP
<item>PDF document generation
<item>CORBA
</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.
2001-04-16 14:45:52 +00:00
It is crossplatform and it runs on most flavors of Unix and Windows.
2000-11-02 22:00:54 +00:00
<p>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.
Since PHP works:
<itemize>
<item>with Apache and with Microsoft IIS
<item>with mySQL and with MS-SQL server
2002-02-28 23:09:54 +00:00
<item>on Unix and on Windows
2000-11-02 22:00:54 +00:00
</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">)
2001-04-16 14:45:52 +00:00
2000-11-02 22:00:54 +00:00
<!-- examples of PHP code -->
<sect>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
2002-02-28 23:09:54 +00:00
or run existing Python CGIs faster. Mod Snake allows you to embed Python in HTML
2000-11-02 22:00:54 +00:00
, much like <ref name="PHP" id="php"> does.
2001-04-16 14:45:52 +00:00
<p>Related talk:
<itemize>
<item> F08: mod_snake: Boosting productivity with Python
</itemize>
2000-11-02 22:00:54 +00:00
<sect>Tcl
<p>The <url name="Tcl Apache project" url="http://tcl.apache.org"> integrates
2001-04-16 14:45:52 +00:00
Tcl with the Apache webserver. Tcl is a lightweight, extensible
2000-11-02 22:00:54 +00:00
scripting language. You can learn more about Tcl <url
2002-02-28 23:09:54 +00:00
url="http://tcl.activestate.com/" name="here">.
2001-04-16 14:45:52 +00:00
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
2002-02-28 23:09:54 +00:00
<item><url name="Mod_tcl" url="http://tcl.apache.org/mod_tcl/mod_tcl.html"> takes an approach similar
2001-04-16 14:45:52 +00:00
to mod_perl and runs both in 1.3.x and 2.x versions of Apache.
</itemize>
2002-02-28 23:09:54 +00:00
Other Tcl Apache projects can be found at <url name="WebSH" url="http://websh.com/">.
2000-11-02 22:00:54 +00:00
<sect>Modules for other languages
2002-02-28 23:09:54 +00:00
<p>This document has described modules for popular server side languages
2000-11-02 22:00:54 +00:00
such as Perl, Python, PHP. You can find additional language modules (JavaScript, Haskell, etc.)
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
2002-02-28 23:09:54 +00:00
APR, the Apache Portable Runtime, which increases Apache's portability even more.
2000-11-02 22:00:54 +00:00
Finally, layered I/O brings a new level of modularity to Apache development.
2001-04-16 14:45:52 +00:00
2000-11-02 22:00:54 +00:00
<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">.
2002-02-28 23:09:54 +00:00
<!-- 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">. -->
2000-11-02 22:00:54 +00:00
<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):
<itemize>
2002-02-28 23:09:54 +00:00
<item><url name="Coldfusion for Linux" url="http://www.macromedia.com/software/coldfusion/">
2000-11-02 22:00:54 +00:00
<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/">
2002-02-28 23:09:54 +00:00
<!-- <item><url name="OpenASP" url="http://www.activescripting.org/"> -->
2000-11-02 22:00:54 +00:00
</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
2002-02-28 23:09:54 +00:00
+ <url name="MySQL" url="http://www.mysql.com"> or <url name="PostgresSQL" url="http://www.postgresql.org">.
2000-11-02 22:00:54 +00:00
You can learn more about PHP <ref name="here" id="php">
2001-04-16 14:45:52 +00:00
<p>Support for Windows is greatly improved in the new 2.0 Apache version, still in beta stage at the time of this writing.
2000-11-02 22:00:54 +00:00
2001-04-16 14:45:52 +00:00
<!--
Ready to run Apaches
-->
2000-11-02 22:00:54 +00:00
<sect>Links
<p>Additional Apache related resources
<sect1>Websites
<p>
<itemize>
<item><url name="Apache" url="http://www.apache.org">
<item><url name="Apache modules directory" url="http://modules.apache.org">
<item><url name="Apache today" url="http://www.apachetoday.com">
<item><url name="Slashdot Apache section" url="http://slashdot.org/index.pl?section=apache">
</itemize>
2001-04-16 14:45:52 +00:00
2000-11-02 22:00:54 +00:00
<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
2001-04-16 14:45:52 +00:00
<item><url name="Enhydra" url="http://www.enhydra.com/">: Java/XML application
2000-11-02 22:00:54 +00:00
server.
2002-02-28 23:09:54 +00:00
<!-- <item><url name="Locomotive" url="http://www.locomotive.org/">: Servlets,
load balancing, failover. -->
2001-04-16 14:45:52 +00:00
<item><url name="JBoss" url="http://www.jboss.org/">: Enterprise Java Beans container, J2EE
2000-11-02 22:00:54 +00:00
</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
2001-04-16 14:45:52 +00:00
mail will be most likely ignored. If you need support:
2000-11-02 22:00:54 +00:00
<itemize>
2002-02-28 23:09:54 +00:00
<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">.
2000-11-02 22:00:54 +00:00
Search for a similar problem.
2002-02-28 23:09:54 +00:00
<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.
2000-11-02 22:00:54 +00:00
</itemize>
<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.
<sect1>Translations
2001-04-16 14:45:52 +00:00
<p>If you want to contribute a translation of this document you should use
2000-11-02 22:00:54 +00:00
the SGML source. Check <htmlurl url="http://www.linuxdoc.org"> for info.
2002-02-28 23:09:54 +00:00
Please drop me a note so I can make sure you get the most recent version.
2000-11-02 22:00:54 +00:00
2002-03-25 23:30:47 +00:00
<sect>Open Content Open Publication License
<p>Open Publication License
Draft v1.0, 8 June 1999 (text version)
<sect1>REQUIREMENTS ON BOTH UNMODIFIED AND MODIFIED VERSIONS
<p>The Open Publication works may be reproduced and distributed in
whole or in part, in any medium physical or electronic, provided that
the terms of this license are adhered to, and that this license or an
incorporation of it by reference (with any options elected by the
author(s) and/or publisher) is displayed in the reproduction.
<p>Proper form for an incorporation by reference is as follows:
<p>Copyright (c) &lt;year&gt; by &lt;author's name or
designee&gt;. This material may be distributed only subject to the
terms and conditions set forth in the Open Publication License, vX.Y
or later (the latest version is presently available at
http://www.opencontent.org/openpub/). The reference must be
immediately followed with any options elected by the author(s) and/or
publisher of the document (see section VI).
<p>Commercial redistribution of Open Publication-licensed material is
permitted.
<p>Any publication in standard (paper) book form shall require the
citation of the original publisher and author. The publisher and
author's names shall appear on all outer surfaces of the book. On all
outer surfaces of the book the original publisher's name shall be as
large as the title of the work and cited as possessive with respect to
the title.
<sect1>COPYRIGHT
<p>The copyright to each Open Publication is owned by its author(s) or designee.
<sect1>SCOPE OF LICENSE
<p>The following license terms apply to all Open Publication works,
unless otherwise explicitly stated in the document.
<p>Mere aggregation of Open Publication works or a portion of an Open
Publication work with other works or programs on the same media shall
not cause this license to apply to those other works. The aggregate
work shall contain a notice specifying the inclusion of the Open
Publication material and appropriate copyright notice.
<p>SEVERABILITY. If any part of this license is found to be
unenforceable in any jurisdiction, the remaining portions of the
license remain in force.
<p>NO WARRANTY. Open Publication works are licensed and provided "as
is" without warranty of any kind, express or implied, including, but
not limited to, the implied warranties of merchantability and fitness
for a particular purpose or a warranty of non-infringement.
<sect1>REQUIREMENTS ON MODIFIED WORKS
<p>All modified versions of documents covered by this license,
including translations, anthologies, compilations and partial
documents, must meet the following requirements:
<itemize>
<item> 1. The modified version must be labeled as such.
<item> 2. The person making the modifications must be identified and
the modifications dated.
<item> 3. Acknowledgement of the original author and publisher if
applicable must be retained according to normal academic citation
practices.
<item> 4. The location of the original unmodified document must be
identified.
<item> 5. The original author's (or authors') name(s) may not be used
to assert or imply endorsement of the resulting document without the
original author's (or authors') permission.
</itemize>
<sect1>GOOD-PRACTICE RECOMMENDATIONS
<p>In addition to the requirements of this license, it is requested
from and strongly recommended of redistributors that:
<itemize>
<item> 1. If you are distributing Open Publication works on hardcopy
or CD-ROM, you provide email notification to the authors of your
intent to redistribute at least thirty days before your manuscript or
media freeze, to give the authors time to provide updated
documents. This notification should describe modifications, if any,
made to the document.
<item> 2. All substantive modifications (including deletions) be
either clearly marked up in the document or else described in an
attachment to the document.
<item> 3. Finally, while it is not mandatory under this license, it is
considered good form to offer a free copy of any hardcopy and CD-ROM
expression of an Open Publication-licensed work to its author(s).
</itemize>
<sect1>LICENSE OPTIONS
<p>The author(s) and/or publisher of an Open Publication-licensed
document may elect certain options by appending language to the
reference to or copy of the license. These options are considered part
of the license instance and must be included with the license (or its
incorporation by reference) in derived works.
<p>A. To prohibit distribution of substantively modified versions
without the explicit permission of the author(s). "Substantive
modification" is defined as a change to the semantic content of the
document, and excludes mere changes in format or typographical
corrections.
<p>To accomplish this, add the phrase `Distribution of substantively
modified versions of this document is prohibited without the explicit
permission of the copyright holder.' to the license reference or copy.
<p>B. To prohibit any publication of this work or derivative works in
whole or in part in standard (paper) book form for commercial purposes
is prohibited unless prior permission is obtained from the copyright
holder.
<p>To accomplish this, add the phrase 'Distribution of the work or
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.
2000-11-02 22:00:54 +00:00
<!--<sect>Other web servers-->
</article>
2001-04-16 14:45:52 +00:00