什么是asp

作者: Robin 分类: 百科知识 发布时间: 2009-01-14 19:09

概述

ASP是Active Server Page的缩写,意为“动态服务器页面”。ASP是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单、方便的编程工具。ASP的网页文件的格式是.asp,现在常用于各种动态网站中。 ASP是一种服务器端脚本编写环境,可以用来创建和运行动态网页或Web应用程序。ASP网页可以包含HTML标记、普通文本、脚本命令以及COM组件等。利用ASP可以向网页中添加交互式内容(如在线表单),也可以创建使用HTML网页作为用户界面的web应用程序。 与HTML相比,ASP网页具有以下特点:
(1)利用ASP可以实现突破静态网页的一些功能限制,实现动态网页技术;
(2)ASP文件是包含在HTML代码所组成的文件中的,易于修改和测试;
(3)服务器上的ASP解释程序会在服务器端执行ASP程序,并将结果以HTML格式传送到客户端浏览器上,因此使用各种浏览器都可以正常浏览ASP所产生的网页;
(4)ASP提供了一些内置对象,使用这些对象可以使服务器端脚本功能更强。例如可以从web浏览器中获取用户通过HTML表单提交的信息,并在脚本中对这些信息进行处理,然后向web浏览器发送信息;
(5)ASP可以使用服务器端ActiveX组件来执行各种各样的任务,例如存取数据库、发现和那个Email或访问文件系统等。
(6)由于服务器是将ASP程序执行的结果以HTML格式传回客户端浏览器,因此使用者不会看到ASP所编写的原始程序代码,可防止ASP程序代码被窃取。

ASP的工作原理

当在Web站点中融入ASP功能后,将发生以下事情:
1、用户向浏览器地址栏输入网址,默认页面的扩展名是.asp。
2、浏览器向服务器发出请求。
3、服务器引擎开始运行ASP程序。
4、ASP文件按照从上到下的顺序开始处理,执行脚本命令,执行HTML页面内容。
5、页面信息发送到浏览器。

ASP的运行环境

asp需要运行在PWSIIS下。PWS或IIS服务在windows98或windows2000的光盘上附带着,可以通过“添加/删除程序”中的“添加/删除windows组件”来安装。
一般asp需与access数据库或SQL Server数据库结合使用,编出功能强大的程序。
能够运行ASP的web服务器软件
Windows2000默认安装的是IIS5.0(internet information server),而windows xp默认安装的是IIS5.1,windows 2003默认安装的IIS6.0。
PWS(personal web server)运行在windows98环境下的简单个人网页服务器,现在新的Windows Vista带有的IIS是7.0版本,虽然Windows Server 2008所带的IIS也是7.0,但是功能更加强大。

ASP—IIS的安装与配置

IIS的安装与配置
a.安装IIS
若操作系统中还未安装IIS服务器,可打开“控制面板”,然后单击启动 “添加/删除程序”, 在弹出的对话框中选择 “添加/删除Windows组件”,在Windows组件向导对话框中选中“Internet信息服务(IIS)”,然后单击“下一步”,按向导指示,完成对IIS的安装
b.启动Internet信息服务(IIS)
Internet信息服务简称为IIS,单击Windows开始菜单—所有程序—管理工具—Internet信息服务(IIS)管理器,即可启动“Internet信息服务”管理工具.
c.配置IIS
IIS安装后,系统自动创建了一个默认的Web站点,该站点的主目录默认为C:\\Inetpub\\www.root。
用鼠标右键单击“默认Web站点”,在弹出的快捷菜单中选择“属性”,此时就可以打开站点属性设置对话框,在该对话框中,可完成对站点的全部配置。
主目录与启用父路径
单击“主目录”标签,切换到主目录设置页面,该页面可实现对主目录的更改或设置。注意检查启用父路径选项是否勾选,如未勾选将对以后的程序运行有部分影响。主目录—配置—选项。
设置主页文档
单击“文档”标签,可切换到对主页文档的设置页面,主页文档是在浏览器中键入网站域名,而未制定所要访问的网页文件时,系统默认访问的页面文件。常见的主页文件名有index.htm、index.html、index.asp、 index.php、index.jap、default.htm、default.html、default.asp等
IIS默认的主页文档只有default.htm和default.asp,根据需要,利用“添加”和“删除”按钮,可为站点设置所能解析的主页文档。
启动与停止IIS服务
在Internet信息服务的工具栏中提供有启动与停止服务的功能。单击 可启动IIS服务器;单击 则停止IIS服务器。

ASP的意涵与特性

