腾讯实习的培训布置的作用中需要用Qzhttp+FastCGI+TTC架构写demo.网上参照了下,最后成功在Tomcat下配置CGI并实现简单例子.
Tomcat提供了对CGI的支持,但默认情况下,Tomcat对CGI的支持被禁止了。开启支持要采取如下配置:
将文件 $CATALINA_BASE/server/lib/servlets-cgi.renametojar 的名称修改为$CATALINA_BASE/server/lib/servlets-cgi.jar。有的还说要将此目录下servlets-ssi.renametojar改成servlets-ssi.jar. 如果想让Tomcat下所有的Application支持支持CGI,可以修改 $CATALINA_BASE/conf/web.xml;如果只希望某些Application支持CGI,那么只需要修改这些应用root目录下的/WEB-INF/web.xml文件。
使用batch命令编写CGI脚本,可以将以下几行配置代码添加到web.xml就可完成对web.xml文件的修改(具体见下):其中的参数: 配置CGI servlet的行为,涉及到以下几个servlet的初始化参数。
cgiPathPrefix – CGI程序所在的目录,CGI servlet将按照以下路径搜索CGI程序:应用程序root目录 + 路径分割符 + cgiPathPrefix。其默认值为 WEB-INF/cgi。CGI程序应该放在WEB-INF下面的目录以防止程序被当作普通文件被下载或其脚本内容被查看。
debug – 设置servlet在日志中记录调试信息的级别,其值越大,信息越详细。默认值为0。
executable – 用来运行脚本的可执行程序,默认为perl。
parameterEncoding – CGI servlet使用的编码类型名称。默认值取 System.getProperty(“file.encoding”,”UTF-8″)。
passShellEnvironment – 是否将shell的环境变量传递给CGI脚本。默认值为false。
举例:
myeclipse新建一个web项目。web.xml内容如下
|
注意结构,web-inf下面有个CGI,在web.xml配置的目录结构,当然也可以改相应的配置文件与目录结构对应即可。
其中test.bat
echo OFF |
启动tomcat,然后浏览器访问:http://localhost/cgiDemo/cgi-bin/test.bat 看到如下图说明配置成功了
再写个C语言的程序:add.cpp
|
编译连接成可执行文件。在上图中已经显示出来。
有个html的表单:
<FORM ACTION="cgi-bin/add.exe" method="get"> |
<p>
我的首页是为了测get post两种情况写的代码如下:
</p>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> |
<p>
效果:
</p>
<p>
<a href="/wp-content/uploads/2011/07/tomcat-config-cgi-run-cpp.jpg"><img class="aligncenter size-medium wp-image-1027" title="tomcat-config-cgi-run-cpp" src="/wp-content/uploads/2011/07/tomcat-config-cgi-run-cpp.jpg" alt="Tomcat配置CGI运行C程序" data-pinit="registered" /></a>
</p>
<p>
输入数据结果现实:<br />
<a href="/wp-content/uploads/2011/07/tomcat-cgi-cpp-result.jpg"><img class="aligncenter size-medium wp-image-1028" title="tomcat-cgi-cpp-result" src="/wp-content/uploads/2011/07/tomcat-cgi-cpp-result.jpg" alt="Tomcat配置CGI运行Exe文件" data-pinit="registered" /></a>
</p>
<p>
差不多了。现在我又有一种方法通过java等运行C可执行文件了。之前用<a href="/blog/java-native-demo.html">native也写过helloworld的例子</a>。
</p>