在Sas IntrNet Module很多功能都是需要用到CGI(Common Gateway Interface)進(jìn)行工作。在使用CGI進(jìn)行工作時(shí)候,我們首先要進(jìn)行CGI服務(wù)器的配置。一般情況下可以直接使用Apache來(lái)架設(shè)CGI服務(wù)器。由于我們后期的一些應(yīng)用可能是在JEE平臺(tái)上進(jìn)行開(kāi)發(fā),所以在一個(gè)可以運(yùn)行Web Container的Server 上架設(shè)CGI服務(wù)是有必要的。本文將介紹如何在Tomcat下配置CGI服務(wù)。
要為Tomcat配置CGI服務(wù)主要有下面幾個(gè)步驟:
1. 把servlets-cgi.renametojar (在%CATALINA_HOME%/server/lib/目錄下)改名為servlets-cgi.jar。
2. 在Tomcat的%CATALINA_BASE%/conf/web.xml 文件中,把關(guān)于<servlet-name> CGI的那段的注釋去掉。內(nèi)容樣式如下:
<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>C:/Perl/bin/Perl.exe</param-value>
</init-param>
<load-on-startup>5</load-on-startup>
</servlet>
其中參數(shù)executable需要自已添加進(jìn)去,它的值就是我們用來(lái)解釋CGI腳本的程序。一般情況下這里會(huì)配置為Perl。"C:/Perl/bin/"為Perl的安裝目錄。
3. 在Tomcat的%CATALINA_BASE%/conf/web.xml文件中,把關(guān)于對(duì)CGI進(jìn)行映射的那段的注釋去掉。內(nèi)容樣式如下:
<servlet-mapping>
<servlet-name>cgi</servlet-name>
<url-pattern>/cgi-bin/*</url-pattern>
</servlet-mapping>
其中url-pattern就是將來(lái)我們?cè)L問(wèn)CGI腳本的url地址模式。
完成上面三個(gè)步驟后,我們的Tomcat服務(wù)器就具有了運(yùn)行CGI腳本的能力了。
為了測(cè)試CGI服務(wù),需要新建一個(gè)Web Project。并在WEB-INF目錄下新建一個(gè)名為"cgi"的目錄,CGI腳本將放置在這個(gè)目錄下。這里提供了一個(gè)用于測(cè)試CGI腳本printenv.pl|^printenv.pl 。Deloy the web project。啟動(dòng)Tomcat后,我們就可以通過(guò)http://localhost:8080/projectName/cgi-bin/printenv.pl 訪(fǎng)問(wèn)了。
如果訪(fǎng)問(wèn)成功,頁(yè)面將顯示如下的類(lèi)似信息。
AUTH_TYPE=""
CONTENT_LENGTH=""
CONTENT_TYPE=""
GATEWAY_INTERFACE="CGI/1.1"
HTTP_ACCEPT="image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, */*"
HTTP_ACCEPT_ENCODING="gzip, deflate"
HTTP_ACCEPT_LANGUAGE="zh-cn"
HTTP_CONNECTION="Keep-Alive"
HTTP_HOST="localhost:8080"
HTTP_USER_AGENT="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
PATH_INFO=""
QUERY_STRING=""
REMOTE_ADDR="127.0.0.1"
REMOTE_HOST="127.0.0.1"
REMOTE_IDENT=""
REMOTE_USER=""
REQUEST_METHOD="GET"
REQUEST_URI="/sasIntrNet/cgi-bin/printenv.pl"
SCRIPT_NAME="/sasIntrNet/cgi-bin"printenv.pl"
SERVER_NAME="localhost"
SERVER_PORT="8080"
SERVER_PROTOCOL="HTTP/1.1"
SERVER_SOFTWARE="TOMCAT"
X_TOMCAT_SCRIPT_PATH="D:"Program Files"apache-tomcat-5.5.17"webapps"sasIntrNet"WEB-INF"cgi"printenv.pl"
這個(gè)腳本主要打印當(dāng)前CGI的一些環(huán)境變量出來(lái)。
1、《Apache Tomcat 5.5 Servlet/JSP 容器 怎樣使用CGI》http://tomcat.jaxmao.org/cgi-howto.html
2、《Tomcat配置技巧Top 10》 http://www.pconline.com.cn/pcedu/empolder/wz/webserver/0502/549840_3.html
對(duì)于上文的補(bǔ)充說(shuō)明:
當(dāng)我們要在Tomcat的CGI 服務(wù)上跑SAS IntrNet 服務(wù)的時(shí)候,需要對(duì)上文的配置作一定的修改。首先Sas IntrNet的Dispatcher 模塊用來(lái)接收Browers請(qǐng)求的broke.exe文件只是一個(gè)普通的Windows Win32可執(zhí)行文件,并不是Perl腳本。(可以在Console環(huán)境下直接運(yùn)行broker.exe文件。)基于上面的認(rèn)識(shí)所以Servlet的executable參數(shù)不能配置使用Perl來(lái)運(yùn)行,應(yīng)該改成為如下命令。
<init-param>
<param-name>executable</param-name>
<param-value>cmd /c</param-value>
</init-param>
其中,"cmd /c"正是windows的系統(tǒng)命令,調(diào)用console。具體參數(shù)/c,使用/?開(kāi)關(guān)進(jìn)行查看。
此外,Sas IntrNet 應(yīng)用還需要系統(tǒng)的環(huán)境變量等信息,所以需要再多加配置一個(gè)參數(shù)。
<init-param>
<param-name>passShellEnvironment</param-name>
<param-value>true</param-value>
</init-param>
完整的servlet配置如下
<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>cmd /c</param-value>
</init-param>
<init-param>
<param-name>passShellEnvironment</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>5</load-on-startup>
</servlet>