新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> XML网站展示,XML源代码,XML编程示例。 本版仅接受原创、转贴、网站展示,具体的技术交流请前往各相关版块。
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 XML源码及示例(仅原创和转载) 』 → XML在ASP中的一些运用[转帖] 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 21520 个阅读者浏览上一篇主题  刷新本主题   平板显示贴子 浏览下一篇主题
     * 贴子主题: XML在ASP中的一些运用[转帖] 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     咖啡心情 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:6
      积分:146
      门派:XML.ORG.CN
      注册:2005/12/9

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给咖啡心情发送一个短消息 把咖啡心情加入好友 查看咖啡心情的个人资料 搜索咖啡心情在『 XML源码及示例(仅原创和转载) 』的所有贴子 引用回复这个贴子 回复这个贴子 查看咖啡心情的博客楼主
    发贴心情 XML在ASP中的一些运用[转帖]

    翻译得很蹩脚,望大家谅解,呵呵。
    Scriptlets - 一个更好的组织你的ASP代码的方法
    使用可扩展标志语言(XML)编写的脚本和组件和.XML被用来定义对象,方法,属性等等。
    同时脚本还提供函数。脚本语言可以是javascript, vbscript等等。运用在网站的运用程序和网站的
    普通例子,现在都可以被转换成scriptlets. 只要使用scriptlets 来写组件,
    他们可以再被从新使用在网站或则运用程序各部分,既可以使用在服务端(例如ASP代码)
    也能够被使用在客户端(例如浏览器)

    这里将集中讨论服务端的用来组件ASP代码的Scriptlets。
    早些时候,ASP开发者习惯写include文件。用来做公共的服务端例行程序,
    还用在他们的网站运用程序中。从功能上说,include文件被局限在仅仅是在页面中引用。
    完成传递参数的功能。
    现在同样的公共例行程序能够中添加了scriptlet方法和并且有助与在运用程序中使用组件。
    这个方法现在非常普遍的运用在网站运用程序中,能够被运行在同一个服务器上的运用程序重用。
    这个方法使得从数据库中获取(pull-down)数据将变得非常通俗化。

    例子:建立scriptlet方法和属性,使得很通俗的从数据库中获取数据。
    并且使得运行在同一个服务器上所有的运用程序使用这个同样的scriptlet,而不用重新写代码了。

    代码如下:
    scriptlet文件名为scp_query2list.sct

    <?XML version="1.0"?>
    <scriptlet>
    <registration
    description="scp_query2list"
    progid="scpquery2list.Scriptlet"
    version="1.00"
    classid="{e32d2a70-4e11-11d3-a9f0-0080c8034244}"
    >
    </registration>

    <public>
    <method name="query2list">
    <PARAMETER name="objConn"/>
    <PARAMETER name="query"/>
    </method>
    </public>

    <implements type="ASP" id="ASP"/>
    <script language="VBScript">

    <![CDATA][
    Sub query2list(objConn, query)
    Dim objRs
    Set objRs = objConn.Execute(query)
    If objRs.EOF AND objRs.BOF Then
    Response.write "<option value='none'>没有找到记录。</option>"
    Else
    Do While Not objRs.EOF
    Response.write "<option value='" & objRS(0) & "'>" & objRs(0) & "</option>"
    objRs.MoveNext
    Loop
    End If
    objRS.Close
    Set objRS = nothing
    End Sub
    ]]>

    </script>
    </scriptlet>
    其中在scriptlets中使用的各种元素的具体说明可以在http://msdn.microsoft.com/scripting处找到。
    下面是怎么具体调用scriptlets的代码:(只要是在同一个服务器上注册了scriptlets的运用程序,都可以使用这段代码)
    query2list.asp 文件:
    <%@ Language=VBScript %>
    <%

    Option Explicit

    Dim objConn
    Dim dbPath
    Dim sql
    Dim objScpQuery2list

    Set objConn = Server.CreateObject ("ADODB.Connection")
    dbPath="DBQ=" & Server.MapPath("techpapers_test.mdb")

    objConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; " & dbPath

    '--- query required for pull down
    sql = "select AuthorFirst from Papers"
    Set objScpQuery2list = Server.CreateObject ("scpquery2list.Scriptlet")
    %>
    <html>
    <body>
    <center>
    <form name = "fr1">
    <select>
    <option value="none" selected>选择发行人</option>
    <% call objScpQuery2list.query2list(objConn, sql) %>
    </select>
    </form>
    </center>
    </body>
    </html>

    <%
    objConn.Close
    Set objConn = nothing
    Set objScpQuery2list = nothing
    %>

    出现的问题:
    第一次使用scriptlets有可能会出现这样的问题,就是内存浪费现象,改进方法如下:
    将ASP对象传递给scriptlets,而代替使用ASP接口。(就是不使用 <implements type="ASP" id="ASP"/>申明)
    testscp.sct:
    <?XML version="1.0"?>
    <scriptlet>
    <?scriptlet error="true" debug="true"?>
    <registration
    description="testscp"
    progid="testscp.Scriptlet"
    version="1.00"
    classid="{78a33aa0-335d-11d3-a9a9-0080c8034244}"
    >
    </registration>

    <public>
    <property name="cnnState">
    <get/>
    </property>
    <method name="TestWrite">
    <parameter name="sHTML"/>
    </method>
    <method name="TestWriteLine">
    <parameter name="sHTML"/>
    </method>
    <method name="ASPConnect">
    <parameter name="oServer"/>
    <parameter name="oApplication"/>
    <parameter name="oSession"/>
    <parameter name="oRequest"/>
    <parameter name="oResponse"/>
    </method>
    </public>
    <script language="VBScript">
    <![CDATA][
    Private cnnState, Server, Application, Session, Request, Response
    cnnState = False

    Function get_cnnState()
    get_cnnState = cnnState
    End Function

    Sub ASPConnect(oServer, oApplication, oSession, oRequest, oResponse)
    Set Server = oServer
    Set Application = oApplication
    Set Session = oSession
    Set Request = oRequest
    Set Response = oResponse
    cnnState = True
    End Sub

    Sub TestWrite(sHTML)
    Response.Write sHTML
    End Sub

    Sub TestWriteLine(sHTML)
    Response.Write sHTML & "<BR>"
    End Sub
    ]]>

    </script>
    </scriptlet>

    传递ASP对象的ASP程序如下:
    testscp.asp代码

    <%
    Set scrip=Server.CreateObject("testscp.Scriptlet")
    if Err then
    Response.Write "<BR>Error:" & Err.Number
    Response.Write "<BR>" & Err.Description
    Response.Write "<BR>" & Err.Source
    Response.End
    End If

    Response.Write "<BR> cnnState=" & scrip.cnnState
    if Err then
    Response.Write "<BR>Error:" & Err.Number
    Response.Write "<BR>" & Err.Description
    Response.Write "<BR>" & Err.Source
    Response.End
    End If

    Response.Write "<BR>Connecting..."
    scrip.ASPConnect Server, Application, Session, Request, Response
    if Err then
    Response.Write "<BR>Error" & Err.Number
    Response.Write "<BR>" & Err.Description
    Response.Write "<BR>" & Err.Source
    Response.End
    End If

    Response.Write "<BR>cnnState=" & scrip.cnnState & "<BR>"
    Response.Write "<BR>Testing ...Write<BR>"

    scrip.TestWriteLine ""
    scrip.TestWrite "This is the first part "
    scrip.TestWrite "and this is the second."

    Response.Write "<BR>Testing ...WriteLine<BR>"
    scrip.TestWriteLine "This is text with a line break."
    scrip.TestWriteLine "And so is this."
    %>
    上面的代码没有包括<implement type = "ASP"/>, 但是仍然可以访问ASP对象。
    因为他们是被当成对象传递给scriptlet.
    下面再给出一个很常用的取时间的狸子:

    scp_dmy.sct
    <?XML version="1.0"?>
    <scriptlet>

    <?scriptlet error="true" debug="true"?>

    <registration
    description="scp_dmy"
    progid="scpdmy.Scriptlet"
    version="1.00"
    classid="{bba68a50-3ae0-11d3-a9c0-0080c8034244}"
    >
    </registration>

    <public>
    <method name = "option_num">
    <PARAMETER name = "num"/>
    </method>
    <method name = "option_month">
    </method>
    <method name = "option_year">
    </method>
    </public>

    <implements type="ASP" id="ASP"/>
    <script language="VBScript">

    <![CDATA][
    Sub option_num(num)
    For i = 1 to num
    If i<10 Then
    x = 0 & i
    Else
    x = i
    End If
    Response.write "<option value = " & x & ">" & x & "</option>"
    Next
    End Sub

    Sub option_month()
    For i = 1 to 12
    If i<10 Then
    x = 0 & i
    Else
    x = i
    End If
    Response.write "<option value = " & x & ">" & MonthName(x,True) & "</option>"
    Next
    End Sub

    Sub option_year()
    For i = -1 To 3
    yy = year(DateAdd("yyyy",i,Date()))
    Response.write "<option value = " & yy & ">" & yy & "</option>"
    Next
    End Sub

    ]]>
    </script>

    </scriptlet>

    Dmy_check.asp: 文件
    <%
    Set scrip = Server.CreateObject("scp_dmy.Scriptlet")
    %>

    <html>
    <head></head>
    <body>

    <form name = "form1">
    从 :
    <select name = "D1">
    <option value="">dd</option>
    <% call scrip.option_num(31) %>
    </select>

    <select name = "M1">
    <option value="">mm</option>
    <% call scrip.option_month() %>
    </select>

    <select name = "Y1">
    <option value="">yy</option>
    <% call scrip.option_year() %>
    </select>
    <BR><BR>

    到 :
    <select name = "D2">
    <option value="">dd</option>
    <% call scrip.option_num(31) %>
    </select>


    <select name = "M2">
    <option value="">mm</option>
    <% call scrip.option_month() %>
    </select>

    <select name = "Y2">
    <option value="">yy</option>
    <% call scrip.option_year() %>
    </select>
    </form>

    <%
    Set scrip = nothing
    %>

    </body>
    </html>
    要记住的是,现在服务器上所有的程序都能够使用这个scriptlet,这能够减少include文件的使用。
    上面的代码还能够增加一些功能,例如使用不同的格式显示日期。
    也就是说如果一个运用程序需要显示dd-mm-yyyy的日期格式,可以在scriptlet中调用各自的函数。

    最后,使用scriptlet的还有一个好处就是,它不象真正的ASP组件,因为真正的ASP组件在注册和取消注册的
    时候都需要你重新启动IIS,而使用scriptlet是不需要这么干的,仅仅是几句代码而已。


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/12/9 8:56:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 XML源码及示例(仅原创和转载) 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/4/28 2:20:43

    本主题贴数10,分页: [1]

     *树形目录 (最近20个回帖) 顶端 
    主题:  XML在ASP中的一些运用[转帖](7784字) - 咖啡心情,2005年12月9日
        回复:  有没有人发个XML的文章发布系统出来呀。(39字) - liuzhijie,2008年8月2日
        回复:  基本看不懂,先研究下。。。(26字) - ykrl089,2007年7月28日
        回复:  [color=Red]█ ☆█ ◢◤◥◣ ███◣ ███◣ █ ☆█  █▅▅█ █▄▄█ █..(228字) - hjx_221,2006年12月31日
        回复:  LZ有没有聊天室的应用的源码?ASP+XML的(37字) - zj2302552,2006年12月14日
        回复:  打个包下载怎么样?(18字) - dahaidao,2006年8月11日
        回复:  很多东西看不懂(14字) - hedoyu1,2006年8月7日
        回复:  还的我慢慢研究,不是很懂!(26字) - microking,2006年7月23日
        回复:  还的我慢慢研究,不是很懂!(26字) - bruceshen,2006年6月19日
        回复:  辛苦了~~~不过我刚学很多不懂(27字) - lunarcy,2006年5月13日
        回复:  辛苦了~~~不过我刚学很多不懂(27字) - lunarcy,2006年5月13日

    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    438.477ms