欢迎光临
我们一直在努力

以前收集的一些资料—XML在ASP中的一些运用

建站超值云服务器,限时71元/月

翻译得很蹩脚,望大家谅解,呵呵。
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)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 以前收集的一些资料—XML在ASP中的一些运用
分享到: 更多 (0)

相关推荐

  • 暂无文章