Apache2-Dispatch
view release on metacpan or search on metacpan
change your httpd.conf entry:
<Location /Foo>
SetHandler perl-script
PerlHandler Bar->dispatch_baz
</Location>
pre-load your module:
PerlModule Bar
or
PerlRequire startup.pl
# where startup.pl contains
# use Bar;
That's it - now the handler can be swapped in and out of Dispatch
without further modification. See the Eagle book on method handlers for
more details.
FILTERING
Apache::Dispatch provides for output filtering using Apache::Filter
1.013 and above.
<Location /Foo>
SetHandler perl-script
PerlHandler Apache::Dispatch Apache::Compress
DispatchPrefix Bar
DispatchFilter On
</Location>
Your handler need do nothing special to make its output the start of the
chain - Apache::Dispatch registers itself with Apache::Filter and hides
the task from your handler. Thus, any dispatched handler is
automatically Apache::Filter ready without the need for additional code.
The only caveat is that you must use the request object that is passed
to the handler and not get it directly using Apache->request.
AUTOLOAD
Support for AUTOLOAD has been made optional, but requires special care.
Please take the time to read the camel book on using AUTOLOAD with can()
and subroutine declarations (3rd ed pp326-329).
Basically, you declare the methods you want AUTOLOAD to capture by name
at the top of your script. This is necessary because can() will return
true if your class (or any parent class) contains an AUTOLOAD method,
but $AUTOLOAD will only be populated for declared method calls. Hence,
without a declaration you won't be able to get at the name of the method
you want to AUTOLOAD.
DispatchISA introduced some convenience, but some headaches as well - if
you inherit from a class that uses AutoLoader then ALL method calls are
true. And as just explained, AUTOLOAD() will not know what the called
method was. This may represent a problem if you aren't aware that, say,
CGI.pm uses AutoLoader and spend a few hours trying to figure out why
all of a sudden every URL under Dispatch is bombing. You may want to
check out NEXT.pm (available from CPAN) for use in your AUTOLOAD
routines to help circumvent this partucular feature.
If you decide to use DispatchISA it is HIGHLY SUGGESTED that you do so
with DispatchAUTOLOAD Off (which is the default behavior).
NOTES
If you define a dispatch_index() method calls to /Foo will default to
it. Unfortunately, this implicit translation only happens at the highest
level - calls to /Foo/Bar will translate to Foo->Bar() (that is, unless
Foo::Bar is your DispatchPrefix, in which case it will work but
/Foo/Bar/Baz will not, etc). Explicit calls to /Foo/index follow the
normal dispatch rules.
If the uri can be dispatched but contains anything other than
[a-zA-Z0-9_/-] Apache::Dispatch declines to handle the request.
Like everything in perl, the package names are case sensitive.
Warnings have been left on, so if you set an invalid class with
DispatchISA you will see a message like: Can't locate package Foo::Bar
for @Bar::Baz::ISA at .../Apache/Dispatch.pm line 277.
This is alpha software, and as such has not been tested on multiple
platforms or environments for security, stability or other concerns. It
requires PERL_DIRECTIVE_HANDLERS=1, PERL_LOG_API=1, PERL_HANDLER=1, and
maybe other hooks to function properly.
FEATURES/BUGS
If a module fails reload under DispatchStat, Apache::Dispatch declines
the request. This might change to SERVER_ERROR in the future...
SEE ALSO
perl(1), mod_perl(1), Apache(3), Apache::Filter(3), Apache::Reload(3),
Apache::StatINC(3)
MAINTAINER
Fred Moyer <phred@apache.org>
AUTHOR
Geoffrey Young <geoff@cpan.org>
COPYRIGHT
Copyright 2001-2006 Geoffrey Young - all rights reserved.
This library is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
( run in 0.934 second using v1.01-cache-2.11-cpan-39bf76dae61 )