随笔-13  评论-5  文章-3  trackbacks-0
  2005年11月17日
关于Adodb.Stream 的使用说明
组件:"Adodb.Stream"

有下列方法:

Cancel 方法
使用方法如下
Object.Cancel
说明:取消执行挂起的异步 Execute 或 Open 方法的调用。

Close 方法
使用方法如下
Object.Close
:关闭对像

CopyTo 方法
使用方法如下
Object.CopyTo(destStream,[CharNumber])
说明:将对像的数据复制,destStream指向要复制的对像,CharNumber为可选参数,指要复制的字节数,不选为全部复制。
 
Flush 方法
使用方法如下
Object.Flush
说明:

LoadFromFile 方法
使用方法如下
Object.LoadFromFile(FileName)
说明:将FileName指定的文件装入对像中,参数FileName为指定的用户名。

Open 方法
使用方法如下
Object.Open(Source,[Mode],[Options],[UserName],[Password])
说明:打开对像,
参数说明:Sourece 对像源,可不指定
Mode 指定打开模式,可不指定,可选参数如下:
adModeRead =1
adModeReadWrite =3
adModeRecursive =4194304
adModeShareDenyNone =16
adModeShareDenyRead =4
adModeShareDenyWrite =8
adModeShareExclusive =12
adModeUnknown =0
adModeWrite =2
Options 指定打开的选项,可不指定,可选参数如下:
adOpenStreamAsync =1
adOpenStreamFromRecord =4
adOpenStreamUnspecified=-1
UserName 指定用户名,可不指定。
Password 指定用户名的密码

Read 方法
使用方法如下:
Object.Read(Numbytes)
说明:读取指定长度的二进制内容。
参数说明:Numbytes指定的要读取的找度,不指定则读取全部。

ReadText 方法
使用方法如下:
Object.ReadText(NumChars)
说明:读取指定长度的文本
参数说明:NumChars指定的要读取的找度,不指定则读取全部。

SaveToFile 方法
使用方法如下:
Object.SaveToFile(FileName,[Options])
说明:将对像的内容写到FileName指定的文件中
参数说明:FileName指定的文件
Options 存取的选项,可不指定,可选参数如下:
adSaveCreateNotExist =1
adSaveCreateOverWrite =2

SetEOS 方法
使用方法如下:
Object.setEOS()
说明:

SkipLine 方法
使用方法如下:
Object.SkipLine()
说明:

Write 方法
使用方法如下:
Object.Write(Buffer)
说明:将指定的数据装入对像中。
参数说明:Buffer 为指定的要写入的内容。
 
WriteText 方法
使用方法如下:
Object.Write(Data,[Options])
说明:将指定的文本数据装入对像中。
参数说明:Data 为指定的要写入的内容。
Options 写入的选项,可不指定,可选参数如下:
adWriteChar =0
adWriteLine =1




有下列属性:
Charset
EOS 返回对像内数据是否为空。

LineSeparator 指定换行格式,可选参数有
adCR =13
adCRLF =-1
adLF =10

Mode 指定或返加模式。

Position 指定或返加对像内数据的当前指针。

Size 返回对像内数据的大小。

State 返加对像状态是否打开。

Type 指定或返回的数据类型,可选参数为:
adTypeBinary =1
adTypeText =2

posted @ 2005-11-17 22:12 登陆不起啦 阅读(289) | 评论 (0)编辑 收藏
小偷是怎样炼成的(asp,小偷,xmlhttp,正则,joyo.com)
作者:blue1019
来源:http://spaces.msn.com/members/blue1019/Blog/cns!1pvHzJ2FFuxbZKKCb2_fpGcA!305.entry
关于
”认真编程“分类写的是一些编程经验,无相关知识将无法看懂。
  
 
这几个月我们的商城建设起来了,“哈尔滨购物网”成了名副其实的购物网。
这时间里相关部门就开始研究其他的购物网,比如当当,卓越。他们想要一份以excel形式存储的包含上述网站的商品信息以便统计、分析。当然卓越、当当没有什么理由把数据都给我们,于是我们想到了“偷”。于是我把周杰伦的七里香放进cd-rom驱动器开始了“盗窃”。
 
一切从www.baidu.com开始,在搜索的文本框里输入“asp 小偷”很多的信息就被检索出来了。我进入了一个叫“ASP小偷(远程数据获取)程序入门教程”的标题:
 
总结了文章的内容得出结论,“偷”其实就是通过微软的XMLHTTP这个COM组件进行的。还好XMLHTTP这个词并不陌生。

我又在baidu上检索到“xmlHTTP技术资料"这条信息。
 
