回 帖 发 新 帖 刷新版面

主题:[转帖]骇人听闻的 CSP

来源:雨下桐梧 作者:Ghostex


    今天有点空,研究了一下CSP,有一点不大不小的收获,现在拿出来献一下丑。用个有点搞噱头的标题是因为在网上原来有就这么一篇文章,借个标题聚点人气,呵呵。而我即将要介绍的东西,的确是比较有创意的,并且文章有一段话是引用里面的,所以用一下这个标题也不足为过吧,言归正传,下面开始。
    Hmm...What is CSP?

    咳.....关于CSP的概念和背景,我实在懒得写了,请允许我摘录一段:

---------------------------------------------------------------------------

    这个CSP不是CSP(Commercial Service Provider)即商业服务提供商,CSP不是Client/Server Program,也不是Chinese Super Programer,更不是CS Player,那么什么是CSP呢?在说明什么是CSP之前,先说明什么是“骇人听闻”,一说到“骇人听闻”,你可能就想到了是什么坏事吧,其实不一定,应该说就是前所未闻的事说严重一点就是“骇人听闻”了。在每一本关于asp, php, jsp, asp.net书上都告诉你,做网站不可能使用C++,真的吗?这个CSP偏偏就是C++ Server Pages的简称,和asp、jsp类似,属于一种Web应用扩充的脚本语言,可以用来编写网页代码。其对应的文件名是".CSP"。

(下面的文字部分来源于《CSP开发者手册》)

    CSP使用C++语言作为脚本的语言,和asp、jsp、php等不同的是,CSP不是解释执行的脚本,而是真正编译后执行的脚本。因此和其它脚本语言相比较,CSP执行速度和效率都要高一些,由于使用标准的动态连接思想,因此CSP可以被用户非常方便的扩充,对于复杂的或者保密要求高的应用,完全可以通过CSP扩展来完全隐藏实现的细节。
    CSP是经过编译执行的代码,用户需要作的是维护CSP的源码,而编译过程是由CSP内置的编译器来完成,称为现场编译(Field Compile)。CSP脚本的缺点是需要保存编译后的二进制代码,以提高再次执行的速度,因此CSP作的网站需要比其它脚本语言占用更多的磁盘空间。
    CSP实际上就是一种CGISpawn,关于CGISpawn的详细介绍可以参考MSDN的相关内容。

---------------------------------------------------------------------------

antigloss 插嘴说:
    再往下看之前,请您先了解一下如何配置 CSP 服务器。先安装 IIS(5.0 以上版本)或者 Apache(1.3.x 以上版本),然后安装 C++ Server Pages (CSP) Engine。至此,一台 CSP 服务器就配置成功了。

CSP Engine 下载地址:[url]http://cpp.ga-la.com/html/8/17/0512/98.htm[/url]

---------------------------------------------------------------------------

    好了,回到主题上来。现在的首要任务是:如何使用CSP写页面呢?

    在场的各位会写ASP页面的有多少人呢?

    嗯,好,还挺多的嘛~~~~那我就继续了。

    大家都知道在ASP中写代码是要在 <% 与 %> 之间的部分写的,CSP也是如此。不过少许的差别还是有的。这个差别体现在:

    1.CSP对大小写敏感。因为这是C++啊,会C/C++语言的人都知道。

    2.在CSP的体系中,有一个特殊的代码段标志:<%! %>。

    仔细看,没错,就是写在 <%! %> 之间,在第一个%后面有一个!,这是作为全局变量和自定义函数代码块的标志,声明结构体也要在这里。在一个CSP页面中,所有的自定义函数的实现一定要放在<%! %>之间。而其它的代码则可以像ASP代码一样在页面的各处随意穿插安放。只要在<% %>中就行。

在了解这些细节之后,我们就可以开始写页面了。

我先给出一个简单的例子,然后再仔细给大家分析一下:

<html><body>
<%
    int i=0;
    char s[50];
    for ( i = 0; i < 10; ++i )
    {
        sprintf(s,"<br>%d : 欢迎来到CSP的世界!",i);
        Response.Write(s);
    }
