之前學了Perl的基礎,本來打算只學Perl如何訪問數據庫就算了,不過發現CGI也還挺好玩的,順便學習一下吧,而且通過瀏覽器和數據庫進行交互好像也很酷。
現在CGI不是很流行了,基本上被Jsp/Servlet,.Net,PHP等取代了,反正這也不是Perl的主業。
CGI流行原因有很多,比如效率問題,對於每一個請求都會編譯執行一次腳本,雖然現在又mod_perl,但是感覺來的晚了些。此外編寫這個腳本還是比較費事的,像上面提到的幾種語言,簡單的拖拽都可以開發出一個漂亮的頁面。(CGI高手請無視我,至少對於新手感覺是這樣子的。)
====================================================================
如何在Tomcat上部署CGI?
1.首先你要有一個Tomcat服務器
到Apache Tomcat官網上去下載,本文使用的是Tomcat 7系列。如果你選用的是更低的版本,可能本文的配置方法對你不適用。
2.想要運行Tomcat還需要java運行環境。
需要到Oracle官網下載,本文使用爲jdk7
3.安裝jdk,設置環境變量,如果需要。以我機器上爲例:
JAVA_HOME:C:\Program Files (x86)\Java\jdk1.7.0_25 ---JDK安裝路徑
PATH:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
CLASSPATH:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
CATALINA_HOME:E:\apache-tomcat-7.0.53 ---Tomcat解壓位置
4.測試一下:在DOS命令行輸入startup.bat,服務器啓動,最終給出信息:INFO: Server startup in 3054 ms
也可以在瀏覽器中輸入:http://localhost:8080/ 查看是否啓動成功
5.Tomcat7支持CGI,但是默認配置是關閉的需要進行如下配置
1.修改Tomcat conf/web.xml中兩處代碼,默認是註釋掉的,去掉註釋即可
<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>
<load-on-startup>5</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>cgi</servlet-name>
<url-pattern>/cgi-bin/*</url-pattern>
</servlet-mapping>
2.修改Tomcat conf/context.xml
在標籤<Context>中添加屬性 privileged = "true" ,此時,Tomcat才允許web應用使用容器內的Servlet
<Context privileged="true">
3.此時Tomcat已經可以運行CGI程序了
當一個CGI請求到達Tomcat時,CGIServlet會對其進行攔截,請求的格式爲 http://.../cgi-bin/xxxx,然後CGIServlet會到相應的項目的WEB-INF/cgi目錄下調用相應的CGI文件處理請求
6.測試
測試文件目錄
perl_cgi
|---WEB-INF
|---cgi
|---hello.pl
hello.pl文件內容
#!C:/strawberry/perl/binperl.exe
print "Content-type: text/html\n\n";
print "Hello, world!\n"
在瀏覽器中輸入:http://localhost:8080/perl_cgi/cgi-bin/hello.pl
輸出結果:
Hello, world!