XMLHTTP能干很多事情,但是在这里我们要它干的只是:将指定的网页的HTML代码读出。
如果通过程序读出对方(当当、卓越)的相应HTML代码就好办了,因为商品数据就存储在那庞杂的代码中。

这很简单,我接着写了如下函数:
 
function getBody(infopageurl)
'功能:取得指定网址的html代码
'参数:infopageurl 网页地址
if infopageurl<>"" then
 dim xmlHttp
 set xmlHttp=server.createobject("MSXML2.XMLHTTP")
‘声明XMLHTTP对象
 xmlHttp.open "GET",infopageurl,false
 xmlHttp.send
’上面这两就句就是调用的形式,调用后程序会堵塞在send这句,直到内容被返回。
        getBody=BytesToBstr(xmlhttp.responsebody,"GB2312")‘然后通过xmlhttp.responsebody属性将返回内容读出,这里用到一个BytesToBstr函数将在后面说明。
 set xmlHttp=nothing
end if 
end function
 
关于BytesToBstr,开始返回的结果没有经过这个函数处理,结果返回的汉字是一堆乱码。什么原因就不用深究了。我到www.chinaz.com下载了几个”小偷’的程序,发现里面不约而同的都含有这个函数。大概就是用adodb.stream对结果字符进行了转换。我把它加到我的函数里结果就正常了。
 
Function BytesToBstr(body,Cset)
 dim objstream
 
 set objstream = Server.CreateObject("adodb.stream")
 
 objstream.Type = 1
 
 objstream.Mode = 3
 
 objstream.Open
 
 objstream.Write body
 
 objstream.Position = 0
 
 objstream.Type = 2
 
 objstream.Charset = Cset
 
 BytesToBstr = objstream.ReadText
 
 objstream.Close
 
 set objstream = nothing
End Function

html代码取回来了,我们怎么从中取得需要的数据?答案是正则表达式。
 
正则表达达式就象是一种简单的语言。它用一些特殊的字符模糊地描述一个字符串。然后可以通过程序去检查一个字符串中是否包含你描述的那种字符串,还可以将你描述的字符从一个字符串中取出,这里我们就是利用这个功能来获取需要的数据。
 
举起例子比较容易理解:
* 匹配前面的子表达式零次或多次。例如,zo*(正则表达式) 能匹配 z 、 zoo、zooooo、zoooooooooo
+ 匹配前面的子表达式一次或多次。例如,zo+ 能匹配 zo 以及 zoo,但不能匹配 "z"。
\d 匹配一个数字字符。等价于 [0-9]。  例如, \d+ 可以匹配 1,123,9876
. 匹配除 "\n" 之外的任何单个字符。
? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。
 
下面要做的就是分析商品数据在html代码中存放的特征,然后写出正则表达式将其取出。
例如,joyo商品的市场价格数据在html代码中是这样存储的“市场价:15.00元”,要做的是把以“市场价:”开头,“元”结尾之间的数值取出。下面函数就实现了这个功能:
 
function Topic(sHtmlcode)
'功能:返回joyo.com商品页面的市场价格数值
'参数:shtmlcode 商品页的html代码
Set regEx = New RegExp'建立使用正则表达式的对象
regEx.IgnoreCase =true
regEx.Global = True
regEx.Pattern ="市场价:(.+?)元"设置表达式
Set Matches = regEx.Execute(shtmlcode)'执行表达式将所有符合描述的字符传存放到一个集合里。
for each sMatch in Matches
Topic=sMatch.SubMatches(0)
'submatches(0)带表第一个子匹配,既小括号中的数值
exit for
next 
set regEx=nothing
end function
 
其他的数据也用同样的方法取得。写正则表达式是一个很有趣而且很复杂的工作。期间我遇到写不出来的,就去CSDN.net的论坛去提问,总是可以得到帮助。
 
