• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    Asp深度揭密(上)

    發布: 2007-7-14 19:37 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 24次 | 進入軟件測試論壇討論

    領測軟件測試網 一、Asp基本知識

    1.Asp是Active Server Pages的簡稱,是解釋型的腳本語言環境;
    2.Asp的運行需要Windows操作系統,9x下需要安裝PWS;而NT/2000/XP則需要安裝Inte.net Information Server(簡稱IIS);
    3.Asp和JSP的腳本標簽是“<%%>”,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
    %>

    思考:分頁過程中使用了哪些額外的屬性?


    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>