题记:用“易语言.飞扬”(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;
公开类启动类
{
公开静态启动()
{
intcount=0;
FCGIfcgi=newFCGI;
while(fcgi.Accept()>=0)
{
文本t=s.替换全部("$(title)","QueryString");
t=t.替换("$(params)",get_params(fcgi));
t=t.替换("$(index)",count.到文本());
fcgi.Output(t.到UTF8());
count++;
}
}
staticstringget_params(FCGIfcgi)
{
strings;
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>";
}
returns;
}
常量文本s=["Content-type:text/html
<html><head>
<metahttp-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>byliigo,index:$(index)</p>
</body>
</html>
"];
}
下一篇文章内容预告:缓存Query String。
分享到:
相关推荐
总的来说,`std::string` 的 `replace` 函数提供了高度的灵活性,允许开发人员根据需要精确地替换字符串的任意部分。无论是通过索引、长度、迭代器还是 C 风格的子串,都能有效地进行字符串操作,这是 C++ 编程中...
在本文中,我们将深入探讨如何使用`.NET Core 6`框架和`Entity Framework (EF)`来构建一个功能完备的Web API服务,实现数据的增、删、查、改(CRUD)操作。`.NET Core 6`是微软推出的一个高性能、跨平台的开源开发...
ASP.NET Core Web应用程序是Microsoft开发的一个跨平台的框架,用于构建现代、高性能的Web应用。在本场景中,我们关注的重点是如何在ASP.NET Core中创建数据库。这通常涉及到使用Entity Framework Core (EF Core),...
综上所述,这个项目展示了如何将EFCore与Web API结合,通过Ajax和AngularJS实现在Web应用中的数据管理。开发者可以通过研究源码学习到如何配置EFCore数据库上下文、定义实体模型、创建Web API控制器以及使用...
ASP.NET 是微软公司推出的用于构建动态网站、Web应用程序和Web服务的一种强大框架。WebSamples 是一个包含多个ASP.NET示例的集合,它为开发者提供了学习和理解ASP.NET特性和功能的宝贵资源。在这个压缩包中,...
这个项目展示了如何利用ASP.NET Core MVC(Model-View-Controller)模式来构建一个完整的Web应用程序,涵盖了CRUD(创建、读取、更新和删除)操作,同时实现了N轮胎(N-Tier)架构和验证功能。 **ASP.NET Core MVC*...
在.NET框架下,C#是一种广泛使用的编程语言,尤其在开发Web应用程序时。这个案例——"一个应用.Net中C#技术开发的实用Web案例",展示了如何利用C#的强大力量来构建一个功能完善的B2C(Business to Consumer)在线...
实验室和材料-Web应用程序开发 :warning: :warning: 考试信息(技巧和窍门) 使用脚手架或尝试重现自动创建部分(使用实体框架的带有视图的控制器) 对于数据表,您可以使用以下示例: 在REPO的解决方案领域中...
ASP.NET Core 6是微软推出的轻量级、高性能的开源框架,用于构建Web应用程序,包括WebAPI。它支持跨平台,并提供了依赖注入、中间件、单元测试等现代开发特性。在ASP.NET Core 6中创建WebAPI,你可以定义控制器来...
ASP.NET是一种由微软开发的服务器端Web应用框架,主要用于构建动态网站、Web应用程序和服务。它提供了丰富的工具和功能,使得开发者能够高效地构建与数据库交互的Web应用。本教程将深入探讨如何使用ASP.NET进行...
总的来说,这个Web聊天室项目展示了如何结合使用.NET Core MVC、SignalR、EF和Authorize来构建一个功能完善的、具有实时通信、数据库管理和权限控制的Web应用程序。开发者可以从中学习到如何设计和实现这类交互式...
在IT行业中,数据库应用程序系统是不可或缺的一部分,它们用于存储、管理和检索数据,为各种业务...对于希望在IT领域从事数据库应用开发的人员来说,“使用C#开发数据库应用程序系统ACCP8.0”是一次宝贵的学习经历。
这是一套完整的教程,旨在帮助初学者和有一定经验的开发者掌握现代Web应用程序开发的核心技术。 C#是微软公司推出的面向对象的编程语言,广泛应用于Windows平台、移动设备以及游戏开发。.NET 6是.NET框架的最新版本...
这个源码包“KibaAspNetCore-master”是针对初学者设计的,旨在帮助他们理解并入门Asp.Net Core Web应用程序的开发。 1. **Asp.Net Core基础** Asp.Net Core是对经典Asp.Net的重构,它采用模块化设计,允许开发者...
首先,C# MVC(Model-View-Controller)是一种用于构建可维护性和可测试性的Web应用程序的设计模式。它将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。模型负责业务逻辑和数据...
源码说明: MVC 音乐店是用来介绍和展示使用 ASP.NETMVC 以及 Visual Studio 进行 Web 开发的示例应用程序,我们将从基础知识开始,一步一步地进行介绍,因此,初学者也可以去的很好的学习体验。 这个示例程序使用 ...
4. **ASP.NET**:ASP.NET是微软的Web应用程序框架,它提供了开发Web应用的高效工具和库,支持C#语言。在学生管理系统中,ASP.NET可以用来构建Web API,为前端提供数据接口。 5. **Entity Framework (EF)**:EF是...
综上所述,ASP.NET Core和EF Core结合使用,能够构建出高效、可扩展且易于维护的Web应用程序。通过阅读"ASP.NET Core 2.2.pdf"和"EFCore.pdf",你可以深入了解这两个框架的详细用法和最佳实践,进一步提升你的.NET...
2. MVC (Model-View-Controller):这是一种设计模式,常用于Web应用开发,如ASP.NET MVC。它将应用程序分为三个主要组件:模型(Model)负责数据管理,视图(View)负责显示用户界面,控制器(Controller)处理用户...
3. ASP.NET Core:对于Web应用开发,ASP.NET Core是基于.NET Core的最新框架,提供了更快的性能和更好的可移植性。它支持MVC(Model-View-Controller)和Web API架构,可以构建RESTful服务。 4. Blazor:C#的最新...