还有一点要思考的是:是不是这个表达式对所有的商品页面都适用。如果所有的商品都是用一个asp程序显示那就可以,但是joyo.com不是,它的不同分类中html代码的格式是不同的,所以我们要写几个正则表达式来分别匹配不同形式的数据(比如有些页面中市场价格是这样存储的“市场价:<b>15.00</b>元")。

有了这些函数我们就可以用给定的商品网页地址取得相应的数据了。但是这些网站的商品一般都有万余种,如何获取这些地址就不是那么容易了。这个过程因站而异,这也是真正需要“小偷”智慧的工作之一。
 
拿joyo.com进行分析。进入首页之后我发现里面有个”产品搜索“,选择“所有类别”,关键字置空,点击那个”GO!"检索出了21684条记录。这应该就是joyo.com的所有商品信息了,来的太容易我简直不敢相信。

检索页上包含有10条商品的连接,用正则取得后,再取得转向后10条记录(即下一页)的连接。如此循环就会得出所有商品信息。我用access建了一个表来存放它们。编好了程序挂到机器上就睡觉去了。

这是一个检索结果页的连接:
http://www.joyo.com/ProdSearch/prodsearch.asp?kind=&limitBefore=10&vname=&sorttype=undefined&uid=u5swcqykpzsis0qaiwg79sg5u
其中limitBefore=10 当前页第一条记录前有10条记录,即这一页的第一条是总的第11条记录。
 
第二天兴奋地来到机器上一看,发现记录只有700多条。很郁闷,程序我没加容错处理因为我发现vbscript的错误处理比vb中的还要简略。似乎连on error goto LABEL都不可以使用。我在检索页点来点去希望找出错误的根源,结果发现当其中limitBefore大于750的时候后面就没有记录了。原来是这样。joyo.com的程序员没有让我们这么容易的得到所有数据。这条路是不能走了。
 

下面我开始分析检索结果中商品信息页面的连接:
http://www.joyo.com/shop/shop_product.asp?uid=u5swcqykpzsis0qaiwg79sg5u&prodid=bkbk507440
经分析 prodid=bkbk507440 是这个产品的唯一标识,bkbk表示该产品的所属分类“图书”
 
这是一些其他的主要分类标识:
bkbk 图书
bkmu 音乐
itit 数码
bkbh 日用
itrj 数码产品
bkgm 游戏
bkys 影视
 
只要我遍历所有的prodid然后找出存在的商品页面就可以了。然而怎么判断该prodid是否存在呢,我在地址栏上胡乱打了一个prodid返回了出错结果页面。
 
 
出错页上有一张红色的“警钟”图案,我估计正常的页面上是不可能包含此图片的。于是以此作为判断prodid是否存在的依据。遍历所有prodid,如果在返回结果html中发现“警钟”图片则不做处理,否则就从页面中取出需要的信息。

遍历6位的prodid是个漫长的过程,粗略的估算,如果每个操作用时1秒的话,则最少需要999999次循,环即999999秒(999999/3600=277多小时)。这显然是太长了,于是我又做了一些优化,发现第一位数字只在0-5之间变化,第二为数字只在0-1之间变化。这样大大的缩短了时间(519999/3600=144多小时),实际的时间更乐观。
 
经过几天的调试终于把图书分类下载完了,接下来我又接着优化程序,做一个更有效率的“小偷”。
posted @ 2005-11-17 21:57 登陆不起啦 阅读(940) | 评论 (4)编辑 收藏
作者:blue1019
来源:http://spaces.msn.com/members/blue1019/Blog/cns!1pvHzJ2FFuxbZKKCb2_fpGcA!305.entry

10月10日
获取远程服务器数据(asp,adodb.stream,保存远程图片,XMLHTTP)
本文章对使用xmlhttp下载其他服务器信息的技术做了进一步的研究,如不熟悉请先阅读
 
小偷是怎样炼成的
 
关于XMLHTTP的细节可以参考
 
关于adodb.stream的细节可以参考
 
 
下面重新注释了BytesToBstr函数,它的作用是把由xmlhttp.responsebody返回的字节数组转换成文本字符串,如果数据要用做屏幕输入则必须转换否则汉字会出现乱码.
 
 Function BytesToBstr(body)
  'Cset:GB2312 UTF-8
  dim objstream
  set objstream = Server.CreateObject("adodb.stream")
  with objstream
   .Type = 1 '设置返回数据类型为二进制
   .Mode = 3 '打开模式为读写
   .Open    
   .Write body  '将指定的数据装入对像中 body为内容
   .Position = 0 '指定对像内数据的当前指针
   .Type = 2  '设置返回数据类型为文本
   .Charset = Cset  '设定字符集类型
   BytesToBstr = .ReadText '取对象内的文本
   .Close
  end with
  set objstream = nothing
 End Function
 
 
获取其他服务器的数据和获取文本是一个道理,通过图片的url获取图片的数据处理,只是保存的时候不需要把它转换成字符串了。这里利用adodb.stream的SaveToFile方法将其保存在本地服务器上。
 
 Public function saveimage(tofile)
  dim objStream,imgs
  imgs=getBody(sUrl)'取得图片的具休内容的过程
  Set objStream = Server.CreateObject("ADODB.Stream")'建立ADODB.Stream对象,必须要ADO 2.5以上版本
  with objStream
   .Type =1'以二进制模式打开
   .Open
   .write imgs'将字符串内容写入缓冲
   .SaveToFile server.mappath(tofile),2'将缓冲的内容写入文件
   .Close()
  end with 
  set objstream=nothing
 end function
 
 
实现了保存文本数据和二进制数据,那就无所不能了*^_^*
 
附一个包括简单功能类完整代码:
---------------------------------------------------------------------------
Class xhttp
 private cset,sUrl
 Private Sub Class_Initialize()
  cset="UTF-8"
 end sub
 
 
 Private Sub Class_Terminate()
 End Sub

 Public Property LET URL(theurl)
  sUrl=theurl
 end property
 
 public property GET BasePath()
  BasePath=mid(sUrl,1,InStrRev(sUrl,"/")-1)
 end property
 
 public property GET FileName()
  FileName=mid(sUrl,InStrRev(sUrl,"/")+1)
 end property
 public property GET Html()
  Html=BytesToBstr(getBody(sUrl))
 end property
 private Function BytesToBstr(body)
  'Cset:GB2312 UTF-8
  dim objstream
  set objstream = Server.CreateObject("adodb.stream")
  with objstream
   .Type = 1 '设置返回数据类型为二进制
   .Mode = 3 '打开模式为读写
   .Open    
   .Write body  '将指定的数据装入对像中 body为内容
   .Position = 0 '指定对像内数据的当前指针
   .Type = 2  '设置返回数据类型为文本
   .Charset = Cset  '设定字符集类型
   BytesToBstr = .ReadText '取对象内的文本
   .Close
  end with
  set objstream = nothing
 End Function

 private function getBody(surl)
  dim xmlHttp
  set xmlHttp=server.createobject("MSXML2.XMLHTTP")
  xmlHttp.open "GET",surl,false
  xmlHttp.send
  if xmlHttp.readystate<>4 then
   exit function
  end if
   getBody=xmlhttp.responsebody
  set xmlHttp=nothing
 end function
 
 
 Public function saveimage(tofile)
  dim objStream,imgs
  imgs=getBody(sUrl)'取得图片的具休内容的过程
  Set objStream = Server.CreateObject("ADODB.Stream")'建立ADODB.Stream对象,必须要ADO 2.5以上版本
  with objStream
   .Type =1'以二进制模式打开
   .Open
   .write imgs'将字符串内容写入缓冲
   .SaveToFile server.mappath(tofile),2'-将缓冲的内容写入文件
   .Close()
  end with 
  set objstream=nothing
 end function
 
end class 
 
 
TEST:
dim o
set o=new xhttp
o.saveimage "blue.gif"
set o=nothing
posted @ 2005-11-17 21:53 登陆不起啦 阅读(1506) | 评论 (1)编辑 收藏

来源:http://www.caspnet.com.cn/blog/post/111.html

下面为完整的源代码

以下是引用片段:
<%@ Page language="c#"%> 
<%@import namespace=MSXML2%> 
<script language="c#" runat="server"> 
private void Page_Load(object sender, System.EventArgs e) 

string Url = "/blog/upload/20056222116262.gif"; 
string StringFileName = Url.Substring(Url.LastIndexOf("/") + 1); 
string StringFilePath = Request.PhysicalApplicationPath; 
if(!StringFilePath.EndsWith("/")) StringFilePath += "/"; 
MSXML2.XMLHTTP _xmlhttp = new MSXML2.XMLHTTPClass(); 
_xmlhttp.open("GET",Url,false,null,null); 
_xmlhttp.send(""); 
if( _xmlhttp.readyState == 4 ) 

if(System.IO.File.Exists(StringFilePath + StringFileName)) 
System.IO.File.delete(StringFilePath + StringFileName); 
System.IO.FileStream fs = new System.IO.FileStream(StringFilePath + StringFileName, System.IO.FileMode.createNew); 
System.IO.BinaryWriter w = new System.IO.BinaryWriter(fs); 
w.Write((byte[])_xmlhttp.responseBody); 
w.Close(); 
fs.Close(); 
Response.Write ("文件已经得到。<br><a href=’" + Request.ApplicationPath + "\\" + StringFileName +"’ target=’_blank’>"); 
Response.Write ("查看" + StringFileName + "</a>"); 

else 
//Response.Write (_xmlhttp.statusText); 
Response.End(); 

</script> 


 

 

//试分析 .NET 下用MSXML远程下载文件跟处理方法

//声明为 C#语言
<%@ Page language="c#"%>

//导入MSXML2空间,表示下面要用到这个空间里的一些内容
<%@import namespace=MSXML2%>
//语言C# 运行在服务器端
<script language="c#" runat="server">

private void Page_Load(object sender, System.EventArgs e)
{

//定义变量  Url 为一个绝对目录地址
string Url = "/blog/upload/20056222116262.gif";

//定义变量 取得以 / 为分隔符的 最后那个数组数据  得到 20056222116262.gif
string StringFileName = Url.Substring(Url.LastIndexOf("/") + 1);

//定义变量,得到当前文件的物理路径
string StringFilePath = Request.PhysicalApplicationPath;

//如果路径最后的字符不为 / 则加上 /
if(!StringFilePath.EndsWith("/")) StringFilePath += "/";

//申请 XMLHTTP对象

MSXML2.XMLHTTP _xmlhttp = new MSXML2.XMLHTTPClass();

// 用 GET方式 向URL地址 需要等待服务器回应 False
_xmlhttp.open("GET",Url,false,null,null);

//发送请求
_xmlhttp.send("");

//如果返回的是 服务器回应完毕,文件已经下载成功 则进入下一步 
if( _xmlhttp.readyState == 4 )
{

//查看 当前路径,当前文件名的 有没有存在这个文件
if(System.IO.File.Exists(StringFilePath + StringFileName))

//如果存在就删除
System.IO.File.delete(StringFilePath + StringFileName);

//创建文件流格式
System.IO.FileStream fs = new System.IO.FileStream(StringFilePath + StringFileName, System.IO.FileMode.createNew);

//用二进制模式打开
System.IO.BinaryWriter w = new System.IO.BinaryWriter(fs);

//写入到文件中。。内容为 XMLHTTP抓取的数据。
w.Write((byte[])_xmlhttp.responseBody);

//关闭对像 
w.Close();
fs.Close();


Response.Write ("文件已经得到。<br><a href='" + Request.ApplicationPath + "\\" + StringFileName +"' target='_blank'>");
Response.Write ("查看" + StringFileName + "</a>");
}
else

//如果采集不到数据,则停止一切操作
//Response.Write (_xmlhttp.statusText);
Response.End();
}
</script>

posted @ 2005-11-17 21:24 登陆不起啦 阅读(493) | 评论 (0)编辑 收藏
  2005年10月28日
来源:http://www.k-zone.cn/Blog/blogview.asp?logID=83     作者:kenshin

终于到周末了,晚上给大家加班贴出flex的教程第二辑

④  安装eclipse,在这个地址下载eclipse for wtp-all-in-one-0.7-win32.zip,本机也有!
http://www.eclipse.org/downloads/download.php?file=/webtools/downloads/drops/R-0.7-200507290654/wtp-all-in-one-0.7-win32.zip

下载完以后,把eclipse for wtp-all-in-one-0.7的rar解压缩到任意目录下面,我选择的是f:的根目录下面,关于eclipse for wtp-all-in-one-0.7这个版本,已经自带了关于j2ee的插件,不需要在进行额外的配置了!然后运行eclipse.exe文件,它首先需要选择一个workspace,用默认的就可以了。进行配置:
Ⅰ 配置java-buildpath,如下图配置:

Ⅱ  配置JDK,TOMCAT运行的时候需要JDK,eclipse自动找到的是jre,如下图:

选择add,之后按如下图进行配置:

主要就是找到刚才安装的jdk的目录,并且给JRE起一个名字!配置成功后,如下图:

Ⅲ 配置xml 和 internet 缓存,在web应用中通常有很多的xml文件,默认情况下wtp会去验证这些xml文件,这就需要有这些xml文件的定义dtd或者xsd文件。wtp默认的会自动去下载,下载下来之后可以缓存之后供以后使用。所以首先我们要打开缓存功能。见下图,把disable cashing的勾去掉即可。

也可以把常用的xml文件的定义文件配置在xmlcatalog里边,这样进行xml验证的时候会自动使用这些文件,见下图:

Ⅳ 配置tomcat服务器,现在我们来配置tomcat,其他服务器的配置大致相同,如下图所示:

点击上图中的add按钮,选择刚才安装好的tomcat的版本号,比如:tomcat5.0


写入tomcat的名称,路径,最重要的是选择刚才配置好的JRE的名称,比如JDK1.5,然后选择Finish即可。这样eclipse for wtp-all-in-one-0.7就配置完毕,下面来进行一下check,看看是否成功!
Ⅴ 开发一个JSP
  关于开发jsp的部分,在本文里面就不在进行叙述了!
⑤  以上就是JDK+tomcat+eclipse开发jsp的过程,下面叙述用eclipse开发flex的部分,首先当第一次运行eclipse的时候,它会让你选择一个路径来当作workspace,如果你新建了一个project的话,例如你新建立的project名称叫做FX-Blog,eclipse就会在workspace/FX-Blog的下面建立如下图的文件夹结构:

其中javasource下面放的就是java的文件,webContent下面放的就是jsp的文件。
而且eclipse的所有关于这个project的配置文件全部放在eclipse的workspace\FX-Blog的目录下面,只要把这个文件夹copy到环境相同的另一台机器上,就不再需要配置eclipse了!现在进行flex+eclipse的配置,首先把tomcat中的webapps/samples的文件夹下面的WEB-INF和META-INF这2个文件夹copy到eclipse的workspace的你自己建立的project,例如F:\eclipse\workspace\FX-Blog\WebContent\这个下面,覆盖原有的文件就可以,然后重新启动eclipse,之后在F:\eclipse\workspace\FX-Blog\WebContent\下面建立一个mxml文件,如果在eclisple中运行这个mxml文件,能运行成功的话,说明flex1.5+tomcat5.X+eclipse3.1+flex builder1.5+JDK1.5配置成
posted @ 2005-10-28 13:50 登陆不起啦 阅读(630) | 评论 (0)编辑 收藏
来自 http://www.k-zone.cn/Blog/blogview.asp?logID=78      作者:kenshin

应广大朋友的要求,只好先写一些flex的配置吧! 本来想先整理fxblog来着,但是我想把它移植到flex 2 里面 看看效果,所有需要晚几天的时间,对不起大家了


① 首先下載 JDK1.5,从sun的网站上面就能下载,安装的时候,路径的选择最好是是在c盘根目录下面。比c:\JDK1.5。如果用eclipse运行java的话,不需要配置环境变数。
② 然后下载tomcat5.x,去它的网站下载,然后安装,一路默认就可以,其中端口选择默认,必须输入admin的密码即可。运行tomcat5.x后,如下图进行配置:

主要配置上面红色的线的部分(包括:虚拟机和java的classpath),只要和你刚才安装的jdk的路径一直就可以。之后运行http://localhost:8080,如果能看到欢迎画面,就表示jdk+tomcat配置成功!
③ 然后安装flex1.5,可以从mm的网站下载,下载时需要有效的信箱地址。
也是一路的next,安装的目录选择默认就可以。安装后在C:\Program Files\Macromedia\Flex\下面会有2个文件,flex.jar和samples.jar,把他们copy到tomcat的webapps的目录下面,也就是C:\Tomcat 5.X\webapps\这个下面,然后重新启动tomcat,tomcat通过刚才copy过来的这2个jar文件,生成相应的文件夹,就是flex和samples的文件夹,如下图:

然后在ie里面http://localhost:8080/samples,如果下图如下:

说明你的flex已经配置成功了80%。点击flex explorer的话,出现下图的画面,说明你的flex已经完全配置成功!:)

