основной вопрос о mod_perl

Я новичок в Perl.

Я написал очень простую программу (скрипт) на Perl:

print "hello";

Когда я запускаю его в командной строке (с помощью команды - perl first.pl), он работает.

Однако, когда я использую тот же код Perl в «фильтре» apache, он не работает. Чтобы предоставить более подробную информацию, я вызываю фильтр для URL-адреса в Apache Http Server со следующей конфигурацией в файле httpd.conf:

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

Файл FirstPerlProg.pm (в расположении indigoampp \ perl-5.12.1 \ site \ lib \ MyApache2) имеет тот же код, что и first.pl.

Страница index.html (первая страница) имеет форму, которая отправляет запрос на something.do, и этот фильтр вызывается.

Проблема в том, как и где я могу увидеть результат этого фильтра (привет)?

Надеюсь, мой вопрос ясен.

Я знаю, что я не делаю никаких HTTP-ответов для отправки в браузер в этом коде фильтра, и поэтому после отправки я получаю сообщение «страница не может быть отображена». Однако что мне делать, я не знаю.

Спасибо.


person keeping_it_simple    schedule 26.11.2010    source источник


Ответы (1)


Зависит от того, как вы это написали. Судя по вашему коду, скелет должен выглядеть так:

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;

Это будет примерно самый минимум для обработчика запросов mod_perl. И это должен быть ответ на запрос, который должен увидеть в браузере. Вы также можете использовать Apache2::Log, а затем использовать $r->log_error("text") для отправки в error_log.

Если вы хотите, чтобы ваш скрипт запускал CGI-ish, используйте ModPerl :: Registry.

person Rahly    schedule 27.11.2010
comment
Спасибо, Джереми. Я как бы понял это, но дело в том, что я хочу вызвать сервлет также для шаблона URL something.do, который развернут на сервере приложений WebLogic. - person keeping_it_simple; 27.11.2010
comment
Когда я использую PerlResponseHandler, он не вызывает фактический запрашиваемый ресурс, вместо этого он сам создает ответ. Я просто хочу изменить запрос в фильтре и позволить запрошенному ресурсу обрабатывать часть генерации ответа ... - person keeping_it_simple; 27.11.2010
comment
Если я использую другой фильтр, скажем (PerlInputFilterHandler), страница просто зависает - она ​​вызывает себя снова и снова - и никогда не попадает в сервлет ... - person keeping_it_simple; 27.11.2010
comment
См. Ваш другой опубликованный вопрос для ответа на вопрос PerlInputFilterHandler, на который я ответил. - person Rahly; 29.11.2010