试用EF开发WEB应用程序(3): Query String (附图)

23 篇文章 0 订阅
22 篇文章 0 订阅

题记:用“易语言.飞扬”(EF)开发WEB应用程序,此前还没有先例。但因为EF本地开发包(EFNDK)已经发布,用C/C++开发一个EF类库,使其支持EF开发WEB应用程序,应该并非难事。当然也可想而知,其中必有诸多难点有待解决。此系列文章,为本人探索过程之记录,对外人未必有多大价值。如有网友乐观其事,还请理性待之。作者:liigo。转载请务必注明出处:http://blog.csdn.net/liigo/在线留言

 


试用EF开发WEB应用程序(3): Query String 

 

今天说一下如何在“易语言.飞扬”中使用FastCGI类库(fastcgi.efn)读取URL地址中的Query String。

什么是Query String?URL地址中问号(?)之后的文本即为Query String。以下面这个URL为例:

  http://localhost:8080/querystring.efcgi?x=abc&y=ef&z=%E4%B8%AD%E5%9B%BD

以粗体显示并黄色背景加亮的部分(x=abc&y=ef&z=%E4%B8%AD%E5%9B%BD)即为Query String。如果把一个FastCGI程序比作一个函数调用的话,那么Query String 就相当于函数的参数。 在这个例子中,FastCGI程序 querystring.efcgi 接收了三个参数,参数 x 的值为 abc,参数 y 的值为 ef,参数 z 的值为 %E4%B8%AD%E5%9B%BD (解码后是“中国”二字)。

为增加印象,再看几个 Query String 实例,GOOGLE(谷歌)、百度(BAIDU)和YAHOO(中国雅虎)搜索时产生的URL:

  http://www.google.cn/search?hl=zh-CN&q=liigo&meta=&aq=f

  http://www.baidu.com/s?ie=gb2312&bs=fastcgi.efn&sr=&z=&cl=3&f=8&wd=fastcgi.efn&ct=0

  http://www.yahoo.cn/s?p=%E6%98%93%E8%AF%AD%E8%A8%80.%E9%A3%9E%E6%89%AC+ef+&v=web&pid=hp 

Query String 在当今网络中的使用非常非常普遍,几乎随处可见。 

 

在EF类库 fastcgi.efn 中,读取 Query String 主要涉及以下方法:

属性 文本 FCGI.QUERY_STRING();   // 获取URL解码之后的QUERY_STRING

文本 FCGI.QUERY_STRING(文本 name);  
// 取QUERY_STRING中指定名称的参数值,已经URL解码

文本[] FCGI.QUERY_STRING_NAMES();  
// 取QUERY_STRING中的参数名称数组

属性 文本 FCGI.QUERY_STRING_UNDECODED();  
// 返回原始的未经URL解码的QUERY_STRING

  其中属性方法 QUERY_STRING(),其名称等同于同名的CGI环境变量,其返回值也是该环境变量的内容(但已经过URL解码)。(至于其它CGI环境变量,将在以后的文章中给予介绍。)

  仍以前面的(第一个)URL为例,调用无参数的方法 fcgi.QUERY_STRING() 将返回“x=abc&y=ef&z=中国”,注意其中的“中国”二字已被解码出来。与此方法相对照的是 fcgi.QUERY_STRING_UNDECODED(),它将返回未经URL解码之前的Query String,即“x=abc&y=ef&z=%E4%B8%AD%E5%9B%BD”。调用带文本参数的方法 fcgi.QUERY_STRING(文本 name) 将返回指定参数的值,如 fcgi.QUERY_STRING("x") 将返回“abc”,fcgi.QUERY_STRING("y") 将返回“ef”,fcgi.QUERY_STRING("z") 将返回“中国”(经URL解码)。调用方法 fcgi.QUERY_STRING_NAMES() 将得到一个参数名称数组,{"x", "y", "z"},数组各成员顺序与其在Query String出现的顺序一致。

  注意,根据CGI规范,环境变量 QUERY_STRING 中存储的是“原始的、未经URL解码的”Query String,需要程序员读取后自行解码。而在我的EF类库中,QUERY_STRING () 方法直接返回了“URL解码后的”Query String。这也是充分考虑到了程序员的实际需求而进行的比较人性化的处理。如果确实需要“未经URL解码的”Query String,可调用 QUERY_STRING_UNDECODED() 方法获取,并未丢失功能性和灵活性。在这一点上,与普通的 CGI / FastCGI 程序有所不同,特此指出。

  另外值得指出的是,读取、解码、解析Query String 的动作已专门经过优化并缓存结果,尽最大可能保证执行效率,这将在下一篇文章中详述。关于URL解码和URL编码,也将在今后的文章中介绍。

下面请看实际运行效果图(在线演示):

以上动态网页的“易语言.飞扬”(EF)源代码如下:

引入 fastcgi;

公开 类 启动类
{
    公开 静态 启动()
    {
        
int  count  =   0 ;
        FCGI fcgi 
=   new  FCGI;
        
while (fcgi.Accept()  >=   0 )
        {
            文本 t 
=  s.替换全部( " $(title) " " Query String " );
            t 
=  t.替换( " $(params) " , get_params(fcgi));
            t 
=  t.替换( " $(index) " , count.到文本());
            fcgi.Output(t.到UTF8());
            count
++ ;
        }
    }

    
static  string get_params(FCGI fcgi)
    {
        string s;

        s 
+=   " <p>QUERY_STRING:  "   +  fcgi.QUERY_STRING  +   " </p> " ;
        s 
+=   " <p>QUERY_STRING_UNDECODED:  "   +  fcgi.QUERY_STRING_UNDECODED  +   " </p> " ;
        s 
+=   " <p>QUERY_STRING_NAMES:  "   +  fcgi.QUERY_STRING_NAMES().到文本()  +   " </p> " ;
        
        s 
+=   " <h3>PARAMES: </h3> " ;

        遍历循环(fcgi.QUERY_STRING_NAMES(), 文本 name)
        {
            s 
+=   " <p> "   +  name  +   " "   +  fcgi.QUERY_STRING(name)  +   " </p> " ;
        }

        
return  s;
    }

    常量 文本 s 
=  [ " Content-type: text/html

< html >< head >
< meta http - equiv = " content-type "  content = " text/html;charset=utf-8 " >
< title > $(title) </ title >
</ head >
< body >
< h1 > $(title) </ h1 >
< hr ></ hr >
< p > $(params) </ p >
< hr ></ hr >
< p > by liigo, index: $(index) </ p >
</ body >
</ html >
" ];
}

 

下一篇文章内容预告:缓存Query String。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值