posted @ 2005-10-28 11:51 登陆不起啦 阅读(413) | 评论 (0)编辑 收藏
  2005年10月20日
功能的确很多哦。

2D-Position 允许通过拖曳移动绝对定位的对象。
AbsolutePosition 设定元素的 position 属性为“absolute”(绝对)。
BackColor 设置或获取当前选中区的背景颜色。
BlockDirLTR 目前尚未支持。
BlockDirRTL 目前尚未支持。
Bold 切换当前选中区的粗体显示与否。
BrowseMode 目前尚未支持。
Copy 将当前选中区复制到剪贴板。
CreateBookmark 创建一个书签锚或获取当前选中区或插入点的书签锚的名称。
CreateLink 在当前选中区上插入超级链接,或显示一个对话框允许用户指定要为当前选中区插入的超级链接的 URL。
Cut 将当前选中区复制到剪贴板并删除之。
Delete 删除当前选中区。
DirLTR 目前尚未支持。
DirRTL 目前尚未支持。
EditMode 目前尚未支持。
FontName 设置或获取当前选中区的字体。
FontSize 设置或获取当前选中区的字体大小。
ForeColor 设置或获取当前选中区的前景(文本)颜色。
FormatBlock 设置当前块格式化标签。
Indent 增加选中文本的缩进。
InlineDirLTR 目前尚未支持。
InlineDirRTL 目前尚未支持。
InsertButton 用按钮控件覆盖当前选中区。
InsertFieldset 用方框覆盖当前选中区。
InsertHorizontalRule 用水平线覆盖当前选中区。
InsertIFrame 用内嵌框架覆盖当前选中区。
InsertImage 用图像覆盖当前选中区。
InsertInputButton 用按钮控件覆盖当前选中区。
InsertInputCheckbox 用复选框控件覆盖当前选中区。
InsertInputFileUpload 用文件上载控件覆盖当前选中区。
InsertInputHidden 插入隐藏控件覆盖当前选中区。
InsertInputImage 用图像控件覆盖当前选中区。
InsertInputPassword 用密码控件覆盖当前选中区。
InsertInputRadio 用单选钮控件覆盖当前选中区。
InsertInputReset 用重置控件覆盖当前选中区。
InsertInputSubmit 用提交控件覆盖当前选中区。
InsertInputText 用文本控件覆盖当前选中区。
InsertMarquee 用空字幕覆盖当前选中区。
InsertOrderedList 切换当前选中区是编号列表还是常规格式化块。
InsertParagraph 用换行覆盖当前选中区。
InsertSelectDropdown 用下拉框控件覆盖当前选中区。
InsertSelectListbox 用列表框控件覆盖当前选中区。
InsertTextArea 用多行文本输入控件覆盖当前选中区。
InsertUnorderedList 切换当前选中区是项目符号列表还是常规格式化块。
Italic 切换当前选中区斜体显示与否。
JustifyCenter 将当前选中区在所在格式化块置中。
JustifyFull 目前尚未支持。
JustifyLeft 将当前选中区所在格式化块左对齐。
JustifyNone 目前尚未支持。
JustifyRight 将当前选中区所在格式化块右对齐。
LiveResize 迫使 MSHTML 编辑器在缩放或移动过程中持续更新元素外观,而不是只在移动或缩放完成后更新。
MultipleSelection 允许当用户按住 Shift 或 Ctrl 键时一次选中多于一个站点可选元素。
Open 打开。
Outdent 减少选中区所在格式化块的缩进。
OverWrite 切换文本状态的插入和覆盖。
Paste 用剪贴板内容覆盖当前选中区。
PlayImage 目前尚未支持。
Print 打开打印对话框以便用户可以打印当前页。
Redo 重做。
Refresh 刷新当前文档。
RemoveFormat 从当前选中区中删除格式化标签。
RemoveParaFormat 目前尚未支持。
SaveAs 将当前 Web 页面保存为文件。
SelectAll 选中整个文档。
SizeToControl 目前尚未支持。
SizeToControlHeight 目前尚未支持。
SizeToControlWidth 目前尚未支持。
Stop 停止。
StopImage 目前尚未支持。
StrikeThrough 目前尚未支持。
Subscript 目前尚未支持。
Superscript 目前尚未支持。
UnBookmark 从当前选中区中删除全部书签。
Underline 切换当前选中区的下划线显示与否。
Undo 撤消。
Unlink 从当前选中区中删除全部超级链接。
Unselect 清除当前选中区的选中状态。
posted @ 2005-10-20 10:50 登陆不起啦 阅读(225) | 评论 (0)编辑 收藏
  2005年10月15日
