C、Shell、Perl基於Tomcat開發CGI程序環境配置
基於Tomcat7.0版本配置CGI開發環境,步聚如下:
以我的Tomcat7安裝目錄為例:TOMCA_HOME = /Users/yangxin/Documents/devToos/java/apache-tomcat-7.0.39
1、打開TOMCA_HOME/conf/web.xml
將CGI的Serlvet配置與URL映射注釋打開
<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>executable</param-name>
<param-value></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>
<!-- The mapping for the CGI Gateway servlet -->
<servlet-mapping>
<servlet-name>cgi</servlet-name>
<url-pattern>/cgi-bin/*</url-pattern>
</servlet-mapping>CGI Servlet初始化參數說明:
1> cgiPathPrefix:設置cgi程序在應用中的訪問位置,默認訪問位置為:應用名稱/WEB-INF/cgi
2> executable:CGI程序解析器,默認為perl,如果為空,可以是任何安裝在操作係統環境變量的腳本解析器,或是C/C++程序
3> parameterEncoding:訪問CGI Servlet的默認參數編碼,默認為utf-8
4> passShellEnvironment:是否開啟shell環境變量,默認為false
5> stderrTimeout:讀取標準錯誤信息超時時長,默認為2000毫秒

2、打開TOMCAT_HOME/conf/context.xml
在context節點上添加一個屬性privileged=true
<Context privileged="true">
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
<!-- Uncomment this to enable Comet connection tacking (provides events
on session expiration as well as webapp lifecycle) -->
<!--
<Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
-->
</Context>
3、創建CGI測試程序
在TOMCAT_HOME/webapps目錄下創建建一個應用,如:cgitest,在cgitest應用下創建一個WEB-INF目錄,在WEB-INF目錄下創建一個cgi目錄和一個web.xml文件,然後在cgi目錄添加一個CGI測試腳本程序hello.sh和a.c並編譯成a.cgi,並修改訪問權限。隨後啟動tomcat,訪問https://localhost:8080/cgitest/cgi-bin/hello.sh就可以訪問自己寫的CGI程序了
創建好的應用目錄結構如下所示:

web.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="https://java.sun.com/xml/ns/javaee"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://java.sun.com/xml/ns/javaee
https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
metadata-complete="true">
<display-name>Welcome to Tomcat</display-name>
<description>
Welcome to Tomcat
</description>
</web-app>
hello.sh:
#!/bin/sh echo "Content-type:text/html\n\n" echo "hello world"a.c
#include <stdlib.h>
#include <stdio.h>
int main(int argc, const char** args)
{
printf("Content-type:text/html\n\n");
printf("i is cgi programe");
return 0;
}
測試結果:

最後更新:2017-04-03 05:39:11