鍍金池/ 教程/ Linux/ CGI
連接器
JSPs
重寫機(jī)制
CGI
Tomcat Manager
Windows 認(rèn)證
代理支持
虛擬主機(jī)
安全性注意事項(xiàng)
如何在 Maven 中使用 Tomcat 庫(kù)
安裝
MBean 描述符
JNDI 資源
類加載機(jī)制
Tomcat Web 應(yīng)用部署
基于 APR 的原生庫(kù)
負(fù)載均衡器
安全管理
附加組件
監(jiān)控與管理
Windows 服務(wù)
集群化與會(huì)話復(fù)制
高級(jí) IO 機(jī)制
SSI(服務(wù)器端嵌入)
WebSocket 支持
JDBC 數(shù)據(jù)源
日志機(jī)制
默認(rèn) Servlet
SSL/TLS 配置
Tomcat 的 JDBC 連接池
第一個(gè)應(yīng)用
簡(jiǎn)介
Realm 配置

CGI

簡(jiǎn)介

CGI(通用網(wǎng)關(guān)接口)定義了一種 Web 服務(wù)器與外部?jī)?nèi)容生成程序的交互方式,這里所說(shuō)的外部?jī)?nèi)容生成程序通常被稱為 CGI 程序或 CGI 腳本。

當(dāng)你使用 Tomcat 做為 HTTP 服務(wù)器,并且需要 CGI 支持時(shí),可以在 Tomcat 中添加 CGI 支持。Tomcat 的 CGI 支持很大程度上能夠跟 Apache 的httpd's 相兼容,但也存在一些局限(比如只有一個(gè) cgi-bin 目錄)。

CGI 支持是通過(guò) servlet 類 org.apache.catalina.servlets.CGIServlet 來(lái)實(shí)現(xiàn)的。一般而言,該 servlet 與 URL 模式“/cgi-bin/*” 相對(duì)應(yīng)。

Tomcat 默認(rèn)不支持 CGI。

安裝

警告:CGI 腳本用于執(zhí)行 Tomcat JVM 外部的程序。如果使用 Java 的 SecurityManager,則它將繞過(guò) catalina.policy 中配置的安全策略。

為了啟用 CGI 支持:

  1. 在默認(rèn)的 $CATALINA_BASE/conf/web.xml 文件中,存在被注釋掉的用于 CGI servlet 的范例 servlet 及 servlet-mapping 元素。在 Web 應(yīng)用中啟用 CGI 支持,需要將 servlet 和 servlet-mapping 聲明都復(fù)制到 Web 應(yīng)用的 WEB-INF/web.xml 文件中。

  2. 在 Web 應(yīng)用中的 Context 元素中設(shè)置 privileged="true"

    只有享有特權(quán)的上下文才能被允許使用 CGI servlet。注意,修改全局$CATALINA_BASE/conf/context.xml 文件會(huì)影響所有的 Web 應(yīng)用。查閱 Context 文檔來(lái)了解詳情。

配置

下面是用來(lái)配置 CGI servlet 行為的一些 Servlet 初始參數(shù):

  • cgiPathPrefix 搜索 CGI 腳本的路徑,一般從 Web 應(yīng)用根目錄 + 文件.分隔符 + 這個(gè)前綴開(kāi)始搜索。該參數(shù)默認(rèn)為空值,從而使得 Web 應(yīng)用根目錄被用作搜索路徑。建議取值為:WEB-INF/cgi
  • debug 該 servlet 所記錄信息調(diào)試細(xì)節(jié)度。默認(rèn)為 0
  • executable 用于運(yùn)行腳本的可執(zhí)行文件后綴名,如果腳本自身就是可執(zhí)行文件(比如 .exe 文件),則可以將該參數(shù)顯式設(shè)置為空的字符串。默認(rèn)是 perl,即默認(rèn)是 perl 腳本。
  • executable-arg-1 與 executable-arg-2,等等 executable 的其他參數(shù)。它們位于 CGI 腳本名稱之前。默認(rèn)不存在其他額外參數(shù)。
  • parameterEncoding CGI Servlet 所使用的參數(shù)編碼名稱,默認(rèn)為 System.getProperty("file.encoding","UTF-8")。首選系統(tǒng)默認(rèn)編碼,如果系統(tǒng)屬性不可用,則采用 UTF-8 編碼。
  • passShellEnvironment 是否應(yīng)將 Tomcat 過(guò)程的 shell 環(huán)境變量(如果存在)傳入 CGI 腳本?默認(rèn)為 false。
  • stderrTimeout 在終止 CGI 過(guò)程之前,等待標(biāo)準(zhǔn)錯(cuò)誤輸出信息(stderr)讀取完畢的時(shí)間(以毫秒計(jì))。默認(rèn)為 2000