MSXML中提供了Microsoft.XMLHTTP对象,能够完成从数据包到Request对象的转换以及发送任务。
创建XMLHTTP对象的语句如下:

Set objXML = CreateObject(Msxml2.XMLHTTP) 或
Set objXML = CreateObject(“Microsoft.XMLHTTP”)
' Or, for version 3.0 of XMLHTTP, use:
' Set xml = Server.CreateObject(MSXML2.ServerXMLHTTP)


对象创建后调用Open方法对Request对象进行初始化,语法格式为:
poster.open http-method, url, async, userID, password

Open方法中包含了5个参数,前三个是必要的,后两个是可选的(在服务器需要进行身份验证时提供)。参数的含义如下所示:
http-method: HTTP的通信方式,比如GET或是 POST
url: 接收XML数据的服务器的URL地址。通常在URL中要指明 ASP或CGI程序
async: 一个布尔标识,说明请求是否为异步的。如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作
userID 用户ID,用于服务器身份验证
password 用户密码,用于服务器身份验证&nbsp;


XMLHTTP对象的Send方法
用Open方法对Request对象进行初始化后,调用Send方法发送XML数据:
poster.send XML-data

Send方法的参数类型是Variant,可以是字符串、DOM树或任意数据流。发送数据的方式分为同步和异步两种。在异步方式下,数据包一旦发送完毕,就结束Send进程,客户机执行其他的操作;而在同步方式下,客户机要等到服务器返回确认消息后才结束Send进程。

