CGI实现页面的动态生成
2014-08-19 15:49
344 查看
CGI实现页面的动态生成 - bbking
时间 2014-04-02 03:58:00 博客园-所有随笔区原文
http://www.cnblogs.com/chenbjin/p/3639613.html
传统的Web应用开发局限于有限的静态页面( HTML静态页面 ),不利于系统的扩展,不能提供及时信息,而且修改维护麻烦,所以建立一个动态Web应用程序尤为重要。一方面根据访问者的不同请求返回不同的访问信息,即
满足服务的多样性 ;另一方面,可以直接通过后台管理页面发布和修改信息即可,再也不需要修改页面程序。
下面介绍一种简单的创建动态页面的方法和技术:
CGI:Common Gateway Interface,公共网关接口
CGI, 一种基于浏览器的输入、在Web服务器上运行的程序方法。C GI脚本简单地讲是个运行在Web服务器上的程序, 有浏览器的输入触发. 这个脚本通常象服务器和系统中其他程序如数据库的桥梁。
CGI是一种接口的标准,并不区分编程语言,也就是说,CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。CGI会将标准输出重定向到给http的response,返回给浏览器。其操作流程如下图:
首先用户需要在浏览器地址栏输入URL地址,或者单击链接来调用相应的CGI程序,例如chenbjin.tk/cgi-bin/test.cgi。通过URL地址,客户端取得与域名为chenbjin.tk的服务器主机连接,通过Web服务器调用cgi-bin目录下的test.cgi程序,然后将动态生成的HTML页面输出,最后由Web服务器通过网络将生成的HTML页面返回给客户端浏览器。
CGI程序在服务器端执行,并可以和Web服务器在同一主机上。常用的CGI语言有Perl、shell、Python,在windows上也可以用C、C++或Java等进行编写。下面简单介绍shell编写CGI程序。涉及web服务器的搭建,以及具体CGI环境的配置,这里不做详细介绍,有兴趣的朋友可看文章最后的链接。
#!/bin/sh echo "Content-type:text/html" echo echo '<html>' echo '<head>' echo '<title>Hello Word - First CGI Program</title>' echo '</head>' echo '<body>' echo '<h2>Hello Word! This is my first CGI program</h2>' echo '</body>' echo '</html>'
第一行是个特殊的命令,告诉UNIX系统这是个shell脚本;
第三行是 Web服务器用来告诉浏览器输出这个文本是什么类型的. 有关content-type解释可以见有关HTML的说明。
有三个类型的头部: Content-type, Location, 和Status。其中 Content-type 最普遍的。
注意content-type 后面必须跟一个空行. 如果你没有空行,服务器将无法搞清这个头部在哪里结束。
再接着下面是普通的html页面内容,相信大家都能看懂。
对于CGI而言,最主要就是接收到用户的请求,从请求中,解析出get或者post方法传递过来的参数。这点,我认为也是对于初学者最麻烦的地方,这里提供一个已经完成这种功能的脚本—proccgi.sh(
http://www.fpx.de/fp/Software/proccgi.sh )。这个脚本可以直接解析出get和post方法传过来的数据。
这里以一个简单的form表单来描述:
<form action="http://chenbjin.tk/cgi-bin/test.cgi" method="post"> email: <input type="text" name="email"/> user: <input type="text" name="user"/> <input type="submit" value="submit"/> </form>
提交邮箱及用户名到test.cgi,此时test.cgi便能获取表单中传递的数据。
使用方法: 在test.cgi脚本中调用eval './proccgi.sh $*'语句,然后使用"$FORM_"和参数的key,就可以获得参数的值了,如email="$FORM_email"。
#!/bin/sh eval 'proccgi.sh $*' mail=$FORM_email user=$FORM_user echo Content-type: text/plain echo echo "传递的参数及其值:[mail,$mail] ,[user,$user]" echo done.
虽然CGI实现了网站动态性,但是CGI也存在很多不足之处:
1、需要为每个请求启动一个操作CGI程序的系统进程,如果请求非常频繁,开销会很大
2、需要重复编写网络协议的代码以及进行编码,耗时长。
人往高处走,伟大的程序员都会寻求更优的途径来解决问题,既然CGI有不足,那自然会有新的技术出现解决这些问题。
---------------------------------------------------
有兴趣的同学可通过以下链接进一步学习CGI:
1、CGI入门教程: http://www.jdon.com/idea/cgi.htm
2、 c语言写CGI程序: http://www.cs.tut.fi/~jkorpela/forms/cgic.html
3、perl写CGI程序: http://www.yiibai.com/perl/perl_cgi.html
4、proccgi.sh源网址: http://www.fpx.de/fp/Software/ProcCGIsh.html
相关文章推荐
- CGI实现页面的动态生成
- 动态生成 WebUpload 实现列表页面的上传功能
- 简单高级搜索页面的简单实现,包括数据控件循环嵌套,DataTable动态生成数据添加等
- php动态网页实现页面静态化 通过在初次被访问时生成html文件保存起来,下次该PHP程序被访问时就直接找到以前被访问过的html页面
- Javascript动态生成表格,并添加按钮,页面加载自动实现
- 自定义动态生成页面打印以及打印预览的一个实现例子
- 从JSP,ASP等动态页面生成静态页面的实现方式
- 利用字节流将生成的图片输出到js页面,实现动态生成图片
- php动态网页实现页面静态化 通过在初次被访问时生成html文件保存起来,下次该PHP程序被访问时就直接找到以前被访问过的html页面
- 从JSP,ASP等动态页面生成静态页面的实现方式
- php动态网页实现页面静态化 通过在初次被访问时生成html文件保存起来,下次该PHP程序被访问时就直接找到以前被访问过的html页面
- 从JSP,ASP等动态页面生成静态页面的实现方式
- 一个页面实现修改删除列表显示,ajax动态生成table(使用ajax,springmvc,jsp)
- html5 实现动态网页截屏 页面生成图片并打印(图文)
- php动态网页实现页面静态化 通过在初次被访问时生成html文件保存起来,下次该PHP程序被访问时就直接找到以前被访问过的html页面
- javascript实现动态生成(页面元素)以表格为例
- 从JSP,ASP等动态页面生成静态页面的实现方式
- 不刷新页面动态更新select选项,实现两个select相互操作
- ASP.NET动态生成HTML页面
- ASP.NET 动态生成 HTML 页面