Apache-ASP

 view release on metacpan or  search on metacpan

README  view on Meta::CPAN


    For many Apache::* modules for use with mod_perl, of which Apache::ASP is
    just one, check out http://perl.apache.org/src/apache-modlist.html

    To gain access to the ASP objects like $Session outside in a non-PerlHandler
    mod_perl handler, you may use this API:

      my $ASP = Apache::ASP->new($r); # $r is Apache->request object

    as in this possible Authen handler:

      <Perl>
        use Apache::ASP;
        sub My::Auth::handler {
          my $r = shift;
          my $ASP = Apache::ASP->new($r) 
          my $Session = $ASP->Session;
        }
      </Perl>

    Here are some examples of do-it-yourself mod_perl handler programming...

     === Forbid Bad HSlide User Agent ===

     # httpd.conf
     PerlAccessHandler My::Access
     <Perl>
       sub My::Access::handler {
         my $r = shift;
         if($r->headers_in->{'USER_AGENT'} =~ /HSlide/) {
             403;
         } else {
             200;
         }
       }
     </Perl>

     === Runtime Path Parsing ===

    This example shows how one might take an arbitrary URL path
    /$path/$file.asp, and turn that into a runtime config for your site, so your
    scripts get executed always in your sites DocumentRoot.

     INPUT URL /SomeCategory/
     OUTPUT
      Script: index.asp
      $Server->Config('PATH') eq '/SomeCategory'

     INPUT URL /SomeCategory/index.asp
     OUTPUT
      Script: index.asp
      $Server->Config('PATH') eq '/SomeCategory'

     INPUT URI /index.asp
     OUTPUT
      Script: index.asp
      $Server->Config('PATH') eq ''

     # httpd.conf
     PerlTransHandler My::Init
     use lib qw( $custom_perllib );

     # $custom_perllib/My/Init.pm
     package My::Init;
     use strict;
     use Apache::Constants qw(:common);
     sub handler {
        my $r = shift;

        my $uri = $r->uri || '/';
        unless($uri =~ m|^(.*)(/([^/.]+\.[\w]+)?)$|i) {
            warn("can't parse uri $uri");
            return DECLINED;
        }
        $uri = $2;
        my $PATH = $1 || '';
        $r->dir_config('PATH', $PATH);

        if($uri eq '/') {
            $uri = '/index.asp';
        }

        $r->uri($uri);
        $r->filename($r->document_root.$uri);

        DECLINED;
     }

     1;

OBJECTS
    The beauty of the ASP Object Model is that it takes the burden of CGI and
    Session Management off the developer, and puts them in objects accessible
    from any ASP script & include. For the perl programmer, treat these objects
    as globals accessible from anywhere in your ASP application.

    The Apache::ASP object model supports the following:

      Object         Function
      ------         --------
      $Session      - user session state
      $Response     - output to browser
      $Request      - input from browser
      $Application  - application state
      $Server       - general methods

    These objects, and their methods are further defined in the following
    sections.

    If you would like to define your own global objects for use in your scripts
    and includes, you can initialize them in the global.asa Script_OnStart like:

     use vars qw( $Form $Site ); # declare globals
     sub Script_OnStart {
         $Site = My::Site->new;  # init $Site object
         $Form = $Request->Form; # alias form data
         $Server->RegisterCleanup(sub { # garbage collection
                                      $Site->DESTROY; 
                                      $Site = $Form = undef; 
                                  });
     }



( run in 0.666 second using v1.01-cache-2.11-cpan-39bf76dae61 )