%>
</P>It is over!</P>
</body></html>

访问这个CSP页面,你会得到一个显示如下内容的页面:

0 : 欢迎来到CSP的世界!
1 : 欢迎来到CSP的世界!
2 : 欢迎来到CSP的世界!
3 : 欢迎来到CSP的世界!
4 : 欢迎来到CSP的世界!
5 : 欢迎来到CSP的世界!
6 : 欢迎来到CSP的世界!
7 : 欢迎来到CSP的世界!
8 : 欢迎来到CSP的世界!
9 : 欢迎来到CSP的世界!

It is over!

    大家都学过C语言吧,看看上面的语句(不是吧?你C语言挂了?!)。变量声明与循环我就不多讲了,有两句得说一下:

    1.sprintf(s,"<br>%d : 欢迎来到CSP的世界!",i);

这句是把我们要显示的字符串复制到缓冲区 s 中去。实现这个功能的函数是:sprintf 。是不是觉得和C语言中的 printf 很像呢?没错,它实际上与printf就是同一族的(其它的还有wsprintf , fprintf 等等。这里先不做讨论。)printf的任务是把字符串输出到屏幕,而sprintf则是把字符串输出到内存中的一块区域,以供别的代码使用。它的的用法和printf类似,都是要通过%d等一些占位符来实现格式化输出。当页面执行完这一句之后,就把“0 : 欢迎来到CSP的世界!”这样的字符串放到数组 s 中了。

    2.Response.Write(s);

这一句对于经常进行ASP编程的同学应该相当熟悉吧。它的主要任务就是把刚才我们得到的字符串从内存中取出来,再写入服务器的响应,进而显示在你的浏览器上。如果你已经能够正确地显示出结果,那么恭喜你,你已经入门了!

下面介绍一下在CSP中可以使用的数据类型以及可以直接使用的基本类,还有很实用的功能类。

char
wchar_t
std::string
std::wstring
int
unsigned int
__int64
unsigned __int64
long
unsigned long
short
unsigned short
char
unsigned char
bool
double
float

以上类型支持 const 关键字。

以下是基本类:
CSPDate
CSPTime
CSPDateTime
CSPVariant
CSPBuffer
CSPDate
CSPException
CSPFile
CSPString
CSPVarArray
CSPWString

这三个类是对数据库操作的封装:
CSPODBCConnection
CSPODBCField
CSPODBCRecordset

以下是功能类:
CSPImpersonation
CSPMail
CSPMime
CSPMimePart
CSPTemplate
CSPThread
CSPThreadLock
CSPThreadLockHandler
CSPTimer
CSPTxContext
CSPTxObject

下面这几个是模板类(这确实让我很惊奇):
CSPPool
CSPPool::ObjectPtr
CSPArray
CSPPtr

写了这么多,好累啊。也不知道有人看没???对于那个为什么会有关于<%! %>的规定的原因,我改天会仔细阐述的。但愿这个“改天”不会太长,呵呵。

回复列表 (共6个回复)

沙发

据我所知,CSP 目前有两种版本,一种是希腊 micronovae 的 CSP,成形于2002年,本文介绍的就是这种 CSP;另一种是中国 CSPDev 的 CSP,目前还在还不太成熟。

希腊的 CSP 以 Html 代码为主,C++ 代码穿插在 Html 代码之间;中国的 CSP 以 C++ 代码为主,Html 代码穿插在 C++ 代码之间。

目前我还没找到中国的 CSP 服务器程序下载地址。

这里有一篇介绍中国的 CSP 的文章,有兴趣的朋友不妨看看。
http://sinoprise.com/read.php?tid=163&fpage=1

哪天有空我也用csp写个文章系统
可惜目前似乎没有空间支持,只能在自己的电脑上玩玩

CSP Engine 下载地址:[url]http://cpp.ga-la.com/html/8/17/0512/98.htm[/url]

板凳

3 楼

顶一下[em12]

4 楼

新的东东,接触一下

5 楼

为什么说是骇人听闻的?

6 楼

好东西啊,这样的话可以抛弃M$了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册