欢迎光临
我们一直在努力

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)