XMLHTTP对象中的readyState属性能够反映出服务器在处理请求时的进展状况。客户机的程序可以根据这个状态信息设置相应的事件处理方法。属性值及其含义如下表所示:
值 说明
0 Response对象已经创建,但XML文档上载过程尚未结束
1 XML文档已经装载完毕
2 XML文档已经装载完毕,正在处理中
3 部分XML文档已经解析
4 文档已经解析完毕,客户端可以接受返回消息

客户机处理响应信息
客户机接收到返回消息后,进行简单的处理,基本上就完成了C/S之间的一个交互周期。客户机接收响应是通过XMLHTTP对象的属性实现的:
● responseTxt:将返回消息作为文本字符串;
● responseXML:将返回消息视为XML文档,在服务器响应消息中含有XML数据时使用;
● responseStream:将返回消息视为Stream对象。
posted @ 2005-10-15 15:39 登陆不起啦 阅读(315) | 评论 (0)编辑 收藏

 

我们传统的提交数据的方法都是用<Form>来实现的.
<Form>标记中的Method属性确定了表单元素的数据在发送到服务器时,
如何对HTTP请求信息进行打包.
Method 属性可以使用的方法
Method属性      发送表单元素的方式                            读取数据的Request集合
Get             标识在URL的最后                                  QueryString
Post            在HTTP请求的主体内(HTTP请求的自由区域)  Form