ASP( Application Service Provider,应用软体租赁服务提供者 )即是指「透过网路以租赁方式提供应用软体服务的业者」,即是指业者以应用软体为主体,透过网路一对多地传递服务,这种以服务为主的交易模式促使企业可藉由租赁的方式,以更符合成本效益的方式拥有软体的使用权,并且亦能因为业者集中式的管理而大幅降低企业维护的成本.
基本上,ASP即具有「软体服务化,服务网路化」,「资讯委外服务与网路结合」与「产品通路化,通路产品化」等三大特性,其甚至可以被视为是ISP(Internet Service Provider)与ITS(Information Technology Service)的结合.
根据流行的观点,ASP有如下五个核心内涵:
a. ASP着重应用为中心,提供对于应用方面的访问和管理。
b. ASP服务可以为用户提供没有在服务器、人员、系统和系统授权等前期资源投入情况下就可以在“定制”的全新应用系统环境进行访问的服务,如ISP,而这样的服务一般按月份ASP收取服务费。
c. ASP采用集中管理的方式—ASP一般都有一个管理中心,所有的客户通过INTERNET来进行远程访问,获得技术支持和咨询服务。
d. 一对多的服务,也就是讲,ASP提供的是标准化的产品包,产品都是最低程度的自定义或者没有实现客户定制化,对于行业用户来讲已经达到实用方便的标准。
e. 按照合同交付,在ASP客户的眼中,ASP是一家根据客户协议内容提供相关服务,保证应用服务系统服务可以得到确实履行的机构。
2. ASP为什么会火?
从大的方面来讲,困扰国内企业生存、发展的核心问题是管理问题。随着互联网络的普及和应用的深入,企业用户可以随时随地直接租用ASP的服务器和软件系统来进行自己的业务管理,这样做的好处在于;第一,企业可以节省大笔用于IT建设方面的资金,大幅度降低企业管理信息化的成本。第二,ASP的用户可以采用各种方式获得应用和服务,软件类服务产品完全可以通过网络在非常短的时间内组成一个完善的、高效的、先进的企业管理系统,迅速获得企业一体化的运营管理方案。
网络经济发展突飞猛进,电子商务一日千里,网络和网站从门户到内容、从注意力到垂直性,目前逐渐转向热衷ASP也是一个主要的原因。
笔者资料中,国内最早对ASP触电的是网友“飞鸟”,在1998年6月自发组织了研究、交流和探讨ASP技术的“飞鸟之家”,现在已经发展成为chinaasp.com,成为国内最早的ASP应用技术服务提供商网站。上海的互易网络有限公司结合国内实际情况,推出了为国内企业服务的ASP平台互易网,向企业提供以电子商务为核心的,企业内、外部网络设施和应用的远程构架和托管服务,创造虚拟企业门户(EP)直接将ASP应用到商业增殖环节中去。
此外,ISP也全面转向ASP的怀抱,成为ISP进一步发展的产物。软件商对于ASP更是情有独钟。业界最新的消息是,中国第三电信“网通”已经制定ASP发展战略,国内最大的管理咨询公司“汉普”将把旗下八个子公司定位在企业内部资源计划管理(ERP)领域的ASP中,北京“联成互动”瞄准客户关系管理(CRM)领域的ASP,北京“数码方舟”定位在网络办公的ASP,HP正在和中国建设银行讨论共建金融领域的ASP。
ASP正在IT经济大潮中显山露水,其发展前景不可估量。
3. ASP的发展阶段和面临的问题
以网络服务商、软件厂商和ISP为主力的各种IT角色,正在根据自己的优势条件出发对ASP领域进行多种方面的尝试。就目前阶段来讲,ASP提供的服务不计其数五花八门,没有标准化和量化的概念,硬件厂商向ASP的“土壤”和势力方向靠拢,软件厂商和ISP则直接参与到ASP业务的第一线。
笔者估计,经过一段时间的试探和发展,ASP将向服务集成方面发展,产品和服务初步的标准化将很快建立起来,接着进入到市场细化和标准制定、ASP产品成熟时期,ASP的稳步增长,最终将成为IT行业商务模式的核心!
目前在ASP发展的道路上,主要面临的问题是观念的转变方面:用租赁代替购买,服务集成代替产品经销商、服务经济代替产品经济等等。具体到实际方面来讲,安全和服务的质量是ASP和客户共同关心的头等大事,要实现ASP提出的“租赁高科技”的口号,ASP任重而道远!

ASP常用内置函数

