试用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();

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

            文本 html 
= html_template.替换全部("$(title)""网页计数器(由EF开发)");
            
            string pathinfo 
= fcgi.PATH_INFO();
            string message;
            
            
//处理提交的表单(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")
            {
                string id 
= 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;script src="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(
"update pagecounter set count = " + count + " where id=" + 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(FCGI fcgi)
    {
        string username 
= fcgi.QUERY_STRING("username");
        
if(username == "") username = "EF爱好者";
        string initcount 
= fcgi.QUERY_STRING("initcount");

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

<hr></hr>
<p>by liigo, <a href="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>

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

 

posted @ 2008-05-04 21:18  fortest  阅读(332)  评论(0编辑  收藏  举报