Tomcat и Perl. Быстрый старт

| 1 комментарий | Нет трекбэков

Недавно мне потребовалось запускать perl-скрипты под TomCat, и возможно многие скажут, что это плохая идея, но в определенных условиях - вполне оправданная. Условия эти: необходимость добавить в Java-проект небольшой функционал, с маленьким траффиком, и минимальной нагрузкой и именно средствами perl. Поднимать под эту задачу apache - неоправданно. Если у вас возникает подобная необходимость, то возможно моя статья поможет вам без лишних хлопот запустить свой perl-скрипт.

Сразу оговорюсь, что настраивать мы будем TomCat версии 6.0, под windows, хотя принципиальным здесь является именно версия TomCat, так как в предыдущих версиях CGI-скрипты запускались несколько иначе, и описания для настройки предыдущих версий есть в интернете, но с 6-й версией они не работают.

Установка TomCat полагаю проблем вызвать не должна. Сразу после установки зайдем на стартовую страницу чтобы проверить что все работает. После этого - приступим к редактированию файла conf/web.xml, в той его части, которая касается CGI:

<servlet>

  <servlet-name>cgi</servlet-name>
  <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
 <init-param>
  <param-name>debug</param-name>
  <param-value>0</param-value>
  </init-param>
 <init-param>
  <param-name>cgiPathPrefix</param-name>
  <param-value>WEB-INF/cgi</param-value>
  </init-param>
  <load-on-startup>5</load-on-startup>
  </servlet>
 
Раскомментируем вышеописанный блок. О значении устанавливаемых параметров в этом блоке довольно подробно написано в самом web.xml, поэтому отдельно я их пояснять не буду. Так же нам необходимо настроить Servlet Mappings для cgi. Для этого раскомментируем еще один блок:
<servlet-mapping>
  <servlet-name>cgi</servlet-name>
  <url-pattern>/cgi-bin/*</url-pattern>
  </servlet-mapping>
Данный блок чем-то напоминает Alias опцию в конфиге Apache, то есть физически скрипты будут лежать в папке WEB-INF/cgi нашего приложения (к примеру: webapps/ROOT/WEB-INF/cgi/scriptname.pl), а вызываться будут по cgi-bin/scriptname.pl (пример: localhost/cgi-bin/scriptname.pl).
Теперь рестарт TomCat'a и проверка работоспособности (выход на стартовую страницу)... Уупсс... Не работает. Смотрим логи:
Servlet of class org.apache.catalina.servlets.CGIServlet is privileged and cannot be loaded by this web application
Смотрим в инет, а там рассказывают про jar'ики типа: servlets-cgi.renametojar и servlets-cgi.jar, но в 6-й версии этих jar'иков нет, они уже включены в catalina.jar.
Для того чтобы решить проблему описанную в логах, необходимо изменить еще один файл, а именно - conf/context.xml, следующим образом:
 
<Context reloadable="true" privileged="true">
  <WatchedResource>WEB-INF/web.xml</WatchedResource>
  </Context>
 
То есть мы добавили в тег context две опции, одна из которых позволяет изменять скрипт и видеть результат своих изменений без перезагрузки сервера, а вторая собственно решает наши проблемы с привелегиями на запуск CGI. Теперь рестартим TomCat и проверяем доступность стартовой страницы. Все ок! Кладем свой тестовый скрипт, типа HelloWorld! в папку: ROOT/WEB-INF/cgi (папку cgi необходимо создать самим), и заходим по адресу:
Учтите, что скрипт должен передавать заголовки, так же как и в Apache (print "Content-Type:...\n\n");
 
Подробнее о файле context.xml можно почитать здесь
 

Нет трекбэков

URL для трекбэков: http://perlmonks.org.ru/cgi-bin/MT/engine/mt-tb.cgi/15

1 комментарий

Продолжаю разрабатывать под TomCat (вот ведь необходимость, а?)...
Натолкнулся на еще одну проблему: из скриптов под TomCat не удается делать сетевые вызовы (LWP в том числе).
Нашел решение на буржуйском сайте (решение под windows).
Итак, если у вас не соединется скрипт под TomCat, то добавте в начало скрипта строку:
$ENV{"SYSTEMROOT"} = "C:\\windows";
и все должно заработать :).

Комментировать

Об этой записи

Сообщение опубликовано 06.05.2009 11:21. Автор — Monks.

Предыдущая запись — Изящное ветвление или мощь Perl с ООП.

Следующая запись — SEO Toolkit v 2.0. Инструмент анализа сайта.

Смотрите новые записи на главной странице или загляните в архив, где есть ссылки на все сообщения.

Страницы


 


 

Page copy protected against web site content infringement by Copyscape