有apache为什么不用,非要用Tomcat,哎客户是上帝。cgi配置主要是为C/C++使用,当然perl等也差不多。
1.首先/usr/local/apache-tomcat-7.0.29/conf/context.xml中
<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>
添加privileged="true",否则tomcat启动报错,Servlet of class org.apache.catalina.servlets.CGIServlet is privileged and cannot be loaded by this web application
2./usr/local/apache-tomcat-7.0.29/conf/web.xml
<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>
<init-param>
<param-name>executable </param-name>
<param-value></param-value>
</init-param>
<load-on-startup>5</load-on-startup>
</servlet>
注释去掉,使cgi生效。
3.还是web.xml下
<!-- The mapping for the CGI Gateway servlet -->
<servlet-mapping>
<servlet-name>cgi</servlet-name>
<url-pattern>/cgi-bin/*</url-pattern>
</servlet-mapping>
把CGI映射这一段注释去掉。
4.最后bin下shutdown.sh startup.sh脚本重启下Tomcat就生效了。
最后附个测试helloworld
#include<stdio.h>
int main()
{
printf("Content-type:text/html\n\n");
printf("hello,world!");
return 0;
}编译后cp到cgi目录,浏览器中就看到了hello,world!