Сразу оговорюсь, что настраивать мы будем TomCat версии 6.0, под windows, хотя принципиальным здесь является именно версия TomCat, так как в предыдущих версиях CGI-скрипты запускались несколько иначе, и описания для настройки предыдущих версий есть в интернете, но с 6-й версией они не работают.
Установка TomCat полагаю проблем вызвать не должна. Сразу после установки зайдем на стартовую страницу чтобы проверить что все работает. После этого - приступим к редактированию файла conf/web.xml, в той его части, которая касается CGI:
<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 можно почитать здесь
Продолжаю разрабатывать под TomCat (вот ведь необходимость, а?)...
Натолкнулся на еще одну проблему: из скриптов под TomCat не удается делать сетевые вызовы (LWP в том числе).
Нашел решение на буржуйском сайте (решение под windows).
Итак, если у вас не соединется скрипт под TomCat, то добавте в начало скрипта строку:
$ENV{"SYSTEMROOT"} = "C:\\windows";
и все должно заработать :).