选择显示字体大小

asp深度揭密(上)

     一、asp基本知识
  
  1.asp是active server pages的简称,是解释型的脚本语言环境;
  2.asp的运行需要windows操作系统,9x下需要安装pws;而nt/2000/xp则需要安装inte.net information server(简称iis);
  3.aspjsp的脚本标签是“<%%>”,php的则可以设定为多种;
  4.asp的注释符号是“'”;
  5.使用附加组件,可以扩展asp的功能。
  
  例子:
  
  helloworld_1.asp
  <%="hello,world"%>
  
  效果:
  hello,world
  
  
  helloworld_2.asp
  <%
  for i=1 to 10
  response.write "hello,world"
  next
  %>
  
  效果:
  hello,world
  hello,world
  hello,world
  hello,world
  hello,world
  hello,world
  hello,world
  hello,world
  hello,world
  hello,world
  
  注意:asp不区分大小写;变量无需定义也可使用,转换方便;语法检查很松。
  
  
  二、asp内置对象的使用:
  
  可以使用下面的任何asp内置对象,而不必在asp脚本中特别声明。
  
  1. request:
  
  定义:可用来访问从浏览器发送到服务器的请求信息,可用此对象读取已输入html表单的信息。
  
  集:
  cookies:含有浏览器cookies的值
  form:含有html表单域中的值
  querystring:含有查询字符串的值
  servervariables:含有头和环境变量中的值
  
  例子:
  
  request_url.asp
  <%
  '获取用户输入,并存入变量
  user_id=request.querystring("user_id")
  user_name=request.querystring("user_name")
  
  '判断用户输入是否正确
  if user_id="" then
  response.write "user_id is null,please check it"
  response.end
  end if
  if user_name="" then
  response.write "user_name is null,please check it"
  response.end
  end if
  
  '打印变量
  response.write user_id&"<br>"
  response.write user_name
  %>
  
  效果:
  当访问http://10.1.43.238/course/request_url.asp?user_name=j时:
  user_id is null,please check it
  当访问http://10.1.43.238/course/request_url.asp?user_name=j&user_id=my_id时:
  my_id
  j
  
  思考:变量是如何在url中传递和被asp页面获取的?
  
  
  request_form.htm
  <style type="text/css">
  <!--
  .input {background-color: #ffffff; border-bottom: black 1px solid;border-left: black 1px solid; border-right: black 1px solid;border-top: black 1px solid; color: #000000;font-family: georgia; font-size: 9pt;color: midnightblue;}
  a:link {color: #1b629c; text-decoration: none}
  a:hover {color: #ff6600; text-decoration: underline}
  a:visited {text-decoration: none}
  -->
  </style>
  
  <center>
  <form name="course" action="request_form.asp" method="post">
  user_id:<input type="text" name="user_id" maxlength="20" class="input"><br><br>
  user_name:<input type="text" name="user_name" maxlength="30" class="input">
  </form>
  <br><br>
  <a href="javascript:document.course.submit();"> 提 交 </a>
  </center>
  
  request_form.asp
  <%
  '获取用户输入,并存入变量
  user_id=request.form("user_id")
  user_name=request.form("user_name")
  
  '判断用户输入是否正确
  if user_id="" then
  response.write "user_id is null,please check it"
  response.end
  end if
  if user_name="" then
  response.write "user_name is null,please check it"
  response.end
  end if
  
  '打印变量
  response.write user_id&"<br>"
  response.write user_name
  %>
  
  注意:form的action的指向,request_form.asp和request_url.asp在源代码上的区别?
  
  2. response:
  
  定义:用来向浏览器回发信息,可用此对象从脚本向浏览器发送输出。
  
  集:
  cookies:在浏览器中加入一个cookie
  
  方法:
  end:结束脚本的处理
  redirect:将浏览器引导至新页面
  write:向浏览器发送一个字符串
  
  属性:
  buffer:缓存一个asp
  cachecontrol:由代理服务器控制缓存
  contenttype: 规定响应的内容类型
  expires:浏览器用相对时间控制缓存
  expiresabsolute:浏览器用绝对时间控制缓存
  
  例子:
  
  response_redirect.asp
  <%
  '去google看看吧
  response.redirect "http://www2.google.com"
  response.end
  %>
  
  
  response_cookies.asp
  <%
  '设置和读取cookies
  response.cookies("time_now")=now()
  response.write request.cookies("time_now")
  %>
  
  效果:
  当访问http://10.1.43.238/course/response_cookies.asp时:
  2002-9-1 16:20:40
  
  
  response_buffer.asp
  <%'response.buffer=true%>
  <a href="a">a</a>
  <%response.redirect "request_form.htm"%>
  
  效果:
  ①.当关闭iis的缓冲功能,访问该页面时出错
  a
  答复对象 错误 'asp 0156 : 80004005'
  头错
  /course/response_buffer.asp,行3
  http 头已经写入到 客户浏览器。任何 http 头的修改必须在写入页内容之前。
  ②.当关闭iis的缓冲功能,去掉文件第一行的注释,则页面重定向成功
  ③.当打开iis的缓冲功能,无论是否去掉文件第一行的注释,页面重定向都成功
  
  3. server
  
  定义:可在服务器上使用不同实体函数,如在时间到达前控制脚本执行的时间。还可用来创建其他对象。
  
  方法:
  createobject:创建一个对象实例
  htmlencode:将字符串转化为使用特别的html字符
  mappath:把虚拟路径转化成物理路径
  urlencode:把字符串转化成url编码的
  scripttimeout:在终止前,一个脚本允许运行的秒数
  
  例子:
  
  server_htmlencode.asp
  <%
  'html encode
  response.write server.htmlencode("a""time_now")
  %>
  
  效果:
  a"time_now
  查看源文件时显示为:a"time_now
  
  思考:为什么不是a""time_now这种效果?源文件是怎么了?
  
  
  server_mappath.asp
  <%
  'mappath
  response.write server.mappath("server_mappath.asp")
  %>
  
  效果:
  g:\asp_www\test\course\server_mappath.asp
  
  思考:如何获取站点根目录的实际路径?如何获取某个目录的实际路径?
  
  
  server_urlencode.asp
  <%
  'url encode
  response.write server.urlencode("a\time_now")
  %>
  
  效果:
  a%5ctime%5fnow
  
  4. application
  
  定义:用来存储、读取用户共享的应用程序信息,如可以用此对象在网站的用户间传送信息,当服务器重启后信息丢失。
  
  方法:
  lock:防止其它用户访问application集
  unlock:使其它用户可以访问application集
  
  事件:
  onend:由终止网络服务器、改变global.asa文件触发
  onstart:由应用程序中对网页的第一次申请触发
  
  例子:
  
  application_counter.asp
  <%
  '一个使用application制作的简单计数器
  application.lock
  application("clicks")=application("clicks")+1
  application.unlock
  
  response.write "您是本站第 "&application("clicks")&" 位访客!"
  response.write "<br><br>您来自 "&request.servervariables("remote_addr")
  %>
  
  效果:
  您是本站第 1 位访客!
  
  您来自 10.1.43.238
  
  思考:本例中lock和unlock有何作用?
  
  5. session
  
  定义:存储、读取特定用户对话信息,如可存储用户对网站的访问信息,当服务器重启后信息丢失。
  
  方法:
  abandon:处理完当前页面后,结束一个用户会话
  
  属性:
  timeout:用户会话持续时间(分钟数)
  
  事件:
  onend:在session timeout时间以外,用户不再申请页面触发该事件
  onstart:由用户对网页的第一次申请时触发
  
  例子:
  
  session_counter.asp
  <%
  '一个使用session制作的简单计数器
  session("clicks")=session("clicks")+1
  
  response.write "您是本站第 "&session("clicks")&" 位访客!"
  response.write "<br><br>您来自 "&request.servervariables("remote_addr")
  %>
  
  效果:
  您是本站第 1 位访客!
  
  您来自 10.1.43.238
  
  思考:既然session和application都能做到计数,那它们之间有什么区别?如果要做到满100重新开始计数如何实现?
  
  三、使用asp操作数据库
  
  1.通过odbc或者ole方式连接的区别?
  
  现在有两种连接数据库的方法。一方面,可以用odbc产生一个连接,这种连接与任何有odbc驱动器的数据库(即基本上是市场上所有的数据库)兼容;另一方面,可以用原始ole db提供商产生一个连接。
  
  该用哪个提供商?尽可能用原始ole db提供商,因为它提供了对数据更有效的访问。microsoft正逐步用ole db取代odbc标准,应该仅仅在没有原始ole db提供商时使用odbc。
  
  ⑴.用odbc方式连接sql server:
  ①.配置odbc
  ②.连接代码:
  conn_odbc.asp
  <%
  set conn = server.createobject("adodb.connection")
  'conn.open "dsn=course_dsn;uid=course_user;pwd=course_password;database=course"
  conn.open "course_dsn","course_user","course_password"
  %>
  注意:在配置mydsn时若指定默认数据库为course则上述代码作用想同,否则第二行的连接方式更有灵活性,可以指定连接某个数据库(当然,前提是course_user对这个数据库有操作权限)。
  
  ⑵.用ole方式连接sql server:
  conn_ole.asp
  <%
  set conn = server.createobject("adodb.connection")
  conn.open "provider=sqloledb;data source=10.1.43.238,2433; uid=course_user;pwd=course_password;database=course"
  %>
  
  2.操作数据库:connection和recordset
  
  联合使用connection和recordset操作数据库,或者只使用connection操作数据库
  
  例子:
  
  ⑴.联合使用connection和recordset操作数据库
  
  use_db_1.asp
  <%
  set conn=server.createobject("adodb.connection") '创建连接数据库的对象
  conn.open "course_dsn","course_user","course_password" '使用该对象连接数据库
  set rs=server.createobject("adodb.recordset") '创建记录集对象
  rs.open "select * from user_info",conn,1,1 '使用记录集对象打开数据库
  if rs.recordcount>0 then '如果有记录
  response.write "user_id user_name<br>"
  for i=1 to rs.recordcount '循环读取所有纪录
  response.write rs("id")&" "&rs("user_name")&"<br>"
  '向浏览器输出纪录的字段
  rs.movenext '指针下移一行
  if rs.eof then exit for '如果到达记录集底部则退出循环
  next
  end if
  %>
  
  效果:
  user_id user_name
  1 ahyi
  3 test
  
  
  ⑵.只使用connection操作数据库
  
  use_db_2.asp
  <%
  set conn=server.createobject("adodb.connection") '创建连接数据库的对象
  conn.open "course_dsn","course_user","course_password" '使用该对象连接数据库
  conn.execute "delete from user_info"
  %>
  
  效果:
  user_info表中所有数据被删除
  
  思考:两种方式有和区别?各应用于什么场合?
  
  3.如何使用事务处理、存储过程视图
  
  ⑴.使用存储过程
  
  ①.定义好存储过程
  
  create procedure [output_1]
  @sid int output
  as
  set @sid=2
  
  create procedure [return_1]
  (@user_name varchar(40),@password varchar(20))
  as
  if exists(select id from user_info where user_name=@user_name and password=@password)
  return 1
  else
  return 0
  
  create procedure [user_info_1]
  (@user_name varchar(40),@password varchar(20))
  as
  select id from user_info where user_name=@user_name and password=@password
  
  create procedure [user_info_2]
  (@user_name varchar(40),@password varchar(20))
  as
  set xact_abort on
  begin transaction
  delete from user_info where user_name=@user_name and password=@password
  commit transaction
  set xact_abort off
  
  create procedure [user_info_3] as
  select * from user_info
  
  ②.在asp中调用
  
  use_proc.asp
  <!-- #include virtual="/adovbs.inc" -->
  <%
  set conn=server.createobject("adodb.connection")
  conn.open "course_dsn","course_user","course_password"
  
  '使用recordset调用带两个输入参数和返回纪录集的存储过程
  'create procedure [user_info_1]
  '(@user_name varchar(40),@password varchar(20))
  'as
  'select id from user_info where user_name=@user_name and password=@password
  response.write "普通的调用方法:<br>"
  set rs=server.createobject("adodb.recordset")
  sql="user_info_1 '"&request.querystring("user_name")&"','"&request.querystring("password")&"'"
  rs.open sql,conn,1,1
  response.write rs("id")&"<br>"
  rs.close
  
  '使用recordset调用无输入参数,返回纪录集的存储过程,可以使用recordcount等属性
  'create procedure [user_info_3] as
  'select * from user_info
  response.write "<br>返回纪录集,可以使用recordcount等属性:"
  sql="exec user_info_3"
  rs.open sql,conn,1,1
  for i=1 to rs.recordcount
  response.write "<br>"&rs("user_name")
  rs.movenext
  next
  rs.close
  set rs=nothing
  
  '使用command调用带输出参数的存储过程
  'create procedure [output_1]
  '@sid int output
  'as
  'set @sid=2
  response.write "<br><br>调用带输出参数的存储过程:<br>"
  set cmd=server.createobject("adodb.command")
  cmd.activeconnection=conn
  cmd.commandtext = "output_1"
  cmd.parameters.append cmd.createparameter("@sid",adinteger,adparamoutput)
  cmd("@sid")=10
  cmd.execute()
  bbb=cmd("@sid")
  response.write bbb&"<br>"
  set cmd=nothing
  
  '使用command调用带两个输入参数和返回值的存储过程
  'create procedure [return_1]
  '(@user_name varchar(40))
  'as
  'if exists(select id from user_info where user_name=@user_name)
  'return 1
  'else
  'return 0
  response.write "<br>调用带两个输入参数和返回值的存储过程:<br>"
  set cmd=server.createobject("adodb.command")
  cmd.activeconnection=conn
  cmd.commandtype = adcmdstoredproc
  cmd.commandtext = "return_1"
  cmd.parameters.append cmd.createparameter("@return_value",adinteger,adparamreturnvalue)
  cmd.parameters.append cmd.createparameter("@user_name",advarchar,adparaminput,40)
  cmd.parameters.append cmd.createparameter("@password",advarchar,adparaminput,20)
  cmd("@user_name")="tuth"
  cmd("@password")="yyuyu"
  cmd.execute()
  rrr=cmd("@return_value")
  response.write rrr
  set cmd=nothing
  
  conn.close
  set conn=nothing
  %>
  
  效果:
  访问http://10.1.43.238/course/use_proc.asp?user_name=ahyi&password=ttt时,出现如下
  
  普通的调用方法:
  12
  
  返回纪录集,可以使用recordcount等属性:
  ahyi
  tet
  tuth
  
  调用带输出参数的存储过程
  2
  
  调用带两个输入参数和返回值的存储过程
  1
  
  注意:若存储过程无参数,则调用的sql语句直接为存储过程名,一个参数为“存储过程名 参数”,若是多个参数,则“存储过程名 参数1,参数2,……,参数n”;如果在sql语句中加入exec,则在返回的记录集中可以使用recordcount等属性;如果想获得存储过程的返回值或输出参数,可以使用command对象。
  
  ⑵.使用事务处理
  
  ①.asp内嵌的事务支持
  
  例子:
  use_transaction_1.asp
  <%
  'asp中使用事务
  set conn=server.createobject("adodb.connection")
  conn.open "course_dsn","course_user","course_password"
  conn.begintrans '开始事务
  
  sql="delete from user_info"
  set rs=server.createobject("adodb.recordset")
  rs.open sql,conn,3,3
  if conn.errors.count>0 then '有错误发生
  conn.rollbacktrans '回滚
  set rs=nothing
  conn.close
  set conn=nothing
  response.write "交易失败,回滚至修改前的状态!"
  response.end
  else
  conn.committrans '提交事务
  set rs=nothing
  conn.close
  set conn=nothing
  response.write "交易成功!"
  response.end
  end if
  %>
  
  ②.数据库级的事务
  
  i.创建存储过程
  
  create procedure [user_info_2]
  (@user_name varchar(40),@password varchar(20))
  as
  set xact_abort on
  begin transaction
  delete from user_info where user_name=@user_name and password=@password
  commit transaction
  set xact_abort off
  
  ii.在asp中调用
  
  use_transaction_2.asp
  <%
  set conn=server.createobject("adodb.connection")
  conn.open "course_dsn","course_user","course_password"
  
  sql="user_info_2 '"&request.querystring("user_name")&"','"&request.querystring("password")&"'"
  
  set rs=server.createobject("adodb.recordset")
  rs.open sql,conn,1,1
  set rs=nothing
  conn.close
  set conn=nothing
  %>
  
  讨论:两种方式的优劣?
  
  ⑶.使用视图
  在数据库中定义好视图之后,在asp中如同使用一个表一样来使用视图
  
  4.一个数据库分页的例子
  
  db_page.asp
  <%
  on error resume next
  set conn=server.createobject("adodb.connection") '创建连接数据库的对象
  conn.open "course_dsn","course_user","course_password" '使用该对象连接数据库
  set rs=server.createobject("adodb.recordset")
  sql="select * from user_info order by id desc"
  rs.open sql,conn,1,1
  
  if rs.recordcount>0 then '如果有记录
  rs.pagesize=2 '每页最多显示2条纪录
  '从url获取当前要显示的页
  page=cint(request("page"))
  '页面参数异常处理
  if page="" then page=1
  if page<1 then page=1
  if page>= rs.pagecount then page=rs.pagecount
  rs.absolutepage=page '当前页为page参数指定的页
  for i=1 to rs.pagesize '根据pagesize参数的大小循环显示当前页中的纪录
  response.write "user_id:"&rs("id")&"<br>"
  response.write "user_name:"&rs("user_name")&"<br><br>"
  rs.movenext '纪录指针下移
  if rs.eof then exit for '如果到达纪录集底部则退出循环
  next
  end if
  
  '显示翻页按钮
  if page>1 then
  response.write "<a href="&request.servervariables("document_name")&"?page=1>第一页</a> "
  response.write "<a href="&request.servervariables("document_name")&"?page="&(page-1)&">上一页</a> "
  end if
  if page<>rs.pagecount then
  response.write "<a href="&request.servervariables("document_name")&"?page="&(page+1)&">下一页</a> "
  response.write "<a href="&request.servervariables("document_name")&"?page="&rs.pagecount&">最后一页</a> "
  end if
  response.write"页码:"&page&"/"&rs.pagecount
  
  '关闭对象,释放内存
  rs.close
  set rs=nothing
  conn.close
  set conn=nothing
  %>
  
  思考:分页过程中使用了哪些额外的属性?
  
  
    


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons