如果没有安装tomcat可以使用apache调用CGI,参考apache配置CGI。如果安装了tomcat,可以配置到tomcat上,比apache方便一些。
具体mac上安装tomcat可以看mac上jenkins和tomcat的配置。
首先浏览器输入localhost:8080/ 先看到那只猫,不要展示文件列表。
1、打开web.xml,我机器上的地址是/usr/local/Cellar/tomcat/9.0.19/libexec/conf/,打开下面两段的注释。
<servlet>
<servlet-name>cgi</servlet-name>
<servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
<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、打开conf目录下的context.xml。<Context>改为<Context privileged="true">
<Context privileged="true">
<!-- Default set of monitored resources. If one of these changes, the -->
<!-- web application will be reloaded. -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
</Context>
这个时候我们应该已经可以执行CGI了。那我们的python文件放哪儿呢?我们看上面配置的web.xml
<init-param>
<param-name>cgiPathPrefix</param-name>
<param-value>WEB-INF/cgi</param-value>
</init-param>
可以看到我们要放到WEB-INF/cgi这下面,这个时候目录结构是
当前目录pwd: /usr/local/Cellar/tomcat/9.0.19/libexec/webapps/ROOT
├── WEB-INF
│ ├── cgi
│ │ ├── hello.py
│ └── web.xml
└── main.html
这个时候我们浏览器输入 http://localhost:8080/cgi-bin/hello.py 就可以看到我们第一个CGI程序,这里给一个最简单的py示例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
print "Content-type:text/html"
print # 空行,告诉服务器结束头部
print '<html>'
print '<head>'
print '<meta charset="utf-8">'
print '<title>Hello World - 我的第一个 CGI 程序!</title>'
print '</head>'
print '<body>'
print '<h2>Hello World! 我是来自菜鸟教程的第一CGI程序</h2>'
print '</body>'
print '</html>'
如果想展示Html,也就是部署一个静态网页。我们要打开\conf\server.xml
在Host节点下加这么一段
<Context path="" docBase="ROOT" debug="0" reloadable="true" crossContext="true"/>
ROOT是存放html文件夹的文件夹,配置结束后是这样子的:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Context path="" docBase="ROOT" debug="0" reloadable="true" crossContext="true"/>
<!-- <Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="tot_log." suffix=".txt" timestamp="true"/> -->
</Host>
我们可以看到appBase="webapps",也就是说我们配置的文件夹是基于webapps的,也就是webapps下的一个文件目录,可以看到我是在ROOT下面做的修改
├── WEB-INF
│ ├── cgi
│ │ ├── hello.py
│ └── web.xml
└── main.html
我们浏览器输入http://localhost:8080/main.html就可以看到网页了。
网友评论