在ASP中,把带有返回值的这样的一段代码叫做函数。例如通过编写一段代码计算出一个自然数是否是质数,返回给调用程序,由于调用程序需要知道那个自然数是否是质数,所以必须要返回一个值。
1,日期/时间函数
这些函数包括对“年”、“月”、“日”、“时”、“分”、“秒”、“星期”等的显示。
(1)Now函数:根据计算机系统设定的日期和时间,返回当前的日期和时间值。使用方法now();
(2)Date函数:只返回当前计算机系统设定的日期值。使用方法:date();
(3)Time函数:只返回当前计算机系统设定的时间值。使用方法:time();
(4)Year函数:返回一个代表某年的整数。使用方法:year(date),其中date参数是任意的可以代表日期的参数,比如“year(date())”就表示是从“date()”得出的日期中提取其中“年”的整数。
另外,还可以这样应用:“year(#5 20,2006#)”表示提取“2006年5月20日”中“年”的整数值。关于“5 20,2006”,也可使用“5-20-2006”、“5/20/2006”等形式表现,即“某月某日”和“某年”的组合。同时注意使用“#”进行包括以表示日期值。
(5)Month函数:返回1到12之间的整数值,表示一年中某月。使用方法:month(date)。关于参数date的说明和year函数相同。但要注意日期的正确性,比如“#13-31-2006#”,根本就没有“13”月,肯定是错误的了。
(6)Day函数:返回1到31之间的整数值,表示一个月中的某天。使用方法:day(date)。关于参数date的说明和year函数相同。同样要注意日期的正确性,比如“#2-30-2006#”其中对“2”月定义的“30”日这天就是错误的。
(7)Hour函数:返回0到23之间的整数值,表示一天中的某个小时。使用方法:hour (time)。其中参数time是任意的可代表时间的表达式。比如“hour(time())”就表示是从“time()”得出的时间中提取其中“小时” 的整数。同样,参数time还可以这样应用“hour(#11:45:50#)”表示从“11”时“45”分“50”秒中提取当前小时数。当然,定义的时间要符合时间的规范。
(8)Minute函数:返回0到59之间的整数值,表示一小时中的某分钟。使用方法:minute(time)。time参数的说明和hour函数相同。
(9)Second函数:返回0到59之间的整数值,表示一分钟中的某秒。使用方法:second(time)。time参数的说明和hour函数相同。
(10)Weekday函数:返回一个星期中某天的整数。使用方法:weekday(date)。关于参数date的说明和year函数相同。该函数返回值为“1”到“7”,分别代表“星期日”、“星期一”……“星期六”。比如当返回值是“4”时就表示“星期三”。
(11)WeekDayName函数:返回一个星期中具体某天的字符串。相对weekday函数而言即翻译出“星期几”,使用方法:weekdayname(weekday)。参数weekday即星期中具体某天的数值。比如 “weekdayname(weekday(date()))”就表示当前是“星期几”。因为“date()”表示的是当前的时间,而“weekday (date())”就表示的是一星期中具体某天的整数。
当然weekdayname函数最终显示的字符串内容还与当前操作系统语系有关,比如中文操作系统将显示“星期一”这类的中文字符,而英文操作系统则显示为“Mon”(Monday简写)。
此外,在VBScript中还有一些关于时间间隔的计算函数:
(1)DateAdd函数:返回指定时间间隔的日期、时间。可以计算出相隔多少年、或相隔几个月、又或相隔几个小时等的新日期、时间。使用方法:dateadd(interval, number, date)。
其中参数interval表示需要添加的时间间隔单位。其是以字符串的形式表达的,比如“yyyy”表示年,“q”表示季度,“m”表示月份,“d”表示天数,“ww”表示周数,“h”表示小时数,“n”表示分钟数,“s”表示秒数。
而参数number则表示添加的时间间隔数。其是以数值的形式表达的,可以为负值。参数date则要求是日期、时间的正确格式。
比如dateadd(“d”,100,”2006-5-20″)就表示2006年5月20号以后的100天的日期值:2006-8-28。再比如dateadd(“h”,-12,”2005-5-20 10:00:00″)就表示2005年5月20号上午10点前的12小时的日期时间:2005-5-19 22:00:00。
(2)DateDiff函数:返回两个日期时间之间的间隔。可计算出两个日期相隔的年代、小时数等。使用方法:datediff(interval,date1,date2)。
参数interval和dateadd函数中的interval参数内容描述相同,date1和date2参数分别就是相互比较的两个日期时间。另外,当date1的日期时间值大于date2时,将显示为负值。
比如DateDiff(“yyyy”,”1982-7-18″,date)表示某人的出生到现在已经多少年了。又比如DateDiff(“d”,”1982-7-18″,”2062-7-18″)则计算了80年过了多少天:29220。
2,字符串处理函数
在脚本的功能处理中,通常需要对一些字符串进行一些修饰性处理。比如过滤掉字符串中的敏感字眼以符合最终显示的要求;又比如一段较长的字符串,需要提取开头的几个字符时。
(1)Asc函数:返回字符串中第一个字母对应的ANSI字符代码。使用方法:asc(string)。其中string参数表示字符串。
(2)Chr函数:返回指定了ANSI 字符代码对应的字符。使用方法:chr(chrcode)。参数chrcode是相关的标识数字。该函数的功能和asc函数形成对应。
比如:asc(“a”)表示小写字母“a”的ANSI 字符“97”;同样chr(97)表示的就是“小写字母a”。另外chr(chrcode)中参数chrcode值为0到31的数字时,表示不可打印的 ASCII码。比如“chr(10)”表示换行符,“chr(13)”表示回车符等,这常用于输入和显示格式的转换中。
(3)Len函数:返回字符串内字符的数目(字节数)。使用方法:len(string)。比如len(“love”)的值就是4。
(4)LCase函数:返回所有字符串的小写形式。使用方法:lcase(string)。比如lcase(“CNBruce”)返回为“cnbruce”。
(5)UCase函数:返回所有字符串的大写形式。与lcase函数形成对应。同样,ucase(“CNBruce”)返回为“CNBRUCE”。
(6)Trim函数、LTrim函数和RTrim函数:分别返回前导和后续不带空格、前导不带空格或后续不带空格的字符串内容。比如:
trim(“ cnbruce ”)返回为“cnbruce”,前导和后续都不带空格;
ltrim(“ cnbruce ”)返回为“cnbruce ”,前导不带空格;
rtrim(“ cnbruce ”)返回为“ cnbruce”,后续不带空格;
该函数常用于注册信息中,比如确保注册用户名前或后的空格。
(7)Left函数:返回从字符串的左边算起的指定数目的字符。使用方法:left(string,length)。比如left(“brousce”,5)返回为“brous”,即前五位字符。
(8)Right函数:返回从字符串的左边算起的指定数目的字符。使用方法:right(string,length)。比如right(“brousce”,4)返回为“usce”,即后四位字符。
(9)instr函数:返回某字符串在另一字符串中第一次出现的位置。比如现在查找字母“A”在字符串“A110B121C119D1861”中第一次出现的位置,则可以 instr(my_string,”A110B121C119D1861″)
(10)Mid函数:从字符串中返回指定数目的字符。比如现在的“110”则应该是从字符串“A110B121C119D1861”的第2位取得3个单位的值:mid(“A110B121C119D1861”,2,3)
(11)Replace函数:在字符串中查找、替代指定的字符串。replace (strtobesearched,strsearchfor,strreplacewith)其中strtobesearched是字符串, strsearchfor是被查找的子字符串,strreplacewith是用来替代的子字符串。比如 replace(rscon,”<“,”<“) 则表示将rscon中所有“<”的字符替换为“<”
3,类型转换函数
Cbool(string) 转换为布尔值
Cbyte(string) 转换为字节类型的值
Ccur(string) 转换为货币类值
Cdate(string) 转换为日前类型的值
Cdbl(string) 转换为双精度值
Cint(string) 转换为整数值
Clng(string) 转换为长整型的值
Csng(string) 转换为单精度的值
Cstr(var) 转换为字符串值
Str(var) 数值转换为字符串
Val(string) 字符串转换为数值
4,运算函数
Abs(nmb) 返回数子的绝对值
Atn(nmb) 返回一个数的反正切
Cos(nmb) 返回一个角度的余炫值
Exp(nmb) 返回自然指数的次方值
Int(nmb) 返回数字的整形(进位)部份
Fix(nmb) 返回数字的整形(舍去)部份
Formatpercent(表达式) 返回百分比
Hex(nmb) 返回数据的16进制数
Log(nmb) 返回自然对数
Oct(nmb) 返回数字的8进制数
Rnd 返回大于“0”而小于“1”的随机数,但此前需 randomize 声明产生随机种子
Sgn(nmb) 判断一个数字的正负号
Sin(nmb) 返回角度的正铉值
Sqr(nmb) 返回数字的二次方根
Tan(nmb) 返回一个数的正切值
5,其他函数
IsArray(var) 判断一个变量是否是数组
IsDate(var) 判断一个变量是否是日期
IsNull(var) 判断一个变量是否为空
IsNumeric(var) 判断表达式是否包含数值
IsObject(var) 判断一个变量是否是对象
TypeName(var) 返回变量的数据类型
Array(list) 返回数组
Split(liststr) 从一个列表字符串中返回一个一维数组
LBound(arrayP 返回数组的最小索引
Ubound(array) 返回数组的最大索引
CreateObject(class) 创建一个对象
GetObject(pathfilename) 得到文件对象

ASP常用函数介绍

1.函数array() 
功能:创建一个数组变量 
格式:array(list) 
参数:list 为数组变量中的每个数值列,中间用逗号间隔 
例子: 
<% i = array (“1″,”2″,”3”) %> 
结果: i 被赋予为数组
2.函数Cint() 
功能:将一表达式/其它类型的变量转换成整数类型(int) 
格式:Cint(expression) 
参数:expression 是任何有效的表达式/其它类型的变量 
例子: 
<% 
f = ”234″ 
response.write cINT(f) + 2 
%> 
结果: 236 
函数Cint()将字符”234″转换 成整数234.如果表达式为空, 或者无效时,返回值为0; 
3.函数:Creatobject() 
功能:创建及返回一个ActiveX对象. 
格式:Creatobject(obname) 
参数bname 是对象的名称 
例子: 
<% 
Set con = Server.CreateObject(“ADODB.Connection”) 
%> 
结果: 
4.函数Cstr() 
功能:将一表达式/其它类型的变量转换成字符类型(string) 
格式:Cstr(expression) 
参数:expression是任何有效的表达式/其它类型的变量 
例子: 
<% 
s = 3 + 2 
response.write ”The result is: ” & cStr(s) 
%> 
结果:函数Cstr()将整数 5 转换 成字符”5″. 
5.函数Date() 
功能:返回当前系统(server端)的日期 
格式: Date() 
参数:无 
例子<% date () %> 
结果:05/10/00 
5.1 Instr()
函数返回字符或字符串在另一个字符串中第一次出现的位置.
表达式 Instr([start, ] strToBeSearched, strSearchFor [, compare])
允许数据类型: Start为搜索的起始值,strToBeSearched接受搜索的字符串 strSearchFor要搜索的字符.compare比较方式(详细见ASP常数)
实例: <%
strText = “This is a test!!”
pos = Instr(strText, “a”)
response.write pos
%>
返回结果: 9
6.函数Dateadd() 
功能:计算某个指定的时间和 
格式: dateadd(timeinterval,number,date) 
参数:timeinterval是时间单位(月,日..); number是时间间隔值,date是时间始点. 
例子: 
<% 
currentDate = #8/4/99# 
newDate = DateAdd(“m”,3,currentDate) 
response.write newDate 
%> <% 
currentDate = #12:34:45 PM# 
newDate = DateAdd(“h”,3,currentDate) 
response.write newDate 
%> 
结果: 
11/4/99 
3:34:45 PM 
其中 
“m” = ”month”; 
“d” = ”day”; 
如果是currentDate 格式,则, 
“h” = ”hour”; 
“s” = ”second”; 
7.函数Datediff() 
功能:计算某量个指定的时间差 
格式: datediff(timeinterval,date1,date2[,firstdayofweek[,firstdayofyear]]) 
参数: timeinterval 是时间单位; date1,date2是有效的日期表达式,firstdayofweek,firstdayofyear 是任意选项. 
例子: 
<% 
fromDate = #8/4/99# 
toDate = #1/1/2000# 
response.write ”There are ” & _ 
DateDiff(“d”,fromDate,toDate) & _ 
“ days to millenium from 8/4/99.” 
%> 
结果:There are 150 days to millenium from 8/4/99. 
8.函数day() 
功能:返回一个整数值,对应于某月的某日 
格式: day(date) 
参数: date是一个有效的日期表达式; 
例子<% =date(#8/4/99#) %> 
结果:4 
9.函数formatcurrency() 
功能:转换成货币格式 
格式: formatcurrency(expression [,digit[,leadingdigit[,paren[,groupdigit]]]]) 
参数: expression 是有效的数字表达式;digit表示小数点后的位数;leadingdigit,paren,groupdigit是任意选项. 
例子<%=FormatCurrency(34.3456)%> 
结果34.35 
10.函数Formatdatetime() 
功能:格式化日期表达式/变量 
格式: formatdatetime(date[,nameformat]) 
参数: date为有效的日期表达式/变量;nameformat是指定的日期格式常量名称. 
例子<% =formatdatetime(“08/04/99”,vblongdate) %> 
结果:Wednesday,August 04,1999 
说明: 
描述
返回表达式,此表达式已被格式化为日期或时间。 
语法
FormatDateTime(Date[, NamedFormat])
FormatDateTime 函数的语法有以下参数:
参数 描述 
Date 必选项。要被格式化的日期表达式。 
NamedFormat 可选项。指示所使用的日期/时间格式的数值,如果省略,则使用 vbGeneralDate。 
设置
NamedFormat 参数可以有以下值:
常数 值 描述 
vbGeneralDate 0 显示日期和/或时间。如果有日期部分,则将该部分显示为短日期格式。如果有时间部分,则将该部分显示为长时间格式。如果都存在,则显示所有部分。 
vbLongDate 1 使用计算机区域设置中指定的长日期格式显示日期。 
vbShortDate 2 使用计算机区域设置中指定的短日期格式显示日期。 
vbLongTime 3 使用计算机区域设置中指定的时间格式显示时间。 
vbShortTime 4 使用 24 小时格式 (hh:mm) 显示时间。 
说明
下面例子利用 FormatDateTime 函数把表达式格式化为长日期型并且把它赋给 MyDateTime: 
Function GetCurrentDate 
“FormatDateTime 把日期型格式化为长日期型。
GetCurrentDate = FormatDateTime(Date, 1) 
End Function
11.函数Isnumeric() 
功能:返回一个布尔值,判断变量是否为数字变量,或者是可以转换成数字的其它变量. 
格式:isnumeric(expression) 
参数:expression 是任意的变量. 
例子: 
<% 
i=”234″ 
response.write isnumeric(i) 
%> 
结果: true. 
12.函数Isobject() 
功能:返回一个布尔值,判断变量是否为对象的变量, 
格式: isobject(expression) 
参数: expression 是任意的变量. 
例子: 
<% 
set con =server.creatobject(“adodb.connection”) 
response.write isobject(con) 
%> 
结果: true 
13.函数:Lbound() 
功能:返回一个数组的下界. 
格式:Lbound(arrayname[,dimension]) 
参数:arrayname 是数组变量,dimension 是任意项 
例子: 
<% 
i = array(“1″,”2″,”3”) 
response.write lbound(i) 
%> 
结果:0
14.函数Lcase() 
功能:将一字符类型变量的字符全部变换小写字符. 
格式:Lcase(string) 
参数:string是字符串变量 
例子: 
<% 
str=”THIS is Lcase!” 
response.write Lcase(str) 
%> 
结果:this is lcase! 
15.函数left() 
功能:截取一个字符串的前部分; 
格式:left(string,length) 
参数:string字符串,length截取的长度. 
例子: <% =left(“this is a test!”,6) %> 
结果:this i 
16.函数len() 
功能:返回字符串长度或者变量的字节长度 
格式:len(string *varname) 
参数:string字符串;varname任意的变量名称 
例子: 
<% 
strtest=”this is a test!” 
response.write left(strtest) 
%> 
结果:15 
17.函数ltrim()
功能:去掉字符串前的空格.
格式:ltrim(string) 
参数:string 字符串. 
例子: <% =ltrim (“ this is a test!”) 
结果:this is a test! 
18.函数Mid()
功能:从字符串中截取字符串. 
格式:mid(string,start [,length]) 
参数:string字符串,start截取的起点,length要截取的长度.
例子: 
<% 
strtest=”this is a test, Today is Monday!” 
response.write mid(strtest,17,5) 
%> 
结果:Today 
19.函数minute() 
功能:返回一数值, 表示分钟 
格式:minute(time) 
参数: time是时间变量 
例子lt;% =minute(#12:23:34#) %> 
结果:23 
20.函数month() 
功能:返回一数值, 表示月份 
格式:month(time) 
参数:time是日期变量 
例子<% =month(#08/09/99) %> 
结果:9 
21.函数monthname() 
功能:返回月份的字符串(名称). 
格式:Monthname(date [,abb]) 
参数: date是日期变量,abb=true时 则月份的缩写, 
例子: 
<% =monthname(#4/5/99#) %> 
结果:April 
22.函数Now() 
功能:返回系统的当前时间和日期. 
格式:now() 
参数:无 
例子: 
<% =now() %> 
结果: 05/10/00 8:45:32 pm 
23.函数:replace() 
功能:在字符串中查找,替代指定的字符串. 
格式:replace(strtobesearched,strsearchfor,strreplacewith [,start[,count[,compare]]]) 
参数:strtobesearched是字符串; strsearchfor是被查找的子字符串;strreplacewith 是用来替代的子字符串.start,count,compare 是任意选项. 
例子: 
<% 
strtest=”this is an apple.” 
response.write replace(strtest,”apple”,”orange”) 
%> 
结果:this is an orange. 
24.函数right() 
功能:截取一个字符串的后部分 
格式:right(string,length) 
参数:string字符串,length截取的长度. 
例子: 
<% 
strtest=”this is a test!” 
response.write right(strtest,3) 
%> 
结果:st! 
25.函数rnd() 
功能:返回一个随机数值 
格式:rnd[(number)] 
参数:number是任意数值. 
例子: 
<% 
randomize() 
response.write rnd() 
%> 
结果:0/1数值之一,无randomize(), 则不能产生随机数. 
26.函数round() 
功能:完整数值 
格式:round(expression[,numright]) 
参数:expression数字表达式;numright任意选项. 
例子: 
<% 
i=12.33654 
response.write round(i) 
%> 
结果: 12 
27.函数rtrim() 
功能:去掉字符串后的空格. 
格式:rtrim(string) 
参数:string 是字符串 
例子: 
<% 
response.write rtrim(“this is a test! ”) 
%> 
结果:this is a test! 
28.函数second() 
功能:返回一个整数值. 
格式:second(time) 
参数:time是一个有效的时间表达式; 
例子lt;% =second(# 12:28:30#) %> 
结果:30 
29.函数strReverse() 
功能:返回与原字符串排列逆向的字符串. 
格式:strreverse(string) 
参数:string是字符串 
例子<% =strreverse(“this is a test!”) 
结果:!tset a si siht 
30.函数time() 
功能:返回当前系统的时间值. 
格式:time() 
参数:无 
结果:9:58:28 Am 
31.函数trim() 
功能:删去字符串前,后的空格. 
格式:trim(string) 
参数:string 字符串. 
例子: 
<% 
strtest=” this is a test! ” 
response.write trim(strtest) 
%> 
结果:this is a test! 
32.函数UBound() 
功能:返回一个数组的上界. 
格式:Ubound(expression [,dimension]) 
参数:expression 是数组表达式/数组变量,dimension 是任意项 
例子: 
<% 
i = array(“1″,”2″,”3”) 
response.write ubound(i) 
%> 
结果: 2 
33.函数:UCase() 
功能:将一字符类型变量的字符全部变换成大写字符. 
格式:Ucase(string) 
参数:string是字符串变量 
例子: 
<% 
str=”THIS is Lcase!” 
response.write Lcase(str) 
%> 
结果:THIS IS LCASE! 
34.函数Vartype() 
功能:返回变量的常量代码(整数) 
格式:Vartype(varname) 
参数:varname是任何类型的变量名称. 
例子: 
<% 
i=5 
response.write vartype(i) 
%> 
结果:2 (2表示整数,须要参考ASP常量代码.) 
35.函数Weekday() 
功能:返回一个整数,对应一周中的第几天. 
格式:Weekday(date [,firstofweek]) 
参数: date为日期变量,firstofweek为任选项. 
例子: 
<% 
d= # 5/9/00 # 
response.write weekday(d) %> 
结果:3(3 表示是星期二) 
36.函数weekdayname() 
功能:返回字符串,对应星期几. 
格式:weekdayname(weekday[,abb[,firstdayofweek]]) 
参数:weekday为日期变量,abb,firstdayofweek为任选项. 
例子: 
<% 
d = #8/4/99# 
response.write weekdayname(d) 
%> 
结果: Wednesday 
37.函数year() 
功能:返回日期表达式所在的年份. 
格式:year(date) 
参数: date是有效的日期表达式 
例子: 
<% =year(#8/9/99#) %> 
结果:1999 
38.函数Mod()功能:取余数.
例子:3 Mod 2 
结果:1
Asp的简介:
1.ASP全称:Microsoft Active Server Pages , 是一套微软开发的服务器端脚本环境.
2.ASP 内含于 IIS 3.0 和 4.0 之间 , 通过 ASP 我们可以结合 HTML 网页、 ASP 指令和 ActiveX 元件建立动态、交互且高效的WEB服务器应用程序。
Asp(Active Server Pages)优点:
1.ASP具备管理不同语言脚本程序的能力;
具备管理不同语言脚本程序的能力,能够自动调用合适的脚本引擎以解释脚本代码和执行内置函数。
2. ASP在国内具有很强的影响力
ASP可以根据不同的用户,在不同的时间向用户显示不同的内容,也因此在国内掀起了一股学习 ASP的热潮。自从ASP(Active Server Pages)问世以来,因其可以创建健壮易于维护、与平台无关的应用系统,ASP技术受到了越来越多网络程序员的喜爱,使用ASP从事WEB开发的人也越来越多。但ASP只是一种非编译型的、在服务端运行的脚本语言,采用明文(plain text)方式来编写,即使
3. ASP的脚本程序运行方便
有了 ASP 你就不必担心客户的浏览器是否能运行你所编写的代码,因为所有的程序都将在服务器端执行,包括所有嵌在普通 HTML 中的脚本程序。当程序执行完毕后,服务器仅将执行的结果返回给客户浏览器,这样也就减轻了客户端浏览器的负担,大大提高了交互的速度
Asp(Active Server Pages) 所独具的一些特征:
1. Asp的语言容易编写;
无须 compile 编译,容易编写,可在服务器端直接执行
2. Asp的脚本语言运用简单快速性;
使用 VBScript 、 JScript 等简单易懂的脚本语言,结合 HTML 代码,即可快速地完成网站的应用程序。
3.使用文本编辑器的普通性
使用普通的文本编辑器,如 Windows 的记事本,即可进行编辑设计。
4.Asp所设计网页内容的可浏览性
与浏览器无关 (Browser Independence), 用户端只要使用可执行 HTML 码的浏览器,即可浏览 Active Server Pages 所设计的网页内容。 Active Server Pages 所使用的脚本语言 (VBScript 、 Jscript) 均在 WEB 服务器端执行,用户端的浏览器不需要能够执行这些脚本语言。
5. Asp的脚本语言的可容性
Active Server Pages 能与任何 ActiveX scripting 语言相容。除了可使用 VBScript 或 JScript 语言来设计外,还通过 plug-in 的方式,使用由第三方所提供的其他脚本语言,譬如 REXX 、 Perl 、 Tcl 等。脚本引擎是处理脚本程序的 COM(Component Object Model) 物件。
6. Asp的原程序的安全性;
Active Server Pages 的源程序,不会被传到客户浏览器,因而可以避免所写的源程序被他人剽窃,也提高了程序的安全性。
Asp发展—–Asp.net
1..执行效率的大幅提高
ASP.net是把基于通用语言的程序在服务器上运行。不像以前的ASP即时解释程序,而是将程序在服务器端首次运行时进行编译,这样的执行效果,当然比一条一条的解释强很多。
2.世界级的工具支持
ASP.net构架是可以用Microsoft(R)公司最新的产品 Visual Studio.net开发环境进行开发,WYSIWYG(What You See Is What You Get所见即为所得)的编辑。这些仅是ASP.net强大化软件支持的一小部分。
3..强大性和适应性
因为ASP.net是基于通用语言的编译运行的程序,所以它的强大性和适应性,可以使它运行在 Web应用软件开发者的几乎全部的平台上。通用语言的基本库,消息机制,数据接口的处理都能无缝的整合到ASP.net的Web应用中。ASP.net同时也是language-independent语言独立化的,所以,你可以选择一种最适合你的语言来编写你的程序,或者把你的程序用很多种语言来写,现在已经支持的有C#(C++和JAVa的结合体),VB,Jscript ,等。将来,这样的多种程序语言协同工作的能力保护您现在的基于COM+开发的程序,能够完整的移植向ASP.net。
4.简单性和易学性
ASP.net是运行一些很平常的任务如表单的提交,使客户端的身份验证,分布系统和网站配置变得非常简单。例如ASP.net页面构架允许你建立你自己的用户分界面,使其不同于常见的VB-Like界面。另外,通用语言简化开发使把代码结合成软件简单的就像装配电脑。
5.多处理器环境的可靠性
ASP.net已经被刻意设计成为一种可以用于多处理器的开发工具,它在多处理器的环境下用特殊的无缝连接技术,将很大的提高运行速度。即使你现在的ASP.net应用软件是为一个处理器开发的,将来多处理器运行时不需要任何改变都能提高他们的效能。
6.自定义性,和可扩展性
ASP.net设计时考虑了让网站开发人员可以在自己的代码中自己定义”plug-in”的模块。这与原来的包含关系不同,ASP.net可以加入自己定义的任何组件。网站程序的开发从来没有这么简单过。
7.安全性
基于Windows认证技术和每应用程序配置,你可以确性你的原程序时绝对安全的。(但是Asp的经验告诉我们,不能这么自信,M$老是会出Bug的)
8.高效可管理性
ASP.net使用一种字符基础的,分级的配置系统,使你服务器环境和应用程序的设置更加简单。因为配置信息都保存在简单文本中,新的设置有可能都不需要启动本地的管理员工具就可以实现。这种被称为”Zero Local Administration”的哲学观念使Asp.net的基于应用的开发更加具体,和快捷。一个ASP.net的应用程序在一台服务器系统的安装只需要简单的拷贝必须得文件,不需要系统的重新启动,一切就是这么简单。
JSP
JSP技术是用JAVA语言作为脚本语言的,JSP网页为整个服务器端的JAVA库单元提供了一个接口来服务于HTTP的应用程序。
JSP(JAVaServer Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。在传统的网页HTML文件(*.htm,*.html)中加入JAVa程序片段(Scriptlet)和JSP标记(tag),就构成了JSP网页 (*.jsp)。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序片段,然后将执行结果以HTML格式返回给客户。程序片段可以操作数据库、重新定向网页以及发送 email 等等,这就是建立动态网站所需要的功能。所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,对客户浏览器的要求最低,可以实现无 Plugin,无ActiveX,无JAVa Applet,甚至无Frame。
JSP网页主要提供了一种建立servlet的高水平方法,它还带来了其他的优点。即使你已经为web应用程序编写了servlet,使用JSP仍然有很多优势:
JSP网页可以非常容易的与静态模板结合,包括HTML 或XML 片段,以及生成动态内容的代码。
JSP网页可以在被请求的时候动态的编译成servlet,所以网页的设计人员可以非常容易的对表述代码进行更新。如果需要的话,JSP网页还可以进行预编译。
为了调用JAVaBean组件,JSP标签可以完全管理这些组件,避免网页设计人员复杂化应用程序。
开发人员可以提供定制化的JSP标签库。
网页设计人员能够改变和编辑网页的固定模板部分而不影响应用程序。同样,开发人员也无须一个个编辑页面而只须对组件进行合理的改变。
通常,JSP允许开发人员向许多网页设计人员分发功能性应用程序。这些设计人员也不必知道JAVa编程语言或任何servlet代码,所以他们能够集中精力去编写HTML代码,而编程人员就可以集中精力去建立对象和应用程序。
ASP与JSP的比较
一、结构
JSP和ASP在结构上类似,都是以““作为标计符,不同的是在标计符之间的代码ASP为 JAVaScript或VBScript脚本,而JSP为JAVA代码。JSP将网页的表现形式和服务器端的代码逻辑分开。作为服务器进程的JSP页面,首先被转换成servlet(一种服务器端运行的jAVa程序)。Servlet支持HTTP协议的请求和响应。当JSP被转换成纯JAVA代码。多个用户同时请求一个jsp页面时,应用实例化线程来响应请求。这些线程由WEB服务器进程来管理,和ASP的线程管理器功能类似。同CGI为每个请求创建一个进程的模式比较,这种方式效率高的多。
二、性能和平台无关性
与C++、VB等语言比较,JAVA被看作是个效率不太高的语言,但它以牺牲效率换来了平台无关性使JAVA可以在大多数操作系统上运行而不需要重新编译–许多人愿意为此而付出代价。JAVA的编译代码是一种字节代码,在运行时由操作系统上的一个JAVa VirtualMachine(JVM)虚拟机解释。字节代码可以在所有平台上迁移,而不需要任何改动。交叉平台编程倾向于采用所有操作系统的“最小公分母“,尤其是使用图形化界面时(servlets不需要任何图形界面)。Servlets比传统的jAVa程序(applets, jAVaapp)要快,因为它们在服务器端运行,不需要加载沉重的GUI(HTML的GUI是非常少的)。另外,servlets的字节代码只有在客户请求时才执行,所以尽管当首次调用servlets时会有几秒钟的加载时间,但后续的请求相应非常迅速,因为服务器已经缓存了运行的servlets。当前的jsp服务器,都带有jAVa 即时编译器(JIT),因此,JSP的执行比每次都要解释执行的ASP代码要快,尤其是在代码中存在循环操作时,JSP的速度要快1到2个数量级。
三、ServerSideIncludes
在服务器端引用上ASP和JSP有着相同之处。ASP和JSP都可以支持此功能的服务器 (IIS,APACHE)上实现服务器端包含虚文件。但JSP是将动态页面的结果包含进来,而不是包含文件的代码本身。当你包含的文件在另一个服务器上时,不包含任何代码和对象是一个非常有效的功能。
四、JAVA组件:JAVaBeans
JAVaBeans是一些完成预定义功能的封装的对象数据。JAVaBeans和JSP接合与COM和ASP相比如下:
COM对象常用来封装商业逻辑和为ASP页面完成高强度计算。重用的组件使得页面简单快速,因为组件由编译语言(C++,VB)构成,而不是解释型的scripting语言(VBScript, JScript)。
JAVaBeans只能用jAVa语言开发,com可以由符合标准对象模型的任何语言开发(包括Visual J++)。另一方面,JAVaBeans更容易开发,因为一旦掌握了jAVa,了解JAVaBeans的结构非常容易。由于com的复杂性,需要大量的学习和培训才能掌握–即使你具有c++和vb的基础也需要额外的努力。Com 组件需要在服务器上注册,如果你修改了一个现有的组件,服务器需要重新启动才能使用它。JAVaBeans不需要重新注册,如果开发者不需要得到对服务器的完全访问权限,这是其一个巨大的优点。
可以创建满足商业逻辑的完整的JAVaBeans库,让非编程人员使用库来开发动态网站。
Beans可以在服务器端管理数据库连接。
JAVaBeans符合结构化对象模型:每个Bean由一个不带参数的构造函数,控制它的 servlet可以使用内省(introspection)来设置其属性。要设置Bean的内置属性,必须使用带有属性名的setProperty标签。如果一个属性可以设置,Bean需要有一个setXxxx方法,Xxxx用实际的属性名来代替。
五、JSP和数据库
ASP使用ODBC通过ADO连接数据库,而JAVA通过一个叫JDBC的技术联接数据库。目标数据库需要一个JDBC驱动程序–一个数据库与JAVA的借口,使得JAVA可以用标准的方式访问数据库。JDBC不使用服务器端的数据源。只要有 JDBC驱动程序,JAVA就可以访问数据库了。如果一个特定的数据库没有JDBC驱动程序,而只有ODBC驱动程序,JAVA提供一个JDBC- ODBC桥来将JDBC调用转化为ODBC调用。所有的JAVA编译器都带有一个免费的JDBC-ODBC桥。理论上,桥可以访问任何常见的数据库产品。
六、企业产品的多样性
JAVA2平台即企业版(J2EE)是适用于多企业应用程序的JAVA结构,作为J2EE的部分,JSP网页可访问所有J2EE的组件,包括JAVabeans,企业级JAVabeans及JAVA Servlets。JSP网页都能完全编译成为Servlets,所以它们都享有灵活性的特点和为服务器端JAVA应用程序。J2EE平台内容不仅包括管理复杂的企业应用程序而且包括事务管理技术和Pooling资源管理技术。
JSP网页可以访问标准的J2EE服务,包括:
? JAVA名称和目录界面API
? JDBCTM API(与关联的数据库通讯)
? JAVaMailTM(支持基于JAVA邮件和消息应用程序的类)
? JAVATM 消息服务
通过J2EE,JSP网页能够用许多方式同企业系统交互访问。J2EE支持两种CORBA规范的技术:JAVA IDL和RMI-IIOP。在企业级JAVABEANS技术支持下,JSP网页通过运用高级的,对象映射的方式访问数据库。
最终,因为JSP技术是基于JAVA的开放性过程的产品,因此它能够广泛支持不同提供商提供的工具,WEB服务器和应用程序的服务,这样能够使用户选择最佳的开发方法,选择最适应他们的应用程序开发的工具包,同时,有效地保护用户在代码和人员培训上的投资。
结论:尽管JAVaSever Pages 技术和微软的Active Sever Pages在许多方面都有相似的,但仍然存在很多不同之处,其中最本质上的区别在于:两者是来源于不同的技术规范组织,其实现的基础:WEB服务器平台要求不相同。
python
一. Python的历史
1. Python于1989年诞生于阿姆斯特丹。
2. Python的中文名叫大蟒蛇。
3. Python的创始人Guido van Rossum。
Python是ABC语言的继承,它克服了ABC的非开放这一错误,能够与c,c++和jAVa很好的结合。
Python最初是在MAC机上实现的。
Python是大蟒蛇的意思,因为它的缔造者Guido van Rossum是一个Monty马戏团的爱好者。
二. Python 的特点
a) 面向对象的,具有动态语义的程序设计语言
Python是一个真正的面向对象语言。它甚至支持异常的处理。这使得程序的编写更加清晰,而不需要许多的错误检查了。
b) 快速开发
c) 具有优秀的可读性
Guido认为Python的语法是非常优美的。其中一点就是,块语句的表示不是C语言常用的{}对,或其它符号对,而是采用缩近表示法!首先,使用缩近表示法减少了视觉上的混乱。其次,它减少了程序员的自由度,更有利于统一风格,使得阅读别人的程序更容易。
d) 模块和包的概念
对于JAVa的支持, JPython是用JAVa写的Python,它完全支持JAVa,在这个环境下使用Python可以随意地使用JAVa的类库。
e) 各种主流平台,并具有很好的跨平台性
f) 容易地包装C/C++的代码供Python使用
可以用C、C++或JAVa为Python编写新的新言模块,如函数。或者与Python直接编译在一起,或者采用动态库装入方式实现。
三. Python企业运用的优缺点
优点
1. 免费(像perl一样,python也是开放源代码的软件)。
2. 稳定。
3. 良好的支持对象,模块和其他可重用机制。
4. 采用c/c++语言的集成方便性和扩展性。
缺点
1. 相比其他语言,比如jAVa的开发人员少的多。
2. 缺乏真正的多处理支持。
3. 缺乏商业支持。
4. 软件性能。
四. Python的应用
1. 软件类
a. 开发快,直接用记事本或Kwrite编写代码保存,运行就可以了。
b. 易维护,python代码简洁。
c. 节省开发资金,python的代码是公开的。
2. 网络类
Python能够实现从服务器软件到服务器脚本的所有功能,支持一些大规模数据库。
3. 教育类
Python 是为教育而开发的语言
Ruby
Ruby 的诞生:
Ruby 诞生于1993 年的 2 月 24号
Ruby 是一种珍贵宝石的名字(红宝石)
Ruby 创始人——Yukihiro Matsumoto(网上被称为 Matz)
Ruby 是一种珍贵宝石的名字(红宝石)。觉得这个语言项目以一个宝石的名字来命名(比如 Perl语言就是用的珍珠pearl的简称),后来想出了“Ruby”,它最终成为了这个语言的官方名字。
Ruby的特点:
解释性脚本语言:
有直接呼叫系统调用的能力
强大的字符串操作和正则表达式
开发中快速回馈
迅速和简便:
无需变量声明
变量无类型
语法简单而坚实
自动内存管理
面向对象编程:
任何事物都是一个对象
类,继承,方法,等等
单态方法
模块糅合
迭代器和闭包(closures)
总之:ruby吸取了所有语言精华
perl的正则表达式
python的语言的简单性可读性、最容易的扩展能力,强大的可移植性。
php的嵌入功能和多种客户端
smalltalk的纯面向对象语法和单继承
lisp的无穷嵌套的语法,也就是函数式的语法。
用“块”来实现更快捷的数据结构的处理。不知道是不是scheme的宏功能。用块能更清楚的实现python的表处理功能。
jAVa和ada的线程编程
jAVa的安全编程
不得不承认ruby确实是个精彩的语言,它完全学会了lisp的所有编程都是函数的思想, smalltalk的所有东西都是对象的思想,perl的一个目的多种手段的方法,python的简单化的“最少惊喜”的原则,jAVa的多线程和安全控制的功能,tcl的容易扩展的功能,
php的嵌入功能和强大客户端的功能,最方便的shell命令的调用。
Ruby的应用:
如果不在乎商业机密,应用目标也不是太苛刻的话,编写大型跨平台程序可以选择ruby脚本语言,它具有全面的库的支持,有和c语言方便的交互能力。他们和jAVa相比,编程效率更高。同时因为没有编译,程序更方便修改。因为他们的库都是用c实现的,也比jAVa有更高性能。同时,他是开源的,方便定制。也是不满意jAVa的不可控制的越来越庞大的库的又一个选择。
作为简单应用的工具语言,由于Ruby的跨平台移植性好,应用也比较广泛。Ruby也是对python不满意的另一个选择,它提供了很多额外的功能。
作为程序的嵌入语言,原来有lisp、basic、jAVa和python现在可以选择Ruby。
PERL
一起源
看看Perl的创造者
Perl(Practical Extraction and Report Language),是一种脚本语言。 最初的设计者为拉里?沃尔(Larry Wall),它於1987年12月18日发表。Perl借取了C、sed、awk、shell scripting以及很多其他程式语言的特性。Perl原名pearl。在这个语言官方发表前,拉里?沃尔发现已经有个程式语言“pearl”,便改变将这个程式语言的名字改成Perl。无大写字母(perl)时就指它的直译器。将Perl写成”PERL”是不适当的,所以它并非一个缩写字。
PERL从面世以来的1.0版本到现今的5.6版本,一直都有编译程序.主要因为国内的中文资料很少,大多数人不愿意去看或者不懂得英文资料,所造成不知道其编译方法.即使是很多PERL界高手也同样有此类问题. PERL编译方法五花八门,各种编译方法都有其重要的意义和弱点.另一方面PERL编译方法不能流行的原因是,本身PERL就是一个免费的东西,人们不希望PERL成为编译的商品,但是在国内也就因此而拖累了PERL的发展步伐. PERL编译有些局限性,虽然可以完成所有任务,但想要达成良好的编译效果,就需要高超的编程技术和相关经验,重要的是对OOP(面向对象的确程序设计) 的了解,将会使得你的PERL程序更加易于编译,运行速度更快,兼容性更广等特性.
PERL在可嵌入式技术方面:它的优势在于比其它嵌入语言有着无法比拟的兼容性, PERL不但拥有PHP的可嵌入HTML技术,也同样支持用PRELSCRIPT写ASP的.但是如果你希望你的程序可以编译执行那么可嵌入式方法显然是不可能的.把eprel mod_prel等可嵌入式PERL HTML页,或者把HTML置入程序之中,这两种方法都有其好处以及坏处.
asp的其他解释
1.Aspirin,阿斯匹林
2.Aspartic acid,天门冬氨酸

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

标签云