Tomcat CGI

2022-03-03 11:46 更新

簡介

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

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

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

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

安裝

警告:CGI 腳本用于執(zhí)行 Tomcat JVM 外部的程序。如果使用 Java 的 SecurityManager,則它將繞過 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 文檔來了解詳情。

配置

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

  • cgiPathPrefix 搜索 CGI 腳本的路徑,一般從 Web 應(yīng)用根目錄 + 文件.分隔符 + 這個(gè)前綴開始搜索。該參數(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 過程的 shell 環(huán)境變量(如果存在)傳入 CGI 腳本?默認(rèn)為 false
  • stderrTimeout 在終止 CGI 過程之前,等待標(biāo)準(zhǔn)錯(cuò)誤輸出信息(stderr)讀取完畢的時(shí)間(以毫秒計(jì))。默認(rèn)為 2000。
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)