为什么在Tomcat中使用Python CGI时出现空白页面
我刚开始学习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建议的来源: