• CGI


    标题也就是这里要说的内容.

    CGI也就是公用网关接口.  

    历史:

      自从91年欧洲原子核研究中心开发出了www协议,网络服务的享受者就不局限于那些网络设计者了.

      借此,web技术就应运而生了.早期,web技术只是按照客户服务器方式进行静态的连接,一个是服务请求方,一个是服务提供方,提供的一般都是静态的,没法动态变化的内容.后来人们发现了其缺点,就进而思考去改变一下.   因此动态网页的概念就出现了!  动态网页就是可以动态变化,随用户的想法进行改变的网页.

      但是网络设计者就犯难了,这说起来简单,做起来难!   我们都知道使用网络,但是网络如何通信呢?   动态通信又如何进行呢?这里就不讲http协议是如何规定客户端及服务器端如何进行通信的了!   主要讲动态变化是如何实现的.

      首先,客户端发出服务请求,比如查询数据库的某条信息.  它就发送请求给服务器,服务器在受到请求后会对之进行处理,比如"你小子原来想查询李四的账号密码",但是我们要知道,服务器不是万能的,不是什么乱七八糟的东西它都要管,它想管的话要知道它要给请求方提供什么服务?且它怎么提供这种服务?在知道提供的确切服务后,他就要着手进行这种服务的进行.  通过什么呢?   就是CGI程序(脚本),如这个脚本告诉它,他应该怎么做来实现这种服务,它在执行这个脚本后就能回送给服务器,服务器在添加一定必要信息之后就能发送给客户端了.最后,客户端的浏览器就能解析这种信息并渲染在屏幕上了.

    从上面就可以看出CGI就是一个信息进行交互的"接口",在我们的印象里,串行转并行,或者并行转串行大抵也是相同的道理.

    CGI并不是一种语言,他只是一个标准,一种供信息在不同系统之间进行交换的一个规则,一种协议而已. 

    CGI脚本是在服务器端"运行"的,为啥这么说呢? 因为服务器本身不提供脚本的运行,在有多方进行协商后才有了这么个信息转换的规则出现.

    使用CGI实现客户端与服务器的交互有以下几个标准步骤,具体步骤如下:

    (1)Web 客户端的浏览器将URL的第一部分解码与Web服务器相连。
    (2)Web 浏览器将URL的其余部分提供给服务器。
    (3)Web 服务器将URL转换成路径和文件名。
    (4)Web 服务器发送 HTML 和别的组成请求页面的文件给客户。一旦页面内容传送完,
    这个连接自动断开。
    (5)在客户端,HTML脚本提示用户做动作或输入。当用户响应后,客户请求Web服务器建立一个新的连接。
    (6)Web 服务器把这些信息和别的进程变量传送给由HTML以URL的形式指定CGI程序。
    (7)CGI 根据输入作出响应,把响应结果传送给 Web 服务器。
    (8)Web 服务器把响应的数据传给客户,完成后关闭连接。 [2] 
    公共网关接口 CGI 程序是存放在 HTTP 服务器上,为用户和HTTP服务器之外的其他应用程序提供互相“交谈”手段的软件,其特点是:
    公共(Common)。无须考虑客户机和服务器所运行的操作系统平台,只要二者的网关程序遵循同一数据传输协议,即可进行数据交互。
    网关(Gateway)。CGI 可被用来作为 HTTP 服务器与其他第三方应用程序之间的“连接件”或“中件(Middle Ware) "。
    接口(Interface)。CGI 使用标准通讯机制,为其它应用程序与 HTTP 服务器提供数据传输接口。用 CGI 可以实现处理表格,数据库查询,发送电子邮件或控制服务器端硬件等许多操作。

    下面代码展示一下如何用php语言实现一个具体的数据库查询功能的CGI程序.

    CGI程序不是放在服务器上就能顺利运行,如果要想使其在服务器上顺利的运行并准确的处理用户的请求,则须对所使用的服务器进行必要的设置。
    配置:根据所使用的服务器类型以及它的设置把CGI程序放在某一特定的目录中或使其带有特定的扩展名。
     
     
     
    CGI应用程序运行在浏览器可以请求的服务器系统上,执行时需要使用服务器CPU时间和内存。如果有成千上万的这种程序会同时运行,那会对服务器系统提出极高的要求。你要慎重考虑这个问题,以防止服务器系统崩溃
     

    简单介绍以下php和asp:

    ASP(Active Server Pages):活动服务器页面,就是一个编程环境,在其中,可以混合使用HTML、脚本语言以及组件来创建服务器端功能强大的Internet应用程序。如果你以前创建过一个站点,其中混合了HTML、脚本语言以及组件,你就可以在其中加入ASP程序代码。通过在HTML页面中加入脚本命令,你可以创建一个HTML用户界面,并且,还可以通过使用组件包含一些商业逻辑规则。组件可以被脚本程序调用,也可以由其他的组件调用。
    ASP的工作原理:
    当在Web站点中融入ASP功能后,将发生以下事情:
    1、用户调出站点内容,默认页面的扩展名是.asp。
    2、浏览器从服务器上请求ASP文件。
    3、服务器端脚本开始运行ASP。
    4、ASP文件按照从上到下的顺序开始处理,执行脚本命令,执行HTML页面内容。
    5、页面信息发送到浏览器。
    因为脚本是在服务器端运行的,所以Web服务器完成所有处理后,将标准的HTML页面送往浏览器。这意味着,ASP只能在可以支持的服务器上运行。让脚本驻留在服务器端的另外一个益处是:用户不可能看到原始脚本程序的代码,用户看到的,仅仅是最终产生的HTML内容。
    PHP:Hypertext Preprocessor
    PHP 是一种服务器端的,嵌入HTML的脚本语言。PHP区别其他像客户端Javascript的地方是它的代码在服务器端执行.PHP能做什么?
    最低水平,PHP可以做任何其他CGI程序所能做的事,例如收集表格数据,生成动态页面内容,或者收发cookies.可能最强大,最有意义的特性是PHP支持大范围的数据库。书写一个支持数据库的Web 页面是难以置信的简单。
    以上大都来源于:https://baike.baidu.com/item/CGI/607810?fr=aladdin

    以下是主页面.

     1 <!DOCTYPE html>
     2 <html>
     3     <head lang="en">
     4         <meta charset="UTF-8"/>
     5         <title>main-page</title>
     6         
     7         <style type="text/css">
     8             a{
     9                 text-decoration:none;
    10                 display:block;
    11                 border:1px red solid;
    12             }
    13             td{
    14                 border:1px red solid;
    15             }
    16         </style>
    17     </head>
    18     <body background="img/main_page.jpg">
    19     <h3 align="center" >hello this is a sql page ,you can take some actions to realize you target!</h3>
    20         <div align="center">
    21             <tr>
    22                 <td><a href="select.php">select</a></td> <br/>
    23                 <td><a href="insert.php">insert</a></td> <br/>
    24                 <td><a href="delete.php">delete</a></td> <br/>
    25                 <td><a href="update.php">update</a></td>
    26             </tr>
    27         </div>
    28     </body>
    29 </html>

    以下是副页面:

     1 <!DOCTYPE html>
     2 <html>
     3     <head lang="en">
     4         <meta charset="UTF-8"/>
     5         <title>select-page</title>
     6         
     7         <style type="text/css">
     8         
     9         </style>
    10         <script>
    11 function showHint(str)
    12 {
    13   var xmlhttp;
    14   if (str.length==0)
    15   { 
    16     document.getElementById("txtHint").innerHTML="";
    17     return;
    18   }
    19   if (window.XMLHttpRequest)
    20   {
    21     // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
    22     xmlhttp=new XMLHttpRequest();
    23   }
    24   else
    25   {
    26     // IE6, IE5 浏览器执行代码
    27     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    28   }
    29   xmlhttp.onreadystatechange=function()
    30   {
    31     if (xmlhttp.readyState==4 && xmlhttp.status==200)
    32     {
    33       document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    34     }
    35   }
    36   xmlhttp.open("GET","_select.php?q="+str,true);
    37   xmlhttp.send();
    38 }
    39 
    40 function myfunction()
    41 {
    42     var str=document.getElementById("txt1").value;
    43     showHint(str);
    44 }
    45         </script>
    46     </head>
    47     
    48     <body background="img/main_page.jpg">
    49         
    50         <p color="red"><strong>hello  this is a select-page!</strong></p>
    51         <p display="inline">请输入主键:</p>
    52         输入姓名: <input type="text" id="txt1"/>
    53         <button type="button" onclick="myfunction()"/> click </button>
    54         <div id="txtHint">
    55         
    56         </div>
    57     </body>
    58 </html>

    以下是php实现的CGI程序实现的查询功能:

     1 <?php
     2 $servername = "localhost";
     3 $username = "root";
     4 $password = "1234";
     5 $dbname="goods";
     6 $q=$_GET['q'];
     7 // 创建连接
     8 $conn = new mysqli($servername, $username, $password, $dbname);
     9  
    10 // 检测连接
    11 if ($conn->connect_error) {
    12     die("连接失败: " . $conn->connect_error);
    13 } 
    14 
    15 $sql="select * from customer";
    16 $return = $conn->query($sql);
    17 if($return->num_rows >0)
    18 {
    19     while($row=$return->fetch_assoc())
    20     {
    21         if($row['用户名']==$q)
    22         {
    23             $str="姓名:".$row['用户名'].'<br/>'."性别:".$row['性别'].'<br/>'.'地址'.$row['现住址'];
    24             $str=$str.'<br/>'.'手机号:'.$row['手机号'].'<br/>'.'邮箱:'.$row['邮箱'].'<br/>';
    25             echo $str;
    26             break;
    27         }
    28         else{
    29             continue;
    30         }
    31     }
    32 }
    33 else {
    34     echo "0 结果";
    35 }
    36 
    37 $conn->close();
    38 ?>

    以上,页面很简单.

    见谅!

  • 相关阅读:
    P1829 [国家集训队]Crash的数字表格 / JZPTAB 莫比乌斯反演
    Luogu P1447 [NOI2010]能量采集 数论??欧拉
    Luogu P2522 [HAOI2011]Problem b 莫比乌斯反演
    Luogu P2257 YY的GCD 莫比乌斯反演
    [笔记] 数论函数小记
    [笔记] 线性筛小记
    Luogu P1092 虫食算 爆搜
    Luogu P1066 2^k进制数 组合数学
    Luogu P1641 [SCOI2010]生成字符串 组合数学
    Luogu P2532 [AHOI2012]树屋阶梯 卡特兰数
  • 原文地址:https://www.cnblogs.com/zww-kjj/p/12287718.html
Copyright © 2020-2023  润新知