由于Carl要用到我的程序,我们便合作工作。但是他写的程序是Python的,我写的程序是Java的,必须得找一种方式进行通信。尽管有Jython这些东西,但是Carl认为还是CGI最简便。于是,前阵子开始学学CGI怎么弄。刚开始,觉得好像也不是很难,但是后来进展没有预期的顺利。最后,由于学院的服务器有CGI模块但是不允许随便跑CGI,实验室服务器又装的是FastCGI,感觉麻烦,最后Carl说还是用socket吧... - - |||。
整体来说,用CGI进行通信这个计划算是破产了。虽然是很老旧、基本都不会再用的东西了,但是由于对我来说是新东西,还是很好奇,没有实现,自然是一种惋惜。虽然最后没能用上CGI,但是个人觉得如果学院服务器让用户自己跑CGI的话,应该还是没问题的。无论怎样,还是记录下一些基本知识,免得以后又忘了。
CGI年代久远,不过却实现了动态网页。CGI,准确说,应该是种协议(或者说接口),它使得server中的程序(cgi script)能够通过标准I/O流(STDIN和STDOUT,比如在Java语言里就是System.in和System.out,在C里面就是printf等,只要是能够进行标准I/O流读写的程序,都可以用来实现CGI)读取到所需的信息和输出信息给浏览器,而这些所要从客户端读取的信息则是包含在某些已经被定义好的环境变量中,我们只需要读取这些环境变量,自然就能获取想要的值了(这也就是CGI这个借口为我们所做的事)。而通常所说的CGI,也有可能泛指CGI程序,即CGI script,是开发者自己所写的、处理用户请求的程序。
总体来说,过程是这样的:
1. 服务器接受到请求
2. 服务器发现这个请求是需要一个CGI程序来进行处理
3. 服务器建立一个环境,这个运行环境里有一些变量,也就是所谓的CGI程序所需要的环境变量
4. 服务器在这个环境下启动相应的CGI程序
5. CGI程序解析自己想要的环境变量来获取所提交的请求信息
6. CGI程序对这些请求信息做相应的处理
7. CGI程序将相应的结果输出到标准输出STDOUT,此结果将被输出到用户端,呈现给用户结果。
8. CGI程序执行完毕,退出程序。
比较详细来说,原理大概是这样的:
1. 客户端在浏览某个网页的时候,提交表单(form)。而表单的action则指定了要处理该表单的CGI程序&#x