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开启成功,如图所示:


浙公网安备 33010602011771号