这篇文章用XMLHTTP来实现Form的Method=Post.

ClientPost.htm

<script language="JavaScript">
function AddDataPost(sUserId,sUserName)
{
/*
 *--------------- AddDataPost(sUserId,sUserName) -----------------
 * AddDataPost(sUserId,sUserName) 
 * 功能:通过XMLHTTP添加数据.相当于Form的Method=Post.
 * 参数:sUserId,字符串,发送条件.
 * 参数:sUserName,字符串,发送条件.
 * 实例:AddDataPost(document.all.userid.value,document.all.username.value);
 *--------------- AddDataPost(sUserId,sUserName) -----------------
 
*/
    
var oBao = new ActiveXObject("Microsoft.XMLHTTP");
    
//特殊字符:+,%,&,=,?等的传输解决办法.
    //Update:2004-6-1 12:22
    //escape(sUserId),escape(sUserName);
    sUserId = escape(sUserId);
    sUserName 
= escape(sUserName);
    
var userInfo = "userid="+sUserId+"&username="+sUserName;
    oBao.open(
"POST","Server.asp",false);
    oBao.setRequestHeader(
"Content-Type","application/x-www-form-urlencoded")
    oBao.send(userInfo);
    
//清空输入框数据.
    document.all.userid.value="";
    document.all.username.value
="";
    
//服务器端处理返回的是经过escape编码的字符串.
    alert(unescape(oBao.responseText))
}
</script>
<input type="button" onclick="AddDataPost(document.all.userid.value,document.all.username.value)" value="AddDataPost"><br>
userid:
<input type="text" name="userid"><br>
username:
<input type="text" name="username">

