为什么在Tomcat中使用Python CGI时出现空白页面

1 投票
2 回答
3120 浏览
提问于 2025-04-16 23:28

我刚开始学习Python的CGI(通用网关接口),但是连最简单的Python CGI程序都没能测试成功。

我使用的是Tomcat 6.0。我已经删除了web.xml中的注释,并且添加了<Context privileged="true">。在web.xml中,我把"cgiPathPrefix"的值设为"cgi-bin",并且在webapps/ROOT目录下添加了这个cgi-bin文件夹。

这个CGI程序很简单,名字叫test.cgi,内容如下:

#!/usr/bin/python

print("Content-type: text/html")
print()
print("<title>CGI 101</title>")
print("<h1>A First CGI Example</h1>")
print("<P>Hello, CGI World!</p>")

当我访问http://localhost:8080/cgi-bin/test.cgi时,页面却是空白的。

这个设置有什么问题呢?

2 个回答

-2

你的示例代码不是正确的HTML格式。你至少需要有

 <html>,<head> and <body> 

标签。

如果加上这些标签后问题仍然存在,那可能是你的服务器设置出了问题。这个问题可能更适合去serverfault.com询问,看看怎么调试你的Tomcat出现了什么问题。

1

我在不同的情况下遇到了同样的问题。基本上,我觉得提问者的问题在评论中得到了回答,是eryksun提出的建议:

可执行参数是否设置为空字符串?

我使用Tomcat 7.0时,所有设置都没问题,服务器启动时没有报错,我可以从WEB-INF/cgi请求,并得到了200 "OK"的响应,但页面却是空白的,就像提问者所说的那样。

解决办法是扩展默认参数到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>
    **<init-param>
      <param-name>executable</param-name>
      <param-value>c:\myexact\path\to\perl.exe</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>

我添加的部分用粗体(**)标出。

基本上,关键的信息来自eryksun建议的来源:

http://tomcat.apache.org/tomcat-7.0-doc/cgi-howto.html

撰写回答