试用EF开发WEB应用程序(12): 网页计数器

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


试用EF开发WEB应用程序(12):网页计数器

又一个 EFCGI 应用实例,网页计数器。

网页计数器,在目前网络上应用十分普遍,其功能是,对网页的被浏览次数进行统计,网页每被浏览一次,该计数值就被加一。

我实现的这个网页计数器,是一个通用网页计数器。即,它可以给任意人、任意网页提供计数服务,只要你事先申请得到一个ID。在线申请计数器

以下是本网页计数器的“易语言.飞扬”(EF)源代码:

引入fastcgi,sqlite;

公开类启动类
{
静态Sqlite数据库_db;

公开静态启动()
{
_db
= new Sqlite数据库();
_db.打开(
" ../db/pagecounter.file " , true );
if (_db.表是否存在( " pagecounter " ) == false )
createTable();

FCGIfcgi
= new FCGI;
while (fcgi.Accept() >= 0 )
{
if (fcgi.REQUEST_METHOD.到小写() == " post " )
fcgi.ReadContentAsQueryString();

文本html
= html_template.替换全部( " $(title) " , " 网页计数器(由EF开发) " );

stringpathinfo
= fcgi.PATH_INFO();
stringmessage;

// 处理提交的表单(form)
if (pathinfo == " /submit " )
{
int id;
if (fcgi.QUERY_STRING( " username " ) != "" || fcgi.QUERY_STRING( " remark " ) != "" )
id
= registerID(fcgi);

fcgi.Output(
" Location:/efcgi/pagecounter.efcgi/id " + id.到文本() + " " );
continue ;
}

// 显示处理结果
if (pathinfo.左边( 3 ) == " /id " )
{
stringid
= pathinfo.右边(pathinfo.长度 - 3 ); // "/id123"->"123"
if (id == " 0 " )
{
message
+= " <p><b>对不起,操作失败。请尝试重新申请。</b></p> " ;
}
else
{
message
+= " <p><b>恭喜,注册成功,id为 " + id + " (请务必记住)。</b></p> " ;
message
+= " <p>欲使用此计数器,请将以下代码放到HTML中任意位置:</p> " ;
message
+= " <p><pre>&lt;scriptsrc="http://liigo.com/efcgi/pagecounter.efcgi?id= " + id + " "&gt;&lt;/script&gt;</pre></p> " ;
}
}

// 根据id查计数器,并返回相应的js代码
if (fcgi.QUERY_STRING( " id " ) != "" )
{
通用型count
= _db.读字段值( " pagecounter " , " count " ,Sqlite字段类型.整数, " id= " + fcgi.QUERY_STRING( " id " ));
count
= count.取整数() + 1 ;
_db.执行SQL(
" updatepagecountersetcount= " + count + " whereid= " + fcgi.QUERY_STRING( " id " ));
fcgi.Output(
" Content-type:application/x-javascript document.write(" " + count.取整数().到文本() + " "); " );
continue ;
}

html
= html.替换( " $(message) " ,message);

fcgi.Output(html.到UTF8());
}

_db.关闭();
}

private static createTable()
{
Sqlite表结构tdef
= new Sqlite表结构();
tdef.添加字段(
" id " ,Sqlite字段类型.主键整数);
tdef.添加字段(
" count " ,Sqlite字段类型.整数);
tdef.添加字段(
" username " ,Sqlite字段类型.文本);
tdef.添加字段(
" remark " ,Sqlite字段类型.文本);
_db.创建表(
" pagecounter " ,tdef);
}

// 注册计数器,返回id
private static int registerID(FCGIfcgi)
{
stringusername
= fcgi.QUERY_STRING( " username " );
if (username == "" )username = " EF爱好者 " ;
stringinitcount
= fcgi.QUERY_STRING( " initcount " );

stringsql
= " insertintopagecounter(username,remark,count)values(' " + username + " ',' " + fcgi.QUERY_STRING( " remark " ) + " ', " + initcount + " ) " ;
if (_db.执行SQL(sql))
return ( int )_db.取最新插入ID();
else
return 0 ;
}

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

< html >< head >
< metahttp - equiv = " content-type " content = " text/html;charset=utf-8 " >
< title > $(title) </ title >
</ head >
< body >
< h1 > $(title) </ h1 >
< p > 网页记数器:为单个网页提供流量统计。 </ p >
$(message)
< hr ></ hr >
< h3 > 您还没有计数器?请先申请: </ h3 >
< formmethod = " post " action = " /efcgi/pagecounter.efcgi/submit " >
< p > 姓名: < inputtype = " text " name = " username " size = 20 /></ p >
< p > 说明: < inputtype = " text " name = " remark " size = 80 /></ p >
< p > 计数器初始值: < inputtype = " text " name = " initcount " size = 10 value = " 0 " /></ p >
< p >< inputtype = " submit " value = " 提交 " ></ input ></ p >
</ form >

< hr ></ hr >
< p > byliigo, < ahref = " http://blog.csdn.net/liigo/ " > http: // blog.csdn.net/liigo/</a></p>
</ body >
</ html >
" ];
}

在注册得到ID之后,请将以下代码放置到欲添加计数器的HTML网页源代码中:

< p > 计数器:
< script src ="http://liigo.com/efcgi/pagecounter.efcgi?id= 你的ID"></ script >
</ p >

这里有一个使用了此网页计数器的测试网页

你可能感兴趣的:(应用服务器,Web,浏览器,sqlite,网络应用)