2010-11-26 23 views
1

Je suis novice très à Perl.question mod_perl base

j'ai écrit un programme Perl très simple (script):

print "hello"; 

Quand je l'exécute sur l'invite de commande (avec commande - perl first.pl), cela fonctionne. Cependant, lorsque j'utilise le même code Perl dans le "filtre" d'Apache, cela ne fonctionne pas. Pour fournir plus de détails, j'invoque un filtre pour une URL dans Apache Http Server avec la configuration suivante dans le fichier httpd.conf:

<Location /something.do> 
     SetHandler modperl 
     PerlResponseHandler MyApache2::FirstPerlProg 
</Location> 

fichier FirstPerlProg.pm (en indigoampp \ perl-5.12.1 \ Site \ lib \ emplacement MyApache2) a même code que first.pl.

La page index.html (première page) a un formulaire qui soumet la requête à quelque chose.do et ce filtre est appelé.

Le problème est, comment et où je vois la sortie de ce filtre (bonjour)?

J'espère que ma question est claire.

Je sais que je ne fais aucune réponse HTTP pour être envoyé au navigateur dans ce code de filtre et c'est pourquoi je reçois la 'page ne peut pas être affichée' après soumettre. Cependant, que dois-je faire est quelque chose que je ne sais pas.

Merci.

Répondre

0

Cela dépend de la façon dont vous l'avez écrit. En passant par votre code, le squelette devrait ressembler

 
package MyApache2::FirstPerlProg; 

use Apache2::Const qw(OK); 
use Apache2::RequestRec; 
use Apache2::RequestIO; 

sub handler { 
    my ($r) = @_; 
    $r->content_type("text/html"); 
    $r->print("hello"); 
    return OK; 
} 

1; 

Ce serait à peu près le strict minimum pour un gestionnaire de requêtes mod_perl. Et cela devrait être la réponse revenant de la demande, devrait le voir dans le navigateur. Vous pouvez également utiliser Apache2::Log, puis utiliser $r->log_error("text") pour envoyer au journal d'erreurs.

Si vous voulez que votre script exécute CGI-ish, utilisez ModPerl :: Registry.

+0

Merci Jeremy. J'ai en quelque sorte compris cela, mais le truc est que je veux appeler "servlet" aussi bien pour un motif d'URL "something.do" qui est déployé sur WebLogic Application Server. –

+0

Lorsque j'utilise PerlResponseHandler, il n'invoque pas la ressource "réelle" demandée, mais crée la réponse elle-même. Je veux juste modifier la requête dans le filtre et laisser la ressource demandée gérer la partie de génération de réponse ... –

+0

Si j'utilise un autre filtre dis (PerlInputFilterHandler), la page se bloque - elle s'appelle encore et encore - et n'obtient jamais de servlet .. –