absolute legendspage和if语句能写在一对百分号中吗?分先后顺序吗?为什么

1.& 参数中直接加入%%
  param.setUsername("%CD%");&&&&& param.setPassword("%11%");
id="selectPersons" resultType="person" parameterType="person"&
select id,sex,age,username,password from person where true
&if test="username!=null"& AND username LIKE #{username}&/if&
&if test="password!=null"&AND password LIKE #{password}&/if&
2.& bind标签
&select id="selectPersons" resultType="person" parameterType="person"&
&bind name="pattern" value="'%' + _parameter.username + '%'" /&
select id,sex,age,username,password
from person
where username LIKE #{pattern}
where username LIKE concat(concat('%',#{username}),'%')
阅读(...) 评论()BAT语句:if语句和for语句
我的图书馆
BAT语句:if语句和for语句
BAT语句结构
  类似于C语言,批处理也有它的语句结构。批处理的语句结构主要有选择结构(if语句)、循环结构(for语句)等。&
if语句(选择结构)
  if语句实现条件判断,包括字符串比较、存在判断、定义判断等。通过条件判断,if语句即可以实现选择功能。&
  1、字符串比较&
  if语句仅能够对两个字符(串)是否相同、先后顺序进行判断等。其命令格式为:&
  IF [not] string1 compare-op string2 command1 [else command2]&
  其中,比较操作符compare-op有以下几类:&
  == -&等于&
  EQU -&等于&
  NEQ -&不等于&
  LSS -&小于&
  LEQ -&小于或等于&
  GTR -&大于&
  GEQ -&大于或等于&
  选择开关/i则不区分字符串大小写;选择not项,则对判断结果进行逻辑非。&
  字符串比较示例:&
  ===============================================&
  @echo off&
  set str1=abcd1233&
  set str2=ABCD1234&
  if %str1%==%str2% (echo&字符串相同!) else (echo&字符串不相同!)&
  if /i %str1% LSS %str2% (echo str1^&str2) else (echo str1^&=str2)&
  echo.&
  set /p choice=是否显示当前时间?(y/n)&
  if /i not %choice% EQU n echo&当前时间是:%date% %time%&
  pause&nul&
  ===============================================&
  对于最后一个if判断,当我们输入n或N时的效果是一样的,都不会显示时间。如果我们取消开关/i,则输入N时,依旧会显示时间。&
  另外请注意一下几个细节:1-echo str1^&str2和echo str1^&=str2;2-echo.。&
  2、存在判断&
  存在判断的功能是判断文件或文件夹是否存在。其命令格式为:&
  IF [NOT] EXIST filename command1 [else command2]&
  ===============================================&
  @echo off&
  if exist %0 echo&文件%0是存在的!&
  if not exist %~df0 (&
  echo&文件夹%~df0不存在!&
  ) else echo&文件夹%~df0存在!&
  pause&nul&
  ===============================================&
  这里注意几个地方:&
  1-存在判断既可以判断文件也可以判断文件夹;&
  2-%0即代表该批处理的全称(包括驱动器盘符、路径、文件名和扩展类型);&
  3-%~df0是对%0的修正,只保留了其驱动器盘符和路径,详情请参考for /?,属高级批处理范畴;&
  4-注意if语句的多行书写,多行书写要求command1的左括号必须和if在同一行、else必须和command1的右括号同行、command2的左括号必须与else同行、command1和command2都可以有任意多行,即command可以是命令集。&
  3、定义判断&
  定义判断的功能是判断变量是否存在,即是否已被定义。其命令格式为:&
  IF [not] DEFINED variable command1 [else command2]&
  存在判断举例:&
  ===============================================&
  @echo off&
  set var=111&
  if defined var (echo var=%var%) else echo var尚未定义!&
  set var=&
  if defined var (echo var=%var%) else echo var尚未定义!&
  pause&nul&
  ===============================================&
  对比可知,"set var="可以取消变量,收回变量所占据的内存空间。&
for语句(循环结构)
  for语句可以实现类似于C语言里面的循环结构,当然for语句的功能要更强大一点,通过不同的开关可以实现更多的功能。for语句有多个开关,不同开关将会实现不同的功能。&
  1、无开关&
  无开关的for语句能够对设定的范围内进行循环,是最基本的for循环语句。其命令格式为:&
  FOR %%variable IN (set) DO command&
  其中,%%variable是批处理程序里面的书写格式,在DOS中书写为%variable,即只有一个百分号(%);set就是需要我们设定的循环范围,类似于C语言里面的循环变量;do后面的command就是循环所执行的命令,即循环体。&
  无开关for语句举例:&
  ===============================================&
  @echo off&
  for %%i in (a,"b c",d) do echo %%i&
  pause&nul&
  ===============================================&
  2、开关/L&
   含开关/L的for语句,可以根据set里面的设置进行循环,从而实现对循环次数的直接控制。其命令格式为:&
  FOR /L %%variable IN (start,step,end) DO command&
  其中,start为开始计数的初始值,step为每次递增的值,end为结束值。当end小于start时,step需要设置为负数。&
  含开关/L的for语句举例(创建5个文件夹):&
  ===============================================&
  @echo off&
  for /l %%i in (1,2,10) do md %%i&
  pause&
  ===============================================&
  上例将新建5个文件夹,文件夹名称依次为1、3、5、7、9。可以发现,%%i的结束值并非end的值10,而是不大于end的一个数。&
  3、开关/F&
  含开关/F的for语句具有最强大的功能,它能够对字符串进行操作,也能够对命令的返回值进行操作,还可以访问硬盘上的ASCII码文件,比如txt文档等。其命令格式为:&
  FOR /F ["options"] %%variable IN (set) DO command&
  其中,set为("string"、'command'、file-set)中的一个;options是(eol=c、skip=n、delims=xxx、tokens=x,y,m-n、usebackq)中的一个或多个的组合。各选项的意义参见for /f。一般情况下,使用较多的是skip、tokens、delims三个选项。&
  含开关/F的for语句举例:&
  ===============================================&
  @echo off&
  echo **No Options:&
  for /f %%a in ("1,2,10") do echo a=%%a&
  echo **Options tokens ^& delims:&
  for /f "tokens=1-3 delims=," %%a in ("1,2,10") do echo a=%%a b=%%b c=%%c&
  pause&
  ===============================================&
  @echo off&
  echo&本文件夹里面的文件有:&
  for /f "skip=5 tokens=3* delims= " %%a in ('dir') do (&
  if not "%%a"=="&DIR&" if not "%%b"=="字节" if not "%%b"=="可用字节" echo %%b&
  pause&
  ===============================================&
  @echo off&
  echo&本文件夹里面的文件有:&
  dir&c:\file.txt&
  for /f "skip=5 tokens=3* delims= " %%a in (c:\file.txt) do (&
  if not "%%a"=="&DIR&" if not "%%b"=="字节" if not "%%b"=="可用字节" echo %%b&
  del c:\file.txt&
  pause&
  ===============================================&
  对于后面的两个例子,其中options里面的delims=&是可以删除的,因为只要添加了/F开关系统就将delims的值默认为空格。&
  符号字符串中的最后一个字符星号,&
  那么额外的变量将在最后一个符号解析之后&
  分配并接受行的保留文本。本例中也可以改为4,不过文件名中有空格的文件,只能显示空格以前部分&
  同时我们也看到了,for语句的do后面的command也是可以分行的,只需要保证command的左括号和do在同一行就可以了。&
  4、开关/D或/R&
  含开关/D或/R的for语句是与目录或文件有关的命令,一般情况下很少使用。含开关/R的命令有时候被用于通过遍历文件夹来查找某一个文件或文件夹,故而列举此例。&
  含开关/R的for语句举例(文件夹遍历):&
  ===============================================&
  @echo off&
  setlocal enabledelayedexpansion&
  FOR /R d: %%i IN (.) DO (&
  set dd=%%i&
  set "dd=!dd:~0,-1!"&
  echo !dd!&
  pause&
  ===============================================&
  上例即可以罗列出D盘下的所有文件夹,其速度要比命令"tree d:"慢多了,不过其返回结果的实用性则远远超过了tree命令。&
  一般情况下我们不推荐通过遍历文件夹来查找文件,特别是在查找某些程序(比如QQ.exe)的位置时。推荐通过reg命令查找注册表来查找QQ的路径,以保证查找效率。&
  上例中也出现了几个新面孔,如setlocal、感叹号等。其中,感叹号其实就是变量百分号(%)的强化版。之所以要用!而不用%,是因为在for循环中,当一个变量被多次赋值时,%dd%所获取的仅仅是dd第一次被赋予的值;要想刷新dd的值,就必须首先通过命令"setlocal enabledelayedexpansion"来开启延迟变量开关,然后用!dd!来获取dd的值。&
  for语句是批处理里面功能最强大、使用最普遍却又最难掌握的一套命令,这也是批处理菜鸟和批处理高手最明显的一个分水岭,一旦掌握了这套命令,那么你就离批处理达人不远了!
保存最近五次内数据,将以下内容保存为BAT文件
echo 在e:\数据库日备份目录下创建tmp,a,b,c,d,e目录
@echo offecho 开始备份.....set filename=e:\数据库日备份\tmp\%date:~0,10%expfile=%filename%pipsys.dmp wner=pip_sx_sys INDEXES=y grants=y& constraints=y compress=y log=%filename%pipsys.logecho 备份结束
if not exist %filename%fgysuser.dmp goto finishdel/q e:\数据库日备份\emove e:\数据库日备份\d\*.* e:\数据库日备份\emove e:\数据库日备份\c\*.* e:\数据库日备份\dmove e:\数据库日备份\b\*.* e:\数据库日备份\cmove e:\数据库日备份\a\*.* e:\数据库日备份\bmove e:\数据库日备份\tmp\*.* e:\数据库日备份\a:finish
在BAT里执行ORACLE的语句
建个一个BAT文件写入以下语句:
sqlplus@runSql.sql
在&runSql.sql文件输入以下内容
conn&&&alter table AA add a4 varchar2(10);exit
TA的最新馆藏[转]&[转]&[转]&[转]&[转]&[转]&
喜欢该文的人也喜欢50117人阅读
1、在xml的sql语句中,不能直接用大于号、小于号要用转义字符
如果用小于号会报错误如下:
org.apache.ibatis.builder.BuilderException: Error creating document instance. &Cause: org.xml.sax.SAXParseException: The content of elements must consist of well-formed character data or markup.
& & & & & & & & & & && & & & & & & & & & & & & & & & &&
& & & & & & & & & & &&
& & & & & & & & & & &小于号 & & & & & & & & & & & & & & & & & & & & &&
& & & & & & & & & & &&
& & & & & & & & & & && & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & &大于号
& & & & & & & & & & &&
& & & & & & & & & & &&
& & & & & & & & & & &和
& & & & & & & & & & &&
& & & & & & & & & & &’
& & & & & & & & & & &单引号
& & & & & & & & & & &&
& & & & & & & & & & &&
& & & & & & & & & & &双引号
&![CDATA[ ]]&标记的sql语句中的&where&&&if&等标签不会被解析
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:207345次
积分:1984
积分:1984
排名:千里之外
原创:33篇
转载:36篇
评论:18条
(2)(5)(1)(5)(1)(1)(1)(1)(4)(2)(12)(1)(2)(5)(1)(1)(1)(3)(1)(4)(1)(2)(3)(1)(2)(3)(2)(1)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'cmd批处理常用符号详解
字体:[ ] 类型:转载 时间:
我们在批处理编写过程中经常遇到各种特殊符号,很多朋友不是很清楚cmd中特殊符号的含义,这里简单的介绍下,方便需要的朋友
1、@一般在它之后紧跟一条命令或一条语句,则此命令或语句本身在执行的时候不会显示在屏幕上。请把下面的代码保存为test.cmd文件,然后运行,比较一下两条echo语句在屏幕上的输出差异:&&& echo a&&& @pause&&& @echo b&&& @pause执行结果如下:&&&&&&& C:\Documents and Settings\JM\桌面&echo a&&&&&&& a&&&&&&& 请按任意键继续...&&&&&&& 请按任意键继续...
2、%、%%百分号用在不同的场合,有不同的含义:① 当百分号成对出现,并且其间包含非特殊字符时,一般做变量引用处理,比如:%var%、%str%。把以下代码保存为批处理文件,运行后观察屏幕显示结果: &&& @echo off&&& set str=abc&&& echo 变量 str 的值是: %str%&&& pause在屏幕上将显示这样的结果:&&&&&&& 变量 str 的值是: abc&&&&&&& 按任意键继续...另外,百分号作为变量引用还有一种特殊形式,那就是对形式参数的引用,此时,单个百分号后面紧跟0~9这10个数字,如%0、%1,其中,%0为脚本本身的名称,%1至%9为第二至九个参数...最多支持%0~%9,%10以后就是变量引用了,即%15为%1的值接上5。请看演示代码:&&& @echo off&&& if defined str goto next&&& set str=&&& set /p str=请把文件拉到本窗口后回车:&&& call "%~0" %str%&&& pause&&& exit&&& :next&&& cls&&& echo 本批处理文件完整路径为:"%~0"&&& echo 拖到本窗口的文件完整路径为:"%~1"&&& goto :eof② 出现在 set /a 语句中时,表示两数相除取余数,也就是所谓的模运算,它在命令行窗口和批处理文件中的写法略有差异:在命令行窗口中,只需要单个的%,在批处理文件中,需要连续两个百分号,写成%%。例如:在命令行窗口中,运行 set /a num=4%2 ,则结果将显示0,因为4除以2的余数为0;如果保存为批处理文件,则此语句将略有改变:&&& @echo off&&& set /a num=4%%2&&& echo 4除以2的余数为 %num%&&& pause③ 转义符号:如果要显示%本身时,需要在前面用%来转义。例如:&&& @echo off&&& echo 一个百分号:%%&&& echo 两个百分号:%%%%&&& echo 三个百分号:%%%%%%&&& pause
3、:、::① 以:打头的单个的:表示该行是一个标签,它之后的内容是一个标签段,如:test,则表示:test之下的内容是标签段,而test是这个标签段的名,可以用 goto test 、goto :test 跳转到该标签段或用 call :test 调用该子过程;而连续两个冒号打头表示该行内容为注释内容,实际上,:: 是个无效的标签名,:加上空格同样可以起到注释的作用,此时,::的功能和注释命令rem相同;但是,rem 注释语句中的某些命令符号如重定向符号和管道符号还是会执行,而如果用::来注释的时候,与::同处一行的所有命令或符号直接被命令解释器忽略掉,无形中提高了注释的兼容性和整个程序的执行效率,并且在众多的命令语句中更显得醒目,所以,注释语句推荐使用::的格式。② 在 set 语句中:和~同时使用时,: 起到截取字符串的功能。假设 set str=abcde,那么,set var=%str:~0,1% 表示截取字符串abcde的第一个字符;和=同时使用时,起到替换字符串的功能。假设:set str=abc:de,那么,set var=%str:a=1% 则表示把字符串abc:de中的a替换为1,set var=%str::=2% 则表示把字符串abc:de中的:替换为2;
4、~① 用在 set 语句中,和:同时使用时,起到截取字符串的功能,请参考上一条的解释;② 用在 set /a 语句中时,它是一元运算符号,表示将操作数字按位取反,例如,set /a num=~1的执行结果是-2,set /a num=~0的结果是-1③ 用在for语句中,表示增强for的功能,能够提取到更多的信息。例如:在批处理文件的for语句中:%%~i表示去掉第一对外侧引号,%%~zi表示获取文件的大小(以字节为单位),%%~ni表示获取文件名,%%~xi表示获取扩展名(带点号)……它们可以组合使用,如%%~nxi表示获取文件名和后缀名。
5、&、&&一般而言,&表示用新内容覆盖原文件内容,&&表示向原文件追加内容,此时,它们以重定向符号的身份出现;如果用在 set /a 语句中,则&表示分组,&&表示逻辑移位;
6、|一般而言,它以管道符号的身份出现,表示把在它之前的命令或语句的执行结果作为在它之后的命令或语句的处理对象,简而言之,就是把它之前的输出作为它之后的输入,例如:echo abcd|findstr "b",表示把echo abcd的执行结果,作为findstr "b" 的执行对象,也就是在字符串abcd中查找b字符;如果test.txt中有abcd字符串,则该语句与 findstr "b" test.txt 具有同样的效果;
7、^一般而言,^以转义字符的身份出现。因为在 cmd环境中,有些字符具备特殊功能,如&、&&表示重定向,|表示管道,&、&&、||表示语句连接……它们都有特定的功能,如果需要把它们作为字符输出的话,echo &、echo | ……之类的写法就会出错——cmd解释器会把它们作为具有特殊功能的字符对待,而不会作为普通字符处理,这个时候,就需要对这些特殊字符做转义处理:在每个特殊字符前加上转义字符^,因此,要输出这些特殊字符,就需要用 echo ^&、echo ^|、echo ^|^|、echo ^^……之类的格式来处理;
8、&一般而言,&表示两条命令或语句同时执行的意思。如 echo a&echo b,将在屏幕上同时显示a和b字符。当几条语句含义近似或作用相同且没有先后的顺序之别时,启用&符号连接这些语句将会增加程序的可读性;
9、&&、||这是一对含义截然相反的命令符,&&表示如果它之前的语句成功执行,将执行它之后的语句,而||则表示如果它之前的语句执行失败,将执行它之后的语句;在某些场合,它们能替代 if……else…… 语句;例如:&&& @echo off&&& md test&&echo 成功创建文件夹test||echo 创建文件夹test失败&&& pause效果等同于如下代码:&&& @echo off&&& md test&&& if "%errorlevel%"=="0" (echo 成功创建文件夹test) else echo 创建文件夹test失败&&& pause
10、()小括号对经常出现在for语句和if语句中,还有一些特定场合;在for和if语句中属于语句格式的要求,例如:① for %%i in (语句1) do (语句2):在这条语句中,语句1必须用括号对包围,而语句2的括号对则可视情况予以抛弃或保留:如果语句2是单条语句或用&、& &、||等连接符号连接的多条语句,括号对可以抛弃,如果语句2是有逻辑先后关系的多条语句集合,则必须保留括号对,并且,多条语句必须断行书写;例如:&&& @echo off&&& for %%i in (a b c) do echo %%i&echo --------&&& pause也可以改写为:&&& @echo off&&& for %%i in (a b c) do (&&&&&&& echo %%i&&&&&&& &echo --------&&& )&&& pause② if 条件 (语句1) else (语句2):如果没有else部分,则语句1的括号对可有可无;如果有else部分,则语句1中的括号对必须保留,此时,语句2中的括号对保留与否,和上一点类似。例如:&&& @echo off&&& if exist test.txt echo 当前目录下有test.txt&&& pause&&& @echo off&&& if exist test.txt (echo 当前目录下有test.txt) else echo 当前目录下没有test.txt&&& pause&&& @echo off&&& if exist test.txt (echo 当前目录下有test.txt) else (&&&&&&& echo 当前目录下没有test.txt&&&&&&& pause&&&&&&& cls&&&&&&& echo 即将创建test.txt文件&&&&&&& cd.&test.txt&&echo 成功创建test.txt&&& )&&& pause③ 特定场合下使用括号对,不但可以使代码逻辑清晰,增强可读性,还可能会减少代码量。比如用echo语句构造多行文本内容的时候:&&& @echo off&&& (&&& echo 第一行&&& echo 第二行&&& echo 第三行&&& )&test.txt&&& start test.txt如果不使用括号对的话,则需要使用如下代码:&&& @echo off&&& echo 第一行&test.txt&&& echo 第二行&&test.txt&&& echo 第三行&&test.txt&&& start test.txt
11、+、-、*、/在 set /a 语句中,这些符号的含义分别为:加、减、乘、除。例如:set /a num=1+2-3*4/5。需要注意的是,这些运算符号遵循数学运算中的优先级顺序:先乘除后加减,有括号的先算括号,并且,直接忽略小数点,因此,刚才那个算式的结果是1而不是0或0.6。另外,有可能会在代码中看到这样的写法:set /a num+=1、set /a num-=1、set /a num*=1 和 set /a num/=1,这些表示累加、累减、累乘、累除,步长都是1,展开后的完整写法为:set /a num=num+1、set /a num=num-1、set /a num=num*1 和 set /a num=num/1(set /a 语句中,变量引用可以忽略百分号对或感叹号对,set /a num=%num%+1 与 set /a num=num+1 等同)
12、equ、neq、lss、leq、gtr、geq这几个命令符是if语句中常用到的数值比较符号,取自英文的关键字母,具体的含义为:&&&&&&& 命令符号&&&&&&& 含义&&&&&&&&&&&&&&& 英文解释&&&&&&& EQU&&&&&&&&&&&&&&& 等于&&&&&&&&&&&&&&& equal&&&&&&& NEQ&&&&&&&&&&&&&&& 不等于&&&&&&&&&&&&&&&& not equal&&&&&&& LSS&&&&&&&&&&&&&&& 少于&&&&&&&&&&&&&&&& less than&&&&&&& LEQ&&&&&&&&&&&&&&& 少于或等于&&&&&&&& less than or equal&&&&&&& GTR&&&&&&&&&&&&&&& 大于&&&&&&&&&&&&&&&& greater than&&&&&&& GEQ&&&&&&&&&&&&&&& 大于或等于&&&&&&&& greater than or equal
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具1606人阅读
ASP编程入门进阶(一):安装配置服务器鉴于ASP脚本语言是在服务器端IIS或PWS中解释和运行,并可动态生成普通的HTML网页,然后再传送到客户端供浏览的这一特点。我们要在本机上进行调试,那就要求我们的个人电脑具有服务器的功能。  IIS为何物?IIS是Internet Information Server的缩写,它是微软公司主推的Web服务器。那PWS呢?它就显得有些古老了:)早期在WIN98,当然现在仍有人采用的操作系统,PWS(Personal Web Server)是一般用户最容易得到的web服务器: 在win98的安装盘的Add_on/pws目录下就可以找到pws的安装程序。而对于IIS是我们所推荐的,也是大部分朋友在使用的,有必要。1,打开控制面板 IIS服务器算是安装OK了,那具体有什么用处?又该如何使用呢?首先IIS的作用之一就是可以解释执行ASP网页代码,并将结果显示出来。当然就现在而言,你的机器充当的既是服务器端,又是客户端,该技术对你来说是透明的,你不需要也没必要去研究它的原理,就这样去理解去应用。那打开你的浏览器,随便IE,NS,TE还是MYIE,只要是能浏览网页的浏览器,在其地址栏输入:localhost/ 查看即可。出现当前该窗口就表示已经成功了:WEB服务正在运行这,就行了?你知道下面怎么办呢?很是没头绪,对吧。费尽心思学到现在,就是看了人家的一个ASP页面。那我自己做,调试自己的ASP网页又该如何呢?首先,你得想好你的ASP文件总要放在一个地方吧。打开&我的电脑&,在E盘下面建立一个&myasp&文件夹,以后所有的ASP文件先暂时放到这里吧。然后,从&开始&菜单,&程序&&&附件&&打开&记事本&。在里面敲入 &%=now()%& 接着将文件保存到E:/myasp/文件夹里面,并且命名为time.asp一个很简单的ASP文件就OK了,下面我们怎么办?一句话:调试。怎么调试?还是输入我们刚才的http://localhost/ ?很显然是不行的。那这时候是不是难点来了:我该如何调试我自己定义的一个文件夹里的ASP文件呢?同样,一句话:用虚拟目录。那什么是虚拟目录?又该如何建立一个虚拟目录呢?(引一段话:要从主目录以外的其他目录中进行发布,就必须创建虚拟目录。&虚拟目录&不包含在主目录中,但在显示给客户浏览器时就象位于主目录中一样。虚拟目录有一个&别名&,供 Web 浏览器用于访问此目录。别名通常要比目录的路径名短,便于用户输入。使用别名更安全,因为用户不知道文件是否真的存在于服务器上,所以便无法使用这些信息来修改文件。)对初学者而言不必理会,重在实践,用多了自然会理解这段话的意思。& & 大体上就是让我刚才的myasp文件夹用一个代号来标记,比如就标记为myasp,那我调试的时候只要输入:http://localhost/myasp/time.asp 就可以调试了。那如何标记呢?也就是如何建立一个虚拟目录呢?从&控制面板&里面打开&管理工具&,弹出的窗口中右键&新建&&&虚拟目录&,弹出&虚拟目录创建向导&,再下一步,目录:浏览到E:/myasp即可。紧跟一步,访问的权限一定要把&读取&和&运行脚本&打勾。最终点击&完成&。 那么剩下的就是调试该time.asp了。在&Internet信息服务&里面右键time.asp,选择&浏览&就可以看到了。就这么简单,你已经ASP入门了。ASP编程入门进阶(二):认识表单 说实话,无论是asp,php还是jsp进行网络编程的时候,都离不开和用户的交互。而人机对话的平台,基本上是靠相应的文本、列表框进行输入,然后通过按钮提交送至数据库的。所以学习网络编程就一定要了解这些输入平台相关的东西:表单(form)其基本格式如下:可以总结出:表单即包括&form&...&/form&之内的相关内容。其中内部可以分三大类:input,select,textarea一,首先看&form&内部参数参数name:用来表示该表单的唯一名称,方便一个页面建立多个表单而不混淆,当然更是为了接受页面的确认关系。 参数action:显而易见,是表示当前表单中所有内容将送交某个页面去处理。处理包括接受信息,数据库比较添加,修改等。参数method:即表单的提交方法,含两种方法:post和get。post是传输信息内容,get是传输url值,具体用法将会在下一节&内置对象request&中介绍到。二,再来看Input相关Input表示Form表单中的一种输入对象,其又随Type类型的不同而分文本输入框,密码输入框,单选/复选框,提交/重置按钮等,下面一一介绍。1,type=text输入类型是text,这是我们见的最多也是使用最多的,比如登陆输入用户名,注册输入电话号码,电子邮件,家庭住址等等。当然这也是Input的默认类型。参数name:同样是表示的该文本输入框名称。参数size:输入框的长度大小。参数maxlength:输入框中允许输入字符的最大数。参数value:输入框中的默认值特殊参数readonly:表示该框中只能显示,不能添加修改。2,type=password不用我说,一看就明白的密码输入框,最大的区别就是当在此输入框输入信息时显示为保密字符。参数和&type=text&相类似。3,type=file当你在BBS上传图片,在EMAIL中上传附件时一定少不了的东西:)提供了一个文件目录输入的平台,参数有name,size。4,type=hidden非常值得注意的一个,通常称为隐藏域:如果一个非常重要的信息需要被提交到下一页,但又不能或者无法明示的时候。一句话,你在页面中是看不到hidden在哪里。最有用的是hidden的值。5,type=button标准的一windows风格的按钮,当然要让按钮跳转到某个页面上还需要加入写JavaScript代码6,type=checkbox多选框,常见于注册时选择爱好、性格、等信息。参数有name,value及特别参数checked(表示默认选择)其实最重要的还是value值,提交到处理页的也就是value。(附:name值可以不一样,但不推荐。)&form name="form1"&a:&input type="checkbox" name="checkit" value="a" checked&&br&b:&input type="checkbox" name="checkit" value="b"&&br&c:&input type="checkbox" name="checkit" value="c"&&br&&/form&name值可以不一样,但不推荐&br&&form name="form1"&a:&input type="checkbox" name="checkit1" value="a" checked&&br&b:&input type="checkbox" name="checkit2" value="b"&&br&c:&input type="checkbox" name="checkit3" value="c"&&br&&&&/form&7,type=radio即单选框,出现在多选一的页面设定中。参数同样有name,value及特别参数checked.不同于checkbox的是,name值一定要相同,否则就不能多选一。当然提交到处理页的也还是value值。8,type=image比较另类的一个,自己看看效果吧,可以作为提交式图片9,type=submit and type=reset分别是&提交&和&重置&两按钮submit主要功能是将Form中所有内容进行提交action页处理,reset则起个快速清空所有填写内容的功能。Input的Type总结下来有10个,还是不少的,呵呵三,接着再来看Select相关Select主要要来做下拉菜单,跳转菜单,(下拉)列表。其本身有内嵌代码&option&...&/option&,option参数value值为传递被处理的值,option还有参数selected,表示默认被选中。1,下拉菜单只是菜单式显示。2,跳转菜单在下拉菜单基础上添加JavaScript成为跳转菜单。[3,下拉列表和下拉菜单最大的区别就是select多了一个size值,该值并非长度大小,而是列表的上下高度。当然还有更主要的是:菜单只能选一个,而列表可以选多个,该特殊参数为multiple四,最后关注的Textarea可以将Textarea文本区域理解为扩大化了的文本输入框。其参数没有value,默认值设定在&textarea&...&/textarea&之间。其它参数还有rows,表示文本区域的行数;参数cols,表示文本区域的列数。还有参数warp,当warp=off表示该文本区域中的不自动换行,当然不写默认是自动换行的。最后总结:input根据type分10类,select从option处又分菜单和列表,textarea有行有列的文本输入区域ASP编程入门进阶(三):接触脚本程序&有了前面的html中关于form的强化知识,是不是在想,下面就可以开始ASP之旅呢?未必。一般系统学过ASP的编程人员都会切身体会到:在系统学习ASP的内置对象和内置组件之前,学会脚本语言是至关重要的。为什么这么说呢?为什么要学脚本语言呢?ASP和脚本语言又有什么关系呢?首先说说ASP是贵为何物吧。ASP是Microsoft Active Server Pages的简称,它是一种服务器端脚本环境,可用来创建交互式 Web 页并建立强大的 Web 应用程序。可以表明ASP是一种基于服务器端的脚本环境,那就明白ASP为什么需要IIS支持了,因为IIS即为常用的一类web服务器;那也就明白为什么要学脚本语言了,因为ASP提供的是一种脚本环境。 再次需要说明的是,ASP只是一种环境,而非一种语言。如果真要形象化地说是ASP是网络编程语言的话,那也是属于一个html+脚本+asp提供的内置对象及组件的功能强大的混合语言。所以,学点脚本非常重要!其实无论是学脚本语言,还是其它语言,我认为首先需要了解的是该语言涵盖的各类特性,包括:数据类型、事件、方法、 对象、属性、语法等当然这都是些空谈,正如在大学课堂上的某计算机语言课一样,搞纯研究性的就是觉得有些索而无味。还是实用些的好,能解决问题的程序才是好程序。当然,语言这东西还是要你去好好钻研的,比如你写求绝对值的程序,其实一个abs()函数就搞定了。你以后需要注意的是语言的函数、语法目前有两种主要的脚本语言:VbScript和JavaScript。因为VbScript作为IIS默认的服务器脚本,所以我们所谈所学的基本是围绕VbScript为脚本的ASP的,当然也不排除有的时候使用javascript.举一个很简单的例子:&script language="vbscript"& &!--&&sub button1_onclick& && &msgbox (" 欢迎使用vbscript! " ) &&end sub&&--& &/script&&script language="javascript"& &!--& & function b213()& & {& && &alert("欢迎使用javascript!")& &&&}& &&&--&&/script&&&&form&&input type="button" name="button1" value="vbs"&&br&&input type="button" name="button2" value="js" onclick="b213()"& &/form&vbscript中的Sub 就是一个事件过程。过程名包含两部分:一部分为按钮名,即 Button1(从 & INPUT & 标记中的 NAME 属性获取);另一部分为事件名,即 OnClick。两部分由下划线 (_) 连接。单击按钮时,Internet Explorer 查找并运行相应的事件过程,即 Button1_OnClick,而MsgBox 就是一个函数,对于它更具体的参数,你就好好看下了。一时来劲,可能大家都看到网上有种狂恶心的对话框组,原理是什么呢?请看:在来个下面来看开页和退页弹出对话框的原理吧script language="vbscript"& &!-- sub window_onload()msgbox"welcome you!"end sub sub window_onunload()msgbox"see you late!"  end sub --& &/script&开页显示&welcome you!&,关页显示&see you late!&以上只是一个显示对话框msgbox,当然还有书写对话框inputbox也顺便看下吧。再来看看几个实用的函数:len():返回字符串长度或者变量的字节长度 lef():截取一个字符串的前部分内容   right():截取一个字符串的后部分内容&script language=vbs&text="abcdefgh" i=10lentext=len(text) lefttext=left(text,i) righttext=right(text,i)alert ("文本长度是:"&lentext) alert ("文本左取"&i&" 得的是:"&lefttext) alert ("文本右取"&i&" 得的是:"&righttext)&&&/script&根据这几个,经常看到的长文章后面加&......&的情况就是如下:还有个比较重要的函数replace() 在字符串中查找,替代指定的字符串replace(strtobesearched,strsearchfor,strreplacewith)strtobesearched是字符串; strsearchfor是被查找的子字符串;strreplacewith 是用来替代的子字符串。下面的一个就是很有用的文字转换程序这些都是比较现实较好玩的些,玩中学习也不错:)但毕竟我们是要编程的,说到编写程序,我知道程序结构可以分:1,顺序结构:就是最普通的,从上往下,从左往右执行的程序2,选择结构:给你两个条件,要不这样(if ... then),要不那样(else),任君选择:)3,循环结构:给你一个最大发挥的空间,在不超出这个范围内进行活动(循环),否则自动退出(跳出循环)。再复杂的程序也无非是由这三种结构综合嵌套运用过来的,你说是吧。顺序结构没多少要说,因为程序执行基本都是这方向。来看看选择结构,当然选择结构也可以嵌套。&body&&&hello &script language="vbscript"& &!--dim thishourthishour=hour(time)if thishour&=12 then&&document.bgcolor="red"&&document.fgcolor="black"&&document.write("上午好!")else&&if thishour&=18 then& & document.bgcolor="blue"& & document.fgcolor="white"& & document.write("下午好!")&&&else& & document.bgcolor="green"& & document.fgcolor="yellow"& & document.write("晚上好!")  &&end if  end if& &--& &/script&本页的作用是根据不同时间显示不同颜色和欢迎信息。以上程序很简单吧,只要能认识英文就会懂程序(我是这么理解的:)先把现在的小时提交出来:hour(time);然后和12比较判断,如果&=12,肯定是上午了,否则就是下午和晚上;否则里面继续条件判断,如果时间再&=18的话,那肯定就是下午了;最后,不用说,瞎子猜猜也知道是晚上了。有关上一程序中的document.bgcolor就是文档的背景色,document.fgcolor就是文档的前景色(文字色),下一程序是动态改变背景颜色的。&script language="vbscript"&&!--sub setbgcolor(bcolor) & &&&document.bgcolor=bcolorend sub --& &/script& &form&&input type="radio" name="color" onclick=setbgcolor("red")&red&br&&input type="radio" name="color" onclick=setbgcolor("gray")&gray&br& &/form&有关条件选择结构的嵌套再show出一个表单检测的程序&html&&head&&title&abc&/title&&script language="vbscript"&&!-- sub btnsubmit_onclick& &if form1.name.value&&"" then& & if form1.addr.value&&"" then& &&&if form1.email.value&&"" then& &&&& && & if instr(form1.email.value,"@")&&0 and instr(form1.email.value,".")&&0 then& && && &form1.submit& && & else& && && &alert"email error!"& && & end if& && &else& && &&&alert "enter your email!"& && &&&form1.elements("email").focus& &&& && &end if& & else& && &alert "enter your address!"& && &form1.elements("addr").focus& && && & end if& &else& & msgbox "enter your name please!"& & form1.elements("name").focus& &end ifend sub --&&/script&&&&/head&&&&body&&form name="form1" method=post action="bug.html"&your name:&input type="text" name="name"&&br&your addr:&input type="text" name="addr"&&br&your email:&input type="text" name="email"&&br&&input type="button" name="btnsubmit" value="submit"&&/form& &/body& &/html&程序是给出来了,但看起来比较难懂,有时程序执行时间也比较重要,所以得精简程序代码。正所谓:写程序容易,写经典程序难啊,那上面的程序还可以换种思维方式。改用javascript(注:学的是编程思想,不要太过计较脚本类型)&html&&head&&title&abc&/title&&script language="javascript"&&!-- function form1_onsubmit(){ if (document.form1.name.value=="")& & & &{& & & &&&alert("请设定您的登陆名。")& & & &&&document.form1.name.focus()& & & &&&return false& & & & }  else if(document.form1.addr.value=="")& & & &{ & & & &&&alert("请填写您的地址。")& & & &&&document.form1.addr.focus() & & & &&&return false& & & & } } --& &/script& &/head& &body&&form name="form1" onsubmit="return form1_onsubmit()"&your name:&input type="text" name="name"& &br& your addr:&input type="text" name="addr"&&br&&input type="submit" name="submit" value="submit"& &/form& &/body& html&最后来看下循环结构吧:1到500可不是一个一个写出来的。当然循环不只可以用for,还可以用do while...loop等。反正程序这东西是代替我们少做了许多重复单一无聊的事&&只要你合理利用程序。应该有些成就吧,学语言,学编程就是学语法语义,学编程架构思想。当然这要你有扎实的本语言的基础,基础是什么?你知道哪些函数吗?你知道怎么用程序怎么判断偶数吗(包含了运算)?你知道如何进行表单检测吗?你知道哪三种程序架构吗?呵呵,把以上的程序吃透,最好再多看看脚本参考手册,跟我就可以开始ASP的上路了。ASP基本语法&建立ASP程序   ASP程序是扩展名为.asp的文本文件,其中包括文字,HTML语句,ASP命令及其他脚本语言。  ASP命令必须放在"<%"与"%>"之间。程序注释 为了养成良好的编程风格外,适度的注释不可少,ASP提供了两中注释方式1、单引号(),在单引号之后的这行文字都视为注释 2、rem 关键词,在REM后的文字,视为注释赋值语句  ASP中一般变量的赋值语句是 "=",  而对象是用 set 语句来赋值。条件语句和循环语句了解编程语言的朋友一定知道在程序中控制程序流程的语句主要可以分为条件语句和循环语句,在 VBScript 中可使用以下条件语句:    If...Then...Else 语句 和 Select Case 语句   If...Then...Else 语句用于计算条件是否为 True 或 False,并且根据计算结果指定要运行的语句。通常,条件是使用比较运算符对值或变量进行比较的表达式,If...Then...Else 语句可以按照需要进行嵌套。&   让我们来创建两个范例文件:if1.asp 和 if2.asp&   将以下语句剪贴到记事簿中,并保存为 if1.asp( 注意:请将程序中&&&后的空格去掉 )   & html&  & head&  & TITLE&if1.asp& /TITLE&  & /head&& body bgcolor="#FFFFFF"&  & form action="if2.asp" method=get&  Your First Name& INPUT NAME="FirstName" MaxLength=20&& p&  Your Last Name& INPUT NAME="LastName" MaxLength=20&& p&  & INPUT TYPE=submit&& INPUT TYPE=reset&  & /form&  & /body&  & /html&  将以下语句剪贴到记事簿中,并保存为 if2.asp   & html&  & head&  & TITLE&ifrespond.asp& /TITLE&  & /head&  & % fname=request.querystring("Firstname")  lname=request.querystring("Lastname")  If fname="George" and lname="Washington" then %&  Hi.You must be the first president!  & % else %&  Hi!Nice to Meet You  & %end if %&  & /body&  & /html&   asp1.asp 产生一个文本输入框,要求用户输入姓、名&   asp2.asp 则是用 IF 语句判断用户输入的姓名是否为&George Washington&, 并做出相应的反馈。在此我们遇到了一个 ASP 的内建对象 request,通过使用 request 对象可以访问任何用 HTTP 请求传递的信息,包括从 HTML 表格中用 POST 方法或 GET 方法传递的参数、cookie 和用户认证。而 QueryString 集合检索 HTTP 查询字符串中变量的值,HTTP 查询字符串由问号 (?) 后的值指定。如:    http://localhost/if2.asp?Firstname=George&Lastname=Washington&   生成值为 "Firstname=George&Lastname=Washington" 的变量名字符串。   If...Then...Else 语句的一种变形允许您从多个条件中选择,即添加 ElseIf 子句以扩充 If...Then...Else 语句的功能,使您可以控制基于多种可能的程序流程。    我们将 asp2.asp 的程序部分扩充如下: & %  fname=lcase(request.querystring("Firstname"))  lname=lcase(request.querystring("Lastname"))  If fname="george" and lname="washington" then %&  Hi.You must be the first president!& p&  & % elseIf fname="ronald" and lname="reagan" then %&  Hi.You must be the actor president!& p&  & % elseIf fname="jimmy" and lname="carter" then %&  Hi.You must be the peanut farmer president!& p&  & % elseIf fname="naoko" or fname="charles" then %&  Hi.Your name reminds me of someone,but I am not sure who!& p&  & % else %&  Hi!Nice to Meet You  & % end if %&   可以添加任意多个 ElseIf 子句以提供多种选择。但使用多个 ElseIf 子句经常会使程序变得很累赘。在多个条件中进行选择的更好方法是使用 Select Case 语句。&   Select Case 结构提供了 If...Then...ElseIf 结构的一个变通形式,可以从多个语句块中选择执行其中的一个。Select Case 语句提供的功能与 If...Then...Else 语句类似,但是可以使代码更加简练易读。Select Case 结构在其开始处使用一个只计算一次的简单测试表达式。表达式的结果将与结构中每个 Case 的值比较。如果匹配,则执行与该 Case 关联的语句块,我们同样可以用 Select Case 语句来写 asp2.asp 文件:  & %  fname=lcase(request.querystring("Firstname"))  lname=lcase(request.querystring("Lastname"))  name=fname+lname  Select case name  case "georgewashington"  response.write "Hi.You must be the first president!& p&"  case "ronaldreagan"  response.write "Hi.You must be the actor president!& p&"  case "jimmycarter"  response.write "Hi.You must be the peanut farmer president!& p&"  case "naokocharles"  response.write "Hi.Your name reminds me of someone,but I am not sure who!& p&"  case else  response.write "Hi!Nice to Meet You"   End Select %&请注意 Select Case 结构只计算开始处的一个表达式,且只计算一次,而 If...Then...ElseIf 结构计算每个ElseIf 语句的表达式,这些表达式可各不相同。因此仅当每个ElseIf 语句计算的表达式都相同时,才以使用 Select Case代替 If...Then...ElseIf 结构。Select Case 语句也是可以是嵌套的,每一层嵌套的Select Case语句必须有与之匹配的End Select 语句。(四)内置对象Request&&系统学习ASP,就是先从ASP的几大内置对象开始的.asp一般称有五大对象:Request、Response、Server、Session、Application当然一直还没有提到的就是,ASP到底是什么样?我看代码怎么知道是ASP代码?很简单,当看到&&%&和&%&&就表明是ASP,并且两者之间的就是ASP源码。那为什么要学对象,对象的作用又是如何的?其实ASP所提供的这些可在脚本中使用的内建对象,使用户更容易收集通过浏览器请求发送的信息、响应浏览器以及存储用户信息,从而使对象开发者摆脱了很多烦琐的工作。而Request对象的主要作用就是:在服务器端接受并得到从客户端浏览器提交或上传的信息。Request 对象可以访问任何基于 HTTP 请求传递的所有信息,包括从Form表单用 POST方法或 GET 方法传递的参数、cookie 等。一、Request.form("name") 这是接受上一页的信息时,常会用到的一种接受方式。Request是ASP对象,form则是Request对象所包含的对象集合(这与HTML页中的form表单不一样的),name也就是上一页表单中的某个文本框、密码框,或者隐藏域等的名称。并且还有一点非常重要:上一页Form表单的递交方法一定要为Post方法。看下面两个程序。1,test1.html(本页是HTML的,主要提供输入信息的平台,将信息提交到ASP页进行受处理)&form action="submit1.asp" method="post"&your name:&input tpye="text"&&name="yourname"&&br&your pwd: &input type="password" name="yourpwd"&&br&&input type="submit" value="submit"&&/form&注意method就是post,且提交的页面action为submit1.asp。2,submit1.asp(ASP页面,进行从test1.html接受name="yourname"和name="yourpwd"的两个值)your name is:&%=request.form("yourname")%&&br&your pwd is:&%=request.form("yourpwd")%&通过IIS进行HTTP协议的页面调试,你会发现两个页面进行了关联:test1.html中动态输入的name和pwd,在submit1.asp页进行相应动态显示。这就是接收提取并显示信息的过程。3,改进的submit1.asp&% for each i in request.form%& &%=i%&: &%=request.form(i)%& &br& &%next%&采用了for循环语句,将上页所有的form标签信息进行接受、并显示。这在上表单页有很多项目时,非常快捷地出来结果。  request.form后面的("yourname")或("yourpwd")变成了变量 i,通过for循环对该form集合进行遍历提取,这是一种不同于机械地&有几个就提取几个&的编程思想,注意掌握。二,Request.querystring("name")此时由Request.form变为Request.querystring,最主要的还是上页表单递交时,采用的什么方法。当采用post就用Request.form,否则当采用get时就采用Request.querystring了。那Request.querystring最大特色在哪里呢?Request.querystring能检索并接受 HTTP 查询字符串中变量的值,而HTTP 查询字符串则是由问号 (?) 后的值指定的。继续看一个程序。1、test2.html(本页同是HTML的,主要提供输入信息的,将信息提交到ASP页进行处理,提交方法是get)与test1.html最大区别也就是method="get"。2、submit2.asp(ASP页面,从test1.html接受name="yourname"和name="yourpwd"两个值)your name is:&%=request.querystring("yourname")%&&br&your pwd is:&%=request.querystring("yourpwd")%&注意此时的浏览器地址栏,文件后面多出了?号,?号后面附有变量名及所被赋的值,当然多个变量名之间是用&号进行连接的。而Request.querystring最大的功能就是能将?号后面的这些变量名分开,并且所对应的值也一一取出。刚才说到不同的变量名之间是用&号进行连接,但如果是相同的变量名时,request.querystring到底是提取前一个?后一个?还是两个一起?用例子说话。3、query.asp(名称是query.asp,因为在该页程序中是反馈给自己。)&a href="query.asp?bookname=《asp教程》"&《asp教程》&/a&&br&&a href="query.asp?bookname=《jsp教程》"&《jsp教程》&/a&&br&&a href="query.asp?bookname=《xsp教程》&bookname=《xml》"&《xsp教程》&/a&&br&you chosed &%=request.querystring("bookname")%&很明显当点《xsp教程》时,显示的是&《xsp教程》,《xml》&,中间自动加了&,&号。最后仍需要说明的是:request.querystring在分页程序里面是经常用到的。三、Request.ServerVariables("xxx")即服务器的环境变量,该变量包含的内容比较多,我们同样先采用for循环进行遍历查看。1、server1.asp &%for each i in request.servervariables%&&&%=i%&: &%=request.servervariables(i)%& &hr&  &%Next%&可以看到一大堆环境变量,其中还有没有值的,下面摘取几个比较常用的。http_user_agent(客户端机器的相关环境):&%=request.servervariables("http_user_agent")%&&br&http_accept_language(浏览语言):&%=request.servervariables("http_accept_language")%&&br&CONTENT_LENGTH(客户端发出内容的长度):&%=request.servervariables("CONTENT_LENGTH")%&&br&CONTENT_TYPE(内容的数据类型。如&text/html&。同附加信息 的查询一起使用,如 HTTP 查询 GET、POST 和 PUT):&%=request.servervariables("CONTENT_TYPE")%&&br&LOCAL_ADDR(返回接受请求的服务器地址。如果在绑定多个IP地址的多宿主机器上查找请求所使用的地址时,这条变量非常重要):&%=request.servervariables("LOCAL_ADDR")%&&br&REMOTE_ADDR(发出请求的远程主机client的 IP 地址):&%=request.servervariables("REMOTE_ADDR")%&&br&SERVER_NAME(出现在自引用 URL 中的服务器主机名、DNS 化名 或 IP 地址):&%=request.servervariables("SERVER_NAME")%&&br&SCRIPT_NAME(主机名后面的虚拟地址):&%=request.servervariables("SCRIPT_NAME")%&&br&LOGON_USER(用户登录 Windows NT 的帐号):&%=request.servervariables("LOGON_USER")%&&br&SERVER_PORT(发送请求的端口号):&%=request.servervariables("SERVER_PORT")%&根据以上的SERVER_NAME是提取的服务器主机名,SCRIPT_NAME是提取的虚拟地址,则两者的结合再加上http:// 是不是就是个完整的网址呢。2、server2.asp &%a=request.servervariables("server_name")%&&%b=request.servervariables("script_name")%& &%="http://"&a&b%&其中http:// 用引号引起,表示是字符串,a和b分别是对应了具体值的变量,在ASP中进行这样的连接就是采用&号。根据这个结果,我们是不是就可以随时提取动态的URL地址了。再来看看query.asp,要求一定要保存为query.asp的,因为如果不是该文件名,程序指向就会出错。但现在的这个文件就随便你保存为什么文件,都一样执行。3、xxx.asp(随便你保存成什么文件)&%filepath=request.servervariables("script_name")%&&a href="&%=filepath%&?bookname=《asp教程》"&《asp教程》&/a&&br&&a href="&%=filepath%&?bookname=《jsp教程》"&《jsp教程》&/a&&br&&a href="&%=filepath%&?bookname=《xsp教程》&bookname=《xml》"&《xsp教程》&/a&&br&you chosed &%=request.querystring("bookname")%&先将当前文件的地址取出并赋值给变量filepath,然后所有的链接地址开头都只要直接引用该变量就OK了。是不是很有用,有点万能的感觉。四、Request.Cookies("name")不用我说,Cookie是个很重要的东西,究竟如何,等我们学完了下面的对象Response后,会有个特别Cookie的专题讲座。  以上四则运用,属于Request对象的所包含的四个对象集合:form、querystring、servervarivables、cookies。当然还有个ClientCertificate就不说啦一个ASP内置对象除了对象集合外还有对象属性、对象方法Request对象的对象属性只有一个就是TotalBytes(接受的字节数),你可将&%=request.totalbytes%&该语句加入到任何一个接受数据的ASP页面中进行显示了。Request对象的对象方法也还是一个:BinaryRead 。& &说实话,这东东不常用,我也没用过,呵呵。OK~!有关Request对象的学习就差不多了,最主要是先好好理解三个对象集合,cookies不着急,下节继续学习对象Response。ASP编程入门进阶(五):内置对象Response&通过对Request对象的学习,可以了解到,Request对象是服务器端用来获取客户端的信息的。但作为服务器和客户端进行交互,是不是还缺少服务器端向客户端发送信息呢?对象Response正是担任此责任。负责将信息传递给用户的对象就是Response了,它可动态地响应客户端的请求,并将动态生成的响应结果返回给客户端浏览器。一、Response.write&&write方法是使用最频繁的一个了,write就是写:将指定的字符串写到当前 HTTP 输出。1、write.asp &% response.write ("hello,world"&"&br&")Randomize  response.write "任意数是"&rnd()&"&br&" %&response.write后面为所显示的信息,可以用括号包含,也可以直接书写(注意和response.write之间有空格)。& & 书写的字符串信息或者HTML代码相关,用引号包含;而ASP本身的函数或变量则不需要,直接用即可。并且无论字符串信息、HTML代码、函数还是变量之间进行连接都是采用&号(针对vbscript)& & 以上遇到一个随机函数rnd(),该函数返回一个小于 1 但大于或等于 0 的值。需要注意的是在调用 Rnd 之前,先使用无参数的 Randomize 语句初始化随机数生成器,该生成器具有基于系统计时器的种子。若缺少Randomize,则无法继续生成随机种子。下面一个利用随机函数的例子,产生随机背景颜色效果:当然要产生指定范围的随机整数,请使用以下公式:&Int((upperbound - lowerbound + 1) * Rnd + lowerbound)这里, upperbound 是此范围的上界,而 lowerbound 是此范围内的下界。随机函数在做考试系统的时候非常有用,当然你也可以用来自己摇奖,拿个头彩也分点我就行了二、Response.end这是Response常用的一种方法,使 Web 服务器停止处理脚本并返回当前结果,文件中剩余的内容将不被处理。主要放在一页多功能的ASP页中,为让程序运行到此,抑或往下的程序没必要再执行显示&&2、end.asp &%response.write now()response.end& && && && &'程序执行显示到此结束 response.write rnd() %&三、Response.clear该方法主要作用是清除缓冲区中的所有 HTML 输出,但该方法只清除响应正文而不清除响应标题。该方法和end方法似相反,end是到此结束返回上面的结果,而clear却是清除上面的执行,然后只返回下面的结果。3、clear.asp &%response.write now()response.clear& && && &&&'以上程序到此全被清除 response.write rnd()%&下面通过一个例子来仔细看看end and clear4、end2clear.asp &% filepath=request.servervariables("script_name")user=Request.Form("username")pwd=Request.Form("password") %&&form method="POST" action="&%=filepath%&"&name:&input type="text" name="username"&&br&pwd:&input type="password" name="password"&&br&&input type="submit" value="submit"&&/form& &% If user="cnbruce" and pwd="cnbruce" Then& &&& &response.write "采用clear方法,上面的程序结果将清除。"& &response.clear& &&&' 清空存储在缓存中的页面Else & &response.write "采用end方法,下面的程序将停运。"& &Response.End ' 立即停止脚本处理,并将缓存中的页面输出&&End If %&如果你只看到&刷新&链接就表明clear方法已经生效&br&&a href="&%=filepath%&"&刷新&/a& 以上程序中,当输入用户名和密码同为cnbruce的时候会发现clear方法的处理结果,反之是另外一个效果。四、Response.redirect方法是让浏览器立即重定向到程序指定的URL地址。这在根据客户的不同响应,为不同的客户指定不同的页面,或根据不同的情况指定不同的页面时,显得非常重要。该方法是立即生效的,在其后的脚本都不执行。5、redirect.asp &%response.redirect("/")%&以上四则运用属于Response对象的几个比较重要的方法:write、end、clear、redirect当然方法还有:AddHeader、AppendToLog、BinaryWrite、Flush&&早说过,一个ASP对象除了对象方法外,还有对象属性,那response对象的属性有哪些呢?五、Response.ContentType ContentType 属性指定服务器响应的 HTTP 内容类型。如果未指定 ContentType,默认为 text/html。6、contenttype.asp(非text/html的)&% Response.ContentType = "text/HTML" %&&% Response.ContentType = "image/GIF" %&&% Response.ContentType = "image/JPEG" %&&% Response.ContentType = "text/plain" %&&% Response.ContentType = "image/JPEG" %&六、Response.charsetCharset 属性将字符集名称附加到 Response 对象中 content-type 标题的后面,用来设置服务器响应给客户端的文件字符编码。7、charset.asp &% Response.charset = "big5" %&中文显示,但采用的big5繁体的编码,所以看到的是乱码。当然Response.ContentType和Response.charset应用得比较少了。直接在head头部属性里面添加就OK了。七、Response.expires 该属性指定了在浏览器上缓冲存储的页,距过期还有多少时间。如果用户在某个页过期之前又回到此页,就会显示缓冲区中的页面。但若设置 response.expires=0,则可使缓存的页面立即过期。这是一个较实用的属性,当客户通过 ASP 的登陆页面进入WEB 站点后,应该利用该属性使登陆页面立即过期,以确保安全。引用一个经典的例子例8、expires.asp &%Response.Expires = 0&Response.Expiresabsolute = Now() - 1&Response.AddHeader "pragma","no-cache"&Response.AddHeader "cache-control","private"&Response.CacheControl = "no-cache"  %&&八,Response.status设置服务器要响应的状态行的值。Response.status="状态描述字符串",字符串可以为一个三位整数或一串说明文字组成,但必须放在&html&之前。例9 、status.asp &% Response.Status = "401 Unauthorized" %&九,Response.buffer 比较重要的一个,值为true or false。该属性指示是否缓冲页输出。引用:当缓冲页输出时,只有当前页的所有服务器脚本处理完毕或者调用了 Flush 或 End 方法后,服务器才将响应发送给客户端浏览器,服务器将输出发送给客户端浏览器后就不能再设置 Buffer 属性。因此应该在 .asp 文件的第一行调用 Response.Buffer。 Response.buffer=true。对于Response对象的属性和方法先到这里,剩下一个数据集合,即cookie。继续看cookies讲座吧。ASP编程入门进阶(六):Cookies讲座&什么是 Cookie?Cookie其实是一个标签,经常可能听到的中文翻译:小舔饼。当你访问一个需要唯一标识你的站址的 WEB 站点时,它会在你的硬盘上留下一个标记,下一次你访问同一个站点时,站点的页面会查找这个标记。&& 每个 WEB 站点都有自己的标记,标记的内容可以随时读取,但只能由该站点的页面完成。每个站点的Cookie与其他所有站点的Cookie存在同一文件夹中的不同文件内(你可以在 win2k&&Documents and Settings 文件夹下特定用户的 cookies 文件夹中)。  一个 Cookie 就是一个唯一标识客户的标记,Cookie 可以包含在一个对话期或几个对话期之间某个 WEB 站点的所有页面共享的信息,使用 Cookie 还可以在页面之间交换信息。这项功能经常被使用在要求认证客户密码以及电子公告板、WEB 聊天室等 ASP 程序中。  尽管现在听起来cookie没有什么激动人心的,但实际上利用它,你能实现许多有意义的功能!比如说:你可以在站点上放置一个调查问答表,询问访问者最喜欢的颜色和字体,然后根据这些定制用户的web界面。并且,你还可以保存访问者的登录密码,这样,当访问者再次访问这个站点时,不用再输入密码进行登录。&  当然,cookie也有一些不足。首先,由于利用cookie的功能可以编程实现一些不良企图,所以大多数的浏览器中都有安全设定,其中可以设置是否允许或者接受cookie(IE浏览器中&工具&--&Internet选项...&--&安全&--&自定义级别&--&Cookie的使用&;Netscape浏览器中&工具&--&Cookie管理器&--&管理贮存的Cookie&即可),因此这就不能保证随时能使用cookie。再者,访问者可能有意或者无意地删除cookie。当访问者的机器遇到&蓝屏&死机时,或者重新格式化硬盘、安装系统后,原来保存的cookie将全部丢失。最后一点,有一些最初始的浏览器并不能支持cookie。&◆ 怎样利用cooklie? 有2种使用cookie的基本方式:1、将cookie写入访问者的计算机(使用 Response 命令)2、从访问者的计算机中取回cookie(使用 Request 命令)◆ 创建cookie的基本语法: Response.Cookies(cookie)[(key)|.attribute]=value这里的 cookie 是指定 cookie 的名称。而如果指定了 key,则该 cookie 就是一个字典。(测试一cookie是否为一个字典可用后面代码显示布尔值:&%=Request.Cookies("cookiename").HasKeys%&。为true是字典,false则不是。 )Attribute 指定 cookie 自身的有关信息。Attribute 参数可以是下列之一 :&①Domain 若被指定,则 cookie 将被发送到对该域的请求中去。域属性表明cookie由哪个网站产生或者读取,默认情况下,cookie的域属性设置为产生它的网站,但你也可以根据需要改变它。(Response.Cookies("CookieName").Domain = "")②Path 为路径属性,该属性可以实现更多的安全要求,通过设置网站上精确的路径,就能限制cookie的使用范围。如果未设置该属性,则使用应用程序的路径。(Response.Cookies("CookieName").Path = "/maindir/subdir/path" )③Expires 指定 cookie 的过期日期。为了在会话结束后将 cookie 存储在客户端磁盘上,或在许多时候,我们希望能更长时间地在访问者的计算机上保存cookie。必须设置该日期。若此项属性的设置未超过当前日期,则在任务结束后 cookie 将到期。后面的代码,就可以设置cookie的使用到期时间为&日&: Response.Cookies("CookieName").Expires=#January 01, 2010#后面的代码,将设定cookie的过期时间为&cookie的创建时间+365天&:Response.Cookies("CookieName").Expires=Date+365但最好不要随便写 Response.Cookies("CookieName").Expires=Date,这样页面之间的调用时值会为空。执行下面的代码将会在访问者的计算机中创建一个cookie,名字=VisitorName,值=Ken : Response.Cookies("VisitorName")="Ken"  执行下面的代码将会在访问者的计算机中创建一个cookie,名字=VisitorName,值=表单中UserName的值Response.Cookies("VisitorName")=Request.Form("UserName")你可以扩展下面的代码成为Cookie子关键值(CookieSubName),即cookie字典的生成。代码如下:Response.Cookies("VisitorName")("FirstName")="Ken"&Response.Cookies("VisitorName")("LastName")="Baumbach"&◆ 读取cookie的基本语法:Request.Cookies(cookie)[(key)|.attribute]cookie 指定要检索其值的 cookie。&key 可选参数,用于从 cookie 字典中检索子关键字的值。&attribe 指定 cookie 自身的有关信息。如:HasKeys 只读,指定 cookie 是否包含关键字。如果客户端浏览器发送了两个同名的 cookie,那么 Request.Cookie 将返回其中路径结构较深的一个。例如,如果有两个同名的的 cookie,但其中一个的路径属性为 /www/ 而另一个为 /www/home/,客户端浏览器同时将两个 cookie 都发送到 /www/home/ 目录中,那么 Request.Cookie 将只返回第二个 cookie。案例分析:◆ num.asp(通过留在本地磁盘上的cookie记录一年内访问本站的次数,第一次显示&首次访问&,以后显示&第几次访问&)&% dim num num=request.cookies("visitnum")if num & "0" thennum=num+1Response.write "您已是第"&num&"次访问本站点了。"Else Response.write "欢迎您首次访问本站。"num=1 end ifresponse.cookies("visitnum")=numresponse.cookies("visitnum").expires=date+365 %&&◆ showcookie.asp(从Cookies文件夹中遍历出浏览器所有的Cookie name,以及相关的字典Cookie的显示(蓝字显示))&&&% For each cookie in Request.Cookiesif Request.cookies(cookie).HasKeys =false thenResponse.write cookie & "=" & Request.Cookies(cookie)Response.write ("&br&")  Elsefor each key in Request.Cookies(cookie)Response.write ("&font color=blue&")Response.write cookie & ".("&key&")" & "=" & Request.Cookies(cookie)(key)Response.write ("&/font&&br&") Next end if next  %&&◆ check.asp '首先,设置页面。然后,检查表单变量(在同一个页面中)。如果表单变量存在,就创建cookie,并设置到期时间。&%@ LANGUAGE="VBSCRIPT" %& &%&bgcolor = Request.Form("bgcolor")fgcolor = Request.Form("fgcolor")pwd = Request.form("pwd")If bgcolor &&"" or fgcolor &&"" thenResponse.cookies("check")("bgcolor") = bgcolorResponse.Cookies("check")("fgcolor") = fgcolorResponse.Cookies("check")("pwd") = pwdResponse.Cookies("check").Expires=#may 01, 2004#&&End if '接着,读取cookiebgcolor = request.cookies("check")("bgcolor")fgcolor = request.cookies("check")("fgcolor")pwd = request.cookies("check")("pwd")'如果cookie在访问者的计算机上不存在,就创建一个表单,询问相关信息If bgcolor ="" and fgcolor ="" and pwd="" then  %&&HTML& &HEAD& &/HEAD&&body&&DIV ALIGN="CENTER" &&Form action="check.asp" method="POST"&Bgcolor: &input type="text" name="bgcolor"&&BR&Fgcolor: &input type="text" name="fgcolor"&&BR&Password:&input type="password" name="pwd"&&BR&& & &input type="submit" value="Submit"& &/Form&&/DIV&&/BODY&&% End if'如果cookie已经存在,并且bgcolor存在,就跳转到color.asp。&If bgcolor && "" then&&Response.Redirect "color.asp"  End if  %&◆ color.asp(显示用户爱好颜色的页面特性)&% bgcolor=request.cookies("check")("bgcolor")fgcolor=request.cookies("check")("fgcolor")pwd=request.cookies("check")("pwd") %&&%response.write("&body bgcolor="&bgcolor&"&&font color="&fgcolor&"&")%&你的密码是: &%response.write(" "&pwd&" ")%&ASP编程入门进阶(七):内置对象Server&Server 对象提供对服务器上的方法和属性的访问 , 其大多数方法和属性作为实用程序的功能服务(IIS HELP翻译)。有了 Server 对象,你就可以在服务器上启动 ActiveX 对象例程,并使用 Active Server 服务提供象 HTML 和 URL 编码这样的函数。一、Script.ScriptTimeout在脚本运行超过一段时间之后,即作超时处理。服务器一般的默认脚本运行时间是90秒。你可以从&Internet信息服务&中&默认Web站点&的属性弹出框中看出,你也可以自己设定。呵呵,上面的可不是,900秒了。应该是&主目录&标签中的&配置&对话框中,WINXP一样。在理解脚本运行时间之前,先来看一个程序,主要功能就是进行计算网页执行时间的。当然对应的ASP也就是看到许多站点都有的页面执行时间显示1、time.asp  &%startime=timer()%&&a href=#bot&到下面看执行的时间&/a& &%for i= 1 to 5000response.write("&hr width="&int(500+i)&"&")&&next %&当然中间还可以添加其它内容。&br& &%endtime=timer()%& &a name=bot&&/a&&%=FormatNumber((endtime-startime)*1000,3)%&毫秒那如果上面的程序变成for i= 1 to 5000000呵呵,是不是机器快反应不过来的感觉,那这个就是脚本的执行时间了。为了让程序能很好的执行,就该把脚本执行时间放长了。怎么放长?&&%Server.ScriptTimeout=110%&时间的设定当然是比默认90秒大的,现在的代码就是:指定服务器处理脚本在 110 秒后超时。还有,脚本时间的确定要看自身的程序了,一般情况100秒左右也差不多了,即使能执行出来,可能观看网页的人早就把它叉叉了。以上的ScriptTimeout就是Server对象唯一属性了二,Server.HtmlEncode HtmlEncode就是Server对象的其中一个方法了。它允许你对特定的字符串进行 HTML 编码,虽然 HTML 可以显示大部分你写入 ASP 文件中的文本,但是当你需要实际包含 HTML 标记中所使用的字符,就会遇到问题。这是因为,当浏览器读到这样的字符串时,会试图进行解释。还是看一个程序,我想在页面显示&&&这样的代码(附:&是空格的代码)那么当我进行书写的时候你会发现,浏览器已经给我解释了的。所以,为了要让一些特殊代码能够显示,就运用该方法了。2,htmlencode.asp &%Response.write ("这是没有采用 HTMLEncode 方法的测试。&br& 这里就另起一行,说明代码被执行。&")%& &hr&&%Response.write Server.HtmlEncode("这是对 HTMLEncode 方法的测试。&br& 这里应该不会另起一行,也就是代码没有被执行了。&")%&这在许多网站,论坛都存在的一些BUG,不信你可以到各论坛试试:敲入&就是没有,急死你呢:)当然HtmlEncode只是其中的一个原因,最主要的还是UBB代码的转换。不过关于这点我也已经调试解决了。调试地址参看 /juven/showart.asp当然经典论坛不存在这问题,要不你也不会看到效果了。三,Server.UrlEncode正如 HtmlEncode 方法使客户可以将字符串翻译成可接受的 HTML 格式一样,Server 对象的 UrlEncode 方法则是根据 URL 规则对字符串进行正确编码,当字符串数据以 URL形式传递到服务器时,在字符串中不允许出现空格,也不允许出现特殊字符。为此,如果你希望在发送字符串之前进行 URL 编码,可使用 Server.URLEncode 方法。为方便起见,我们先看为处理送交,然后处理接受的效果。3,urlencode.asp &%filepath=request.servervariables("script_name")%&接受URL中的值(没有处理接受值,发现值被解释了): &%=request.querystring("cnbruce")%&&form action="&%=filepath%&"&你可以输入&&hr&gt&等代码看看:&input type="text" size="20" name="cnbruce"&&input type="submit"&&/form&接受URL中的值(进行了urlencode编码,不会执行): &%=Server.URLEncode(request.querystring("cnbruce"))%&当然你会发现,虽然不执行了,但会出现&&&变成了&%3C&,&&&变成了&%3E&,那这就是因为没有在发送之前处理。不过,我们还可以通过Replace函数将这些特殊代码再逆转过来。4,vurlencode.asp &% function tihuan(what)tihuan=whatif not isnull(what) thentihuan=replace(tihuan,"%3C","&")tihuan=replace(tihuan,"%3D","=")tihuan=replace(tihuan,"%3E","&")tihuan=replace(tihuan,"%26","&")tihuan=replace(tihuan,"空格我不知道,呵呵。哪个告诉我下:)","&")tihuan=replace(tihuan,"%3B","&#59;")tihuan=replace(tihuan,"%22",""")tihuan=replace(tihuan,"%2B","+")tihuan=replace(tihuan,"%2F","/")end if end function %&&%filepath=request.servervariables("script_name")%&接受URL中的值(没有处理接受值,发现值被解释了): &%=request.querystring("cnbruce")%&&form action="&%=filepath%&"&你可以输入&&hr&gt&等代码看看:&input type="text" size="20" name="cnbruce"&&input type="submit"&&/form& 接受URL中的值(进行了urlencode编码,不会执行): &%=tihuan(Server.URLEncode(request.querystring("cnbruce")))%&呵呵,其实上面我是做的无用功啦,真正应该是在发送之前就该处理下的,不过对学习该方法的举例确是个好方法:)四,Server.MapPath 相信看过我写的《DW2ASP系列》的朋友,都卡在这个上了。DW毕竟是入门的好东西,但要系统学ASP编程,对这个就该好好认识了解下。MapPath方法,具体的就是将指定的相对或虚拟路径,映射到服务器上相应的物理目录上。用法,也就是语法了,如下: Server.MapPath(Path)Path 指定要映射物理目录的相对或虚拟路径。若 Path 以一个正斜杠 (/) 或反斜杠 (/) 开始,则 MapPath 方法返回路径时将 Path 视为完整的虚拟路径。若 Path 不是以斜杠开始,则 MapPath 方法返回同本文件中已有的路径相对的路径。这里需要注意的是 MapPath 方法不检查返回的路径是否正确或在服务器上是否存在。当然这可以和Request.ServerVariables连起来使用看看。5,mappath.asp Request.ServerVariables("APPL_PHYSICAL_PATH") : &%=Request.ServerVariables("APPL_PHYSICAL_PATH")%&&p&Request.ServerVariables("PATH_INFO") : &%=Request.ServerVariables("PATH_INFO")%&&p&Request.ServerVariables("SCRIPT_NAME") : &%=Request.ServerVariables("SCRIPT_NAME")%&&p&Request.ServerVariables("URL") : &%=Request.ServerVariables("URL")%&&p&Request.ServerVariables("PATH_TRANSLATED") : &%=Request.ServerVariables("PATH_TRANSLATED")%&&hr&上面都是通过ServerVariables提取得出的值,下面就来运用mapath把一个虚拟地址转变为实际的物理地址。&p&Server.MapPath(Request.ServerVariables("URL")) :&%=Server.MapPath(Request.ServerVariables("URL"))%&&p&或者自己随便写个不存在的路径,同样能够执行&p&Server.MapPath("cnbruce.asp") : &%=Server.MapPath("cnbruce.asp")%&&p&再来个&/&的&p& Server.MapPath("/cnbruce.asp") : &%=Server.MapPath("/cnbruce.asp")%&&br&Server.MapPath("/cnbruce.asp") : &%=Server.MapPath("/cnbruce.asp")%&&p&你会发现物理地址转变到IIS默认根目录下面了。这就是如6to23之类的站点mappath的问题所在。还是虚拟主机好,即使是根,也还是自己站点的默认存放节点根。&注意测试的地址和根目录下的地址,对应的是同一文件夹(这就是虚拟主机),6to23之类是不会相同的。有此些了解,对路径的处理应该要好多了,再返回我的站点,看看我对数据库的mappath路径的处理方法,相信又是一个理解层次了。五、Server.CreatObject  这个方法恐怕是 ASP 中最为实用,也是最强劲的功能了。它可用于创建已经注册到服务器上的 ActiveX 组件实例。这是一个非常重要的特性,因为通过使用 ActiveX 组件能够使你轻松地扩展 ActiveX 的能力,正是使用了 ActiveX 组件,你可以实现至关重要的功能,譬如数据库连接、文件访问、广告显示和其他 VBScript 不能提供或不能简单地依靠单独使用 ActiveX 所能完成的功能。也正是因为这些组件才使得 ASP 具有了强大的生命力。那今天就主要把Server对象学习了下,感觉好象是每个都有用的,重要啊。还有,需要说明的,如果您从本处转载,发现和本源件有差错,比如代码& 、 &lt 、 &gt等等,根本就是被执行了的。都说明您的站点存在着这些问题。ASP编程入门进阶(八):内置对象Session&ASP对象中除了用于发送(Response)、接收和处理数据(requeest)、服务器访问(Server)的对象外,还有一些非常实用的标记Active Server应用程序(Application)和单个用户信息(Session)的对象。Session对象 该对象在ASP使用中占相当大的比例。由于网页是一种无状态程序,无法得知用户浏览状态。在ASP中,通过Session对象来记录使用者私有的数据变量,以作为用户再次对服务器提出要求时做确认,用户在程序的Web页面之间跳转时,存在Session对象中的变量将不会消失。这些是很重要的功能,尤其是有会员的系统必须要用到的。像是会员的登入账号、时间、状态以及许许多多该记录的实时数据(如购物系统记录使用者的购物篮内的商品),这些信息属于各使用者私人所需要,通常开发者都是使用 Session 记录处理。& & 在ASP中的Session是使用Cookies构成,服务器将所有的Session内记录的数据,以Cookies的方式传至用户的浏览器。通常一般浏览器会将这些Cookies存起来,每当使用者点选连结,再次与服务器做联机时,浏览器就会把这些Cookies传回Server供做处理:这即是Session的运作原理。由此可知会话状态Session仅在支持cookie的浏览器中保留,如果客户关闭了Cookie 选项Session也就不能发挥作用了。一、Session.SessionID  属性返回用户的会话标识。在创建会话时,服务器会为每一个会话生成一个单独的标识,会话标识以长整形数据类型返回。在很多情况下 SessionID 可以用于 WEB 页面注册统计。& & 利用该属性可以解决一种对用户的控制问题。该问题的主要功能就是,针对某个网站的一个模块,当一个会员登录后正在看此模块时,另一个人用同样的会员名登录,就不能浏览这个模块:也就是说一个会员名同时只能一个人浏览此模块。& & 通过用会员名(假设为UserID,唯一)和SessionID来实现了控制。当会员登录时,给这个会员一个Session记录登录状态如:Session("Status")="Logged",同时把这个会员的Session.SessionID写入数据库。当他要浏览此模块时,先判断其是否登录,若已经登录再判断它的SessionID是否与数据库记录的相同,如果不同则不能访问。& & 这样,当另一个用户用相同的会员名登录时,那么数据库中记录的就是新的SessionID,前者访问此模块时就不能通过检查。这就实现了一个会员名同时只能一个人浏览某个模块。这个功能在一些收费网站有很有特别作用,它防止了一个会员名给多个人浏览的问题,为公司保障了利益。&%=Session.SessionId%& 是单独生成的唯一ID标识,可刷新调试。二、Session.TimeOut 该属性设置的Session的最大间隔时间。间隔时间是指客户器端从最近一次向Web服务器提出要求,到下一次向Web服务器提出要求的时间。可以理解为:如果用户在该超时时限之内不刷新或请求网页,则该会话将终止。Timeout 属性是以分钟为单位,为该应用程序的Session对象指定超时时限的,一般默认为20分钟。这在网吧等公共场所,登录个人信息页而忘记关闭窗口时,显得比较重要(至少可以把时间设短些)。&%=Session.TimeOut=10%&以上SessionId、TimeOut属于Session对象的两个属性,下面看该对象的一个方法Session.Abandon 该方法是Session对象的唯一方法,可以清除Session对象,用来消除用户的Session对象并释放其所占的资源。当然你如果没有明确调用Abandon方法,一旦会话超时,服务器也会将删除这些对象并释放资源。下面就用两个页的程序来认识Session对象以及Abandon方法的利用。1,login.asp &%'提取url中变量loginout的值是否为true,若为真,就执行Session.Abandon()。if Request.QueryString("loginout")="true" then& && &Session.Abandon()end if  '只有在当点击了submit按钮的前提下,再来判断提取的东西都不为空,则建立Session对象。submitname=request.form("submit1")if submitname="submit" then& & if Request.Form("name")&&"" and Request.Form("pwd")&&"" then& && &&&Session("name")=Request.Form("name")& && &&&Session("pw")=Request.Form("pwd")& & end if end if %& &%'如果Session("name")不为空,则显示它的值,并且做一个到info.asp的链接。if Session("name")&&"" thenresponse.write("你的name值是:"&Session("name"))response.write("&br&&a href='info.asp'&显示你的资料&/a&")else '否则,即Session("name")为空不存在,则显示表单用以输入建立Session的平台。%& &form action="login.asp" method="post"&姓名:&input type="text"& &&&name="name"&&br&密码:&input type="password" name="pwd"&&br&&input type="submit" value="submit" name="submit1"&&/form&&!--同样做了一个到info.asp的链接。--&&a href="info.asp"&显示你的资料&/a&&%end if%&注意Session("name")为空和不为空的时候,都做了一个到info.asp的链接,具体调试结果如何,再来看info.asp的内容。2,info.asp &% '如果session对象值为空则跳转到login.aspif session("name")="" then& & & &Response.Redirect("login.asp")'否则就显示个人信息Else & & & &Response.Write("你的姓名:"&session("name")&"&br&")& & & &Response.Write("你的密码:"&session("pw")&"&br&")end if %&&a href="login.asp"&返回&/a&&a href="login.asp?loginout=true"&退出&/a&可以看出来,info.asp页面内容的显示其实是需要条件的。那就是必须得有一个session值的存在,这样才可以显示具体的信息。这在登录系统中运用得比较多。你可以把login.asp想象成一个登录窗口,当然我的这个比较简单(只要输入用名和密码就生产Session了),实际情况是:判断输入的用名和密码是否和数据库中的用名和密码吻合,如果正确吻合才生成Session的。然info.asp页面的作用刚好可以做为一权限页面,因为进入该页需要Session,而Session的产生是确保用名密码正确的。所以当一开始出现表单窗口时,你点login.asp链接是打不开的,只有当提交了表单生成了Session后才能进入。这正是登录系统的精髓所在,Do You Know?:)四、Session_OnStart Session_OnStart属于Session对象的一类事件。它是在服务器创建新会话时发生的。服务器在执行请求的页之前先处理该脚本。Session_OnStart 事件是设置会话期变量的最佳时机,因为在访问任何页之前都会先设置它们。对象的例程每一次启动时触发Session_OnStart事件,然后运行Session_Onstart事件的处理过程。也就是说,当服务器接收到应用程序中的URL的HTTP请求时,触发此事件,并建立一个Session对象。当然说到Session_OnStart事件就不能不谈到一个文件Global.asa(P.S:我打算把该文件和Chat程序放在一起说的,所以现在先不作过多解释)具体用法先透露,写在Global.asa文件内部&SCRIPT RUNAT=Server Language=VBScript&.......Sub Session_OnStart.......End Sub.......&/SCRIPT&五、Session_OnEnd一看也就知道是Session对象的另一类事件了。当调用Session.Abandon方法时或者在TimeOut的时间内没有刷新,这会触发Session_OnEnd事件,然后执行里面的脚本。同样具体用法在后面将写的Global.asa文件专题中详细介绍到,简单语法如下:&SCRIPT RUNAT=Server Language=VBScript&.......Sub Session_OnEnd ....... End Sub....... &/SCRIPT&以上就是对Session对象的系统学习。ASP编程入门进阶(九):内置对象Application&在Web应用程序中,当一个用户访问该应用时,Session类型的变量可以供这个用户在该Web应用的所有页面中共享数据;如果另一个用户也同时访问该Web应用,他也拥有自己的Session变量,但两个用户之间无法通过Session变量共享信息,而Application类型的变量则可以实现站点多个用户之间在所有页面中共享信息。可以理解Session是局部变量,而Application则为全局变量。在同一虚拟目录及其子目录下的所有 .asp 文件构成了 ASP 应用程序。我们非但可以使用 Application 对象,在给定的应用程序的所有用户之间共享信息,并在服务器运行期间持久的保存数据。而且,Application 对象还有控制访问应用层数据的方法和可用于在应用程序启动和停止时触发过程的事件。一、Application("name")=Value正如Session("name")=value一样,Application对象也没有内置的属性。当然用户可以自定义属性,该属性也可称为集合。  一旦分配

我要回帖

更多关于 absolute legends 的文章

 

随机推荐