Server.asp  服务器端处理.
<% @Language="JavaScript" %>
<%
function OpenDB(sdbname)
{
/*
 *--------------- OpenDB(sdbname) -----------------
 * OpenDB(sdbname) 
 * 功能:打开数据库sdbname,返回conn对象.
 * 参数:sdbname,字符串,数据库名称.
 * 实例:var conn = OpenDB("database.mdb");
 *--------------- OpenDB(sdbname) -----------------
 
*/
    
var connstr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+Server.MapPath(sdbname);
    
var conn = Server.CreateObject("ADODB.Connection");
    conn.Open(connstr);
    
return conn;
}
var sResult = "";
var oConn = OpenDB("data.mdb");
//相当于Form的Method=Post.
//
相当于Form的Method=Post.
//
特殊字符:+,%,&,=,?等的传输解决办法.客户端传输过来是经过escape编码的.
//
所以服用器端应该先unescape解码.
//
Update:2004-6-1 12:22
//
unescape(Request.Form("userid"))..
var userid = unescape(Request.Form("userid"));
var username = unescape(Request.Form("username"));
sResult 
= "userid:"+userid+"\nusername:"+username+"\n 添加成功."
var sql = "Insert into users(userid,username)Values('"+userid+"','"+username+"')";
oConn.Execute(sql);
Response.Write(escape(sResult));
%>

数据库设计
data.mdb
表users.
字段
id              自动编号
userid          文本
username        文本

表:users 数据:
id      userid          username
1       wanghr100   管理员

posted @ 2005-10-15 14:08 登陆不起啦 阅读(595) | 评论 (0)编辑 收藏
仅列出标题  下一页