linux平台使用Tomcat7配置CGI程序

CGI全称 Common Gateway Interface(共同编程接口),是一种编程接口,不论什么语言,只要按照该接口的标准编写出来的程序,即可叫做CGI程序。

CGI 程序的输入/输出是使用编程语言的标准输入/标准输出,所以用C/C++ 来写CGI程序就好象写普通程序一样,不过还有几样东西要注意的。 

(1).CGI 程序的通信方式 
当有数据从浏览器传到Web服务器后,该服务器会根据传送的类型(基本有二类:GET/POST),将这些接收到的数据传入QUERY_STRING 或变量中,CGI程序可以通过标准输入,在程序中接收这些数据,当要向浏览器发送信息时,只要向Web服务器发送特定的文件头信息,即可通过标准输出将信息发往Web服务器,Web 服务器处理完这些由 CGI 程序发来的信息后就会将这些信息发送给浏览器。 
(2).接收数据 
用 GET 方式接收到的数据保存在 Web 服务器的QUERY_STRING 变量里,而通过 POST 方式接收到的数据是保存在这个Web服务器变量里。它们的唯一区别就是:以GET方式接收的数据是有长度限制,而用 POST 方式接收的数据是没有长度限制的。并且, 以 GET 方式发送数据,可以通过 URL 的形式来发送,但 POST方式发送的数据必须要通过 Form 才到发送。 

关于Tomcat部署CGI程序的步骤(该方法在apache-tomcat-7.0.68上通过)
(1). 修改<Tomcat_HOME>\conf\web.xml配置文件,取消 cgi servlet 和对应的 mapping 注释,让Tomcat支持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>         <!-- CGI存储位置 -->

        </init-param>

        <init-param>
          <param-name>executable</param-name>            <!-- 默认均认为是perl 脚本            -->
          <param-value></param-value>                    <!-- 当设置为空时,有x权限的cgi均可执行 -->

          <param-name>executable</param-name>            <!-- 默认均认为是perl 脚本            -->

          <param-value></param-value>                    <!-- 当设置为空时,有x权限的cgi均可执行 -->

        </init-param>                                    <!-- 注意启动tomcat的有效用户要对该cgi有执行权限 -->
        <init-param>
          <param-name>passShellEnvironment</param-name>  <!-- 传递不在CGI标准定义但在shell环境中的导出变量 -->
          <param-value>true</param-value>
        </init-param>
        <load-on-startup>5</load-on-startup>
</servlet>

(2).修改<Tomcat_HOME>\conf\context.xml配置文件,在Context上添加 privileged="true" 属性

<!-- The contents of this file will be loaded for each web application -->
<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).在<Tomcat_HOME>\webapps目录下新建一个名叫uc_cgi的子目录,并在uc_cgi子目录中继续创建多级目录:WEB-INF\cgi\test01,然后在test01目录下创建一个文件,命名为hello.c,内容如下:

#include <stdio.h> 
main() { 
    printf("Content-type:text/html\n\n"); 
    printf("Hello,World!"); 
} 

(4).测试CGI是否成功,gcc编译hello.c文件,生成hello可执行文件,启动Tomcat,在浏览器中输入http://localhost:8080/uc_cgi/cgi-bin/test01/hello,如果能看到Hello,world!页面,说明CGI开启成功,如图所示:

 

posted @ 2016-11-01 12:09  水火379  阅读(531)  评论(0)    收藏  举报