精华内容
下载资源
问答
  • ---恢复内容开始--- 什么服务器  就是一个可以对外界...什么是动态网站  能和用户交互网站(并不是有动态效果网站) 简单了解C/S和B/S架构 C/S Client Server 客户端服务器模式 B/S:Browser Server ...

    ---恢复内容开始---

    什么服务器

     就是一个可以对外界提供服务一个软件和硬件的结合体

    常见的服务器
      Tomcat
      Nginx:处理静态资源
      Jetty
      Jboss

    什么是动态网站

      能和用户交互的网站(并不是有动态效果的网站)

    简单的了解C/S和B/S架构

        C/S Client  Server  客户端服务器模式

        B/S:Browser Server 浏览器 服务器模式

    C/S和B/S架构的区别

      操作不同,相对于B/S架构来说,C/S架构界面与操作更丰富

      安全性不同,C/S架构安全性要高于B/S架构。

      相应速度不同,由于C/S架构只有一层交互的原因,去相应速度明显高于B/S架构。

      使用条件不同,C/S需要程序安装,B/S只需要有web浏览器即可。

      成本构成不同,虽然两者的成本都不低,但C/S主要源于日常升级维护,B/S主要源于程序设计花费。

    什么是URL

      URL(Uniform Resource Locator)意为统一资源定位符,用于完整描述internet上网页和其他资源的地址的一种标识方式,简单的说就是网址

      URL的组成 

        1.协议

        2.服务器域名或者IP

        3.端口号

        4.路径

    如何部署一个简单的web应用

      Tomcat服务器获取与安装

      下载网址(http//:tomcat.apache.org/)

      设置环境变量>>>添加变量名称>>>>设置值为Tomcat的安装目录

    简单了解JSP页面组成

      什么是JSP

        Java Server Pages  java服务器端页面  不能单独在浏览器中执行,,因为浏览器只能识别                  html标签。他不能识别 Page指令。

      静态内容

        静态内容是JSP页面静态文本,其基本是HTML文本与Java和JSP语法无关

     JSP元素

        Page指令
         html标签
         小脚本<%%>
         表达式<%=%>
         声明 <%!%>

    转载于:https://www.cnblogs.com/yzwss/p/8906931.html

    展开全文
  • 三十、网狐荣耀版服务器端启动出现“您服务器组件没有得到合法授权,服务器将会以受限模式运行” 这个就是因为内核组件没有破解,然后认证没有通过。建议去网狐公司购买正版和正版授权。Q-Q:457189 三十一、网狐...
  • jmapcms网站开发系统所有功能都使用自定义模式,功能开发自由,系统后台操作十分快捷,使用高速静态缓存方式和数组化数据保证网站的稳定运行,使用ajax和jquery方式进行实时提示,提高用户体验度。 jmapcms网站...
  • 媒体查询 CSS媒体查询允许开发者基于浏览网站的设备的特性来应用不同的样式申明,最常用的特性是视口宽度。 GCF 谷歌内嵌浏览器框架, 使用此插件,用户可以通过Internet Explorer的用户界面,以Chrome内核的渲染方式...
  •  (6)拥有强大的网络开发能力,能够快速的开发B/S应用,它内置的IntraWeb和ExpressWeb使得对于网络的开发效率超过了其他任何的开发工具。  (7)Delphi使用独特的VCL类库,使得编写出的程序显得条理清晰,VCL是现在最...
  • ASP(Active Server Page)是微软公司的产品,由于它编程很容易上手,能快速开发功能强大的动态网站,现在很多网站(特别是Intranet/Extranet内部网)采用了NT+IIS+ASP的模式,使得ASP成为目前较为...

    ASP(Active Server Page)是微软公司的产品,由于它编程很容易上手,能快速开发功能强大的动态网站,现在很多网站(特别是Intranet/Extranet内部网)采用了NT+IIS+ASP的模式,使得ASP成为目前较为流行的网站开发脚本语言。在WEB服务中,文件上载服务是一个很常见的功能,而WIN9X下的PWS没有提供相关组件;NT下的IIS提供了一个Post Acceptor组件,但由于它要检查用户的WWW访问权限而变得不太好用;也可以从Internet上下载有关组件,但这些大多都是商业组件,用于下载的是试用版,在使用时间或功能上都有限制。由于ASP可以调用标准的OLE/COM组件,我们可以用VB/VC/DELPHI等高级编程工具根据我们自己的要求来定制自己的ASP文件上载组件,满足自己的应用系统要求。

    下面将讨论用DELPHI为ASP开发文件上载组件的原理和具体实现过程。

     

    一、文件上载的实现原理

    基于Web方式数据上传,要遵从RFC1867标准,上载的文件数据也不例外。如用下面HTML页面文件(delphiup.htm)选择上载文件:

    <!-- DelphiUp.htm:文件上载界面 -->

    <html><head><title>文件上载</title></head><body>

    用DELPHI编写的文件上载组件实现文件上载

    <form NAME="UploadForm" ACTION="delphiup.asp" METHOD="POST" ENCTYPE="multipart/form-data">

    <p>文件另存为:<input TYPE=text NAME="SaveAs">

    <p>请要选择上载的文件:<input TYPE=file NAME="FileData">

    <input type="submit" name="b1" value="确认上载"> </p>

    </form>

    </body></html>

    当客户端选择了一个文件(如Test.TXT,其内容为“这里是一个用于上载的文件的内容。”)并按

    “确认上载”按钮提交数据后,服务器端程序收到的数据将具有如下形式:

    -----------------------------7cf1d6c47c#13#10

    Content-Disposition: form-data; name="SaveAs"#13#10#13#10

    NewFileName#13#10

    -----------------------------7cf1d6c47c#13#10

    Content-Disposition: form-data; name="FileData"; filename="D:/test.txt"

    Content-Type: text/plain#13#10#13#10

    这里是一个用于上载的文件的内容。#13#10

    -----------------------------7cf1d6c47c#13#10

    Content-Disposition: form-data; name="b1"#13#10#13#10

    确认上载#13#10

    -----------------------------7cf1d6c47c--

    其中,“-----------------------------7cf1d6c47c”是分界符,用于分隔表单(Form)中的各个域;

    #13#10是回车换行符的DELPHI表示。我们可以这样认为,每个表单域的信息描述,都是以分界符加一对回车换行符#13#10开始;表单域名以“name="”开始,以“"”为结束;表单域值以两对回车换行符#13#10#13#10开始,以一对回车换行符#13#10#加分界符结束;文件名称以“filename="”开始,以“"”为结束。有了这些标志,我们就可以获取表单域的名称和值以及要上载的文件的名称,从而实现文件数据的读取和存储了。

     

    二、文件上载的实现过程

    在理解上面提到的数据格式后,自己动手编写一个文件上载组件对我们来说已经不是困难了。

     

    (一)开始建立一个ASP组件的工程

    如果您对用DELPHI开发OLE Automation Server的步骤不太熟悉的话,请参见《电子与电脑》1999年第06期的一篇文章《用DELPHI开发用于ASP的OLE Automation Server 》。

    这里只简要介绍一下操作步骤。

    1、建立ActiveX Library工程

    在DELPHI中选择菜单File=》New...,在“New Item”对话框的ActiveX选项卡中选择“ActiveX Library”,DELPHI会自动创建一个DLL工程Project1。

    2、建立Automation组件

    在DELPHI中选择菜单File=》New...,在“New Item”对话框的ActiveX选项卡中选择“Automation Object”;然后在“Automation Object Wizard”对话框中输入Class Name(如“UploadFile”),Instancing选择“Multiple Instance”即可,单击“OK”后DELPHI会自动创建一个TLB(Type Library)文件Project1_TLB.PAS和一个PAS(Unit)文件Unit1.PAS。在Type Library设计窗口中,将Project1改名为MyUpload,则该文件上载组件的OLE注册码为“MyUpload.UploadFile”。

    3、引入ASP类型库

    为了使用ASP的五个内建对象(Request、Response、Server、Application、Session),需要引入ASP类型库。我们主要利用Request对象读取从客户端传递到服务器端的数据。

    在Project菜单中选择“Import Type Library”,在“Import Type Library”对话框的“Type Libraries”列表选择“Microsoft Active Server Pages Object Library(Version 2.0)”(如果没有这个选项,请确定您的计算机上安装了IIS3以上或PWS4以上并且ASP.DLL已正确注册),DELPHI会自动创建一个TLB文件ASPTypeLibrary_TLB.PAS,其中有我们需要的ASP对象类型声明。

    4、定义OnStartPage、OnEndPage过程

    当在ASP页面上用Server.CreateObject创建一个OLE对象实例时,WEB服务器会调用其方法OnStartPage,将ASP应用环境信息传递给该对象,我们可以在该过程中获取客户端信息;当在ASP页面中释放一个OLE对象实例时,WEB服务器会调用其方法OnEndPage,我们可以在该过程中进行释放内存等结束操作。在我们这个组件中,我们要用到其OnStartPage方法。

    OnStartPage方法应该在Unit1.PAS中定义,OnStartPage的函数原型为:

    procedure OnStartPage(AScriptingContext: IUnknown);

    其中参数AScriptingContext是一个IScriptingContext类型变量,包含五个属性(Request、Response、Server、Application、Session)分别对应ASP的五个内建同名对象。

    我们需要在TLB定义窗口(View=》Type Library)中,为IUploadFile增加方法OnStartPage,其Declaration语句为“procedure OnStartPage(AScriptingContext: IUnknown);”。

     

    (二)提取客户端上传的数据

    该工作可以放在OnStartPage过程中进行。

    利用AScriptingContext的属性Request(类型为IRequest)中的属性TotalBytes(请求信息内容长度)和方法BinaryRead可将客户端上传的请求信息数据读取到一个Byte类型的数组中,然后按RFC1867标准定义的数据格式来分析和提取数据。

    1、首先定义TUploadFile的几个私有变量

    在单元文件UP01.PAS(由Unit1.PAS另存)中加入对ASPTypeLibrary_TLB.PAS的引用(Uses),

    然后加入

    private

    FContentLength : LongInt;//请求信息内容长度

    FContentData : Variant;//内容数据,以数组形式存储请求信息内容

    FFileName, //要上载的文件名称

    FDelimeter : string; //表单域分界符

    FScriptingContext : IScriptingContext;//ASP处理上下文环境内容

    FFileDataStart, //文件数据开始位置

    FFileDataEnd : LongInt; //文件数据结束位置

     

    2、提取客户端上传的请求信息数据

    //在OnStartPage事件中,获取ASP上下文信息、请求信息内容、表单域的分界符、文件数据

    procedure TUploadFile.OnStartPage(AScriptingContext: IUnknown);

    var

    ARequest : IRequest; //WWW请求对象

    AOleVariant : OleVariant; //记录请求信息内容长度

    intDelimterLength : integer;//分界符长度

    longIndex,ALongInt,longPos : LongInt;

    ContentData : AnsiString;//请求信息内容的字符串表示

    strTemp : string;

    FindEndOfFileData : boolean;//是否找到文件数据结束位置

    begin

    //提取客户端上传的请求信息数据

    FScriptingContext := AScriptingContext as IScriptingContext;//获取ASP上下文信息

    ARequest := FScriptingContext.Request;//获取WWW请求信息

    FContentLength := ARequest.TotalBytes;//请求信息内容长度

    //创建动态数组,用于以数组形式存储请求信息内容

    FContentData := VarArrayCreate( [0,FContentLength], varByte );

    //将请求信息内容存储到数组中

    AOleVariant := FContentLength;

    FContentData := ARequest.BinaryRead( AOleVariant );//读取请求信息内容

    //将请求信息内容转化为字符串,便于定位

    ContentData := '';

    for longIndex := 0 to FContentLength - 1 do

    begin

    ContentData := ContentData + chr( Byte( FContentData[ longIndex ] ));

    if FContentData[ longIndex ] = 0 then break;//0表示内容结束

    end;

     

    3、获取分界符、上载文件名称

    //获取表单域的分界符

    longPos := pos( #13#10,ContentData );//回车换行符所在位置

    FDelimeter := Copy( ContentData,1,longPos-1);//该位置之前的内容为分隔符

     

    //获取带源路径的文件名称,在请求信息内容中,文件名称以

    //filename="path/filename"的形式存储

    strTemp := 'filename="';//文件名称在“filename="”之后

    longPos := pos( strTemp, ContentData );//获取“filename="”位置

    if longPos <= 0 then

    begin

    FFileName := '';

    FFileDataStart := -1;

    FFileDataEnd := -2;

    exit;

    end;

    //获取下个双引号“"”之前的内容,即带源路径的文件名称

    longPos := longPos + length( strTemp );

    strTemp := '';

    for longIndex := longPos to FContentLength - 1 do

    if ContentData[ longIndex ] <> '"' then

    strTemp := strTemp + ContentData[ longIndex ]

    else break;

    FFileName := strTemp;

     

    4、获取文件数据的在请求信息内容中的开始、结束位置

    //文件数据开始位置在文件名称后的第一个#13#10#13#10之后

    delete( ContentData, 1, longIndex );

    strTemp := #13#10#13#10;

    FFileDataStart := longIndex + pos(strTemp, ContentData) + length(strTemp) - 1;

     

    //文件数据结束位置在下一个#13#10和分界符之前

    //由于文件数据可能包含非法字符,不能再用字符串定位函数POS

    //查找下一个分界符的位置

    FFileDataEnd := FFileDataStart;

    intDelimterLength := length( FDelimeter );

    FindEndOfFileData := false;

    while FFileDataEnd <= FContentLength - intDelimterLength do

    begin

    FindEndOfFileData := true;

    for ALongInt := 0 to intDelimterLength - 1 do

    if Byte( FDelimeter[ ALongInt + 1 ] ) <>

    FContentData[ FFileDataEnd + ALongInt ] then

    begin

    FindEndOfFileData := false;

    break;

    end;

    if FindEndOfFileData then break;

    FFileDataEnd := FFileDataEnd + 1;

    end;

    if not FindEndOfFileData then FFileDataEnd := FFileDataStart - 1//未找到分界符

    else FFileDataEnd := FFileDataEnd - 3;//分界符,向前跳过#13#10

    end;

     

    (三)向ASP程序传递信息

    在进行了(二)的操作之后,我们的上载组件可以根据ASP程序的要求向其传递数据了。目前可以提供的数据有:客户端源文件名称(FFileName,含路径)、文件大小(FFileDataEnd-FFileDataStart+1)。

    首先应该在TLB设计窗口中声明如下两个方法GetFileName和GetFileSize。

    1、返回客户端源文件名称(含路径)

    //返回客户端源文件名称(含路径)

    function TUploadFile.GetFileName: OleVariant;

    begin

    result := FFileName;//客户端源文件名称(含路径)

    end;

    2、返回文件大小

    //返回文件大小(Bytes)

    function TUploadFile.GetFileSize: OleVariant;

    begin

    result := FFileDataEnd - FFileDataStart + 1;

    end;

     

    (四)保存文件

    在进行了(二)的操作之后,我们的上载组件可以根据ASP程序的要求保存文件了。首先应该在

    TLB设计窗口中声明如下两个方法SaveFileAs和SaveFile。

    1、按指定文件名称保存文件

    //按指定的文件名称保存文件,参数FileName为指定的文件名称,返回值True表示文件保存成功

    function TUploadFile.SaveFileAs(FileName: OleVariant): OleVariant;

    var

    longIndex : LongInt;

    AFile : file of byte;//以二进制的形式保存文件

    byteData : Byte;

    begin

    result := true;

    try

    assign( AFile, FileName );

    rewrite( AFile );

    for longIndex := FFileDataStart to FFileDataEnd do

    begin

    byteData := Byte( FContentData[ longIndex ] );

    Write( AFile, byteData );

    end;

    CloseFile( AFile );

    except

    result := false;

    end;

    end;

    2、按缺省文件名称保存文件

    //按缺省文件名称保存文件,将文件以同名文件保存在调用页面所在目录

    function TUploadFile.SaveFile: OleVariant;

    var

    CurrentFilePath : string;

    begin

    //获取调用页面所在目录

    CurrentFilePath := FScriptingContext.Request.ServerVariables['PATH_TRANSLATED'];

    CurrentFilePath := ExtractFilePath( CurrentFilePath );

    //保存文件

    result := SaveFileAs( CurrentFilePath + ExtractFileName( FFileName ));

    end;

     

    三、上载组件应用举例

    在我们的例子中,DelphiUp.HTM是文件上载界面,DelphiUp.ASP用来执行文件上载操作。

    DelphiUp.ASP的代码如下:

    <!--DelphiUp.ASP:文件上载处理页面-->

    <html><head><title>文件上载</title></head><body>

    <% dim Upload, FileName

    set Upload = Server.CreateObject("MyUpload.UploadFile")

    FileName = Upload.GetFileName

    Response.Write "<br>正在保存文件《"&FileName&"》......"

    if Upload.SaveFile then

    Response.Write "<br>文件《"&FileName&"》上载成功。"

    Response.Write "<br>文件大小为"&Upload.GetFileSize&"字节。"

    else

    Response.Write "<br>文件《"&FileName&"》上载失败。"

    end if

    set Upload=nothing %>

    </body></html>

     

    四、几点说明

    1、由DELPHI自动生成的源代码编译的DLL文件大小有215K,可以在

    ASPTypeLibrary_TLB.PAS的Interface段中将Uses中的单元除ActiveX外全部删除,在

    MyUpload_TLB.PAS中删除Uses中所有单元,则生成的DLL文件大小可减少到61K。

    2、以上方法同样适用于CGI程序,不过要用TWebRequest对象。

     

    以上程序在PWIN98+Delphi3.0+PWS4.0下调试通过。

     

    展开全文
  • 本软件由本人独立开发完成的光辉岁月新闻发布网站平台,拥有光辉岁月新闻发布网站的所有版权。 <br>2. 本软件为免费软件,授权用户免费使用,无须通告作者本人。 <br>3. 允许任何人可以在本软件的基础上独立开发...
  • php网络开发完全手册

    热门讨论 2009-03-02 13:17:26
    13.5 常见的数据库设计问题 208 13.6 关系型数据库的设计原则 209 13.6.1 第一范式(1NF) 209 13.6.2 第二范式(2NF) 209 13.6.3 第三范式(3NF) 210 13.7 数据库设计的方法与步骤 210 13.7.1 需求分析 211 ...
  • 《iOS开发指南》(第二版 iOS7)源码

    千次下载 热门讨论 2014-03-20 11:11:59
     第1章介绍了iOS的开发背景以及本书约定。  第2章使用故事板技术创建了HelloWorld,同时讨论了iOS工程模板、应用的运行机制和生命周期、视图器的生命周期等,最后介绍了如何使用API帮助文档和官方案例。  第3章...
  • PHP开发实战宝典

    热门讨论 2011-12-02 07:34:49
     本书适合有志于从事软件开发的初学者、高校计算机相关专业学生和毕业生,也可作为软件开发人员参考手册,或者高校教学参考书 目录: 第1部分 基础知识 第1章 初识PHP 3 视频讲解:7分钟 1.1 PHP概述 4 ...
  • Asp(Active Server Page)是微软公司的产品,由于它编程很容易上手,能快速开发功能强大的动态网站,现在很多网站(特别是Intranet/Extranet内部网)采用了NT+IIS+Asp的模式,使得Asp成为目前较为流行的网站开发脚本...

    from:http://www.ajaxstu.com/archives/2684_HD.html
    Asp(Active Server Page)是微软公司的产品,由于它编程很容易上手,能快速开发功能强大的动态网站,现在很多网站(特别是Intranet/Extranet内部网)采用了NT+IIS+Asp的模式,使得Asp成为目前较为流行的网站开发脚本语言。在WEB服务中,文件上载服务是一个很常见的功能,而WIN9X下的PWS没有提供相关组件;NT下的IIS提供了一个Post Acceptor组件,但由于它要检查用户的WWW访问权限而变得不太好用;也可以从Internet上下载有关组件,但这些大多都是商业组件,用于下载的是试用版,在使用时间或功能上都有限制。由于Asp可以调用标准的OLE/COM组件,我们可以用VB/VC/Delphi等高级编程工具根据我们自己的要求来定制自己的Asp文件上载组件,满足自己的应用系统要求。

    下面将讨论用Delphi为Asp开发文件上载组件的原理和具体实现过程。


    一、文件上载的实现原理

    基于Web方式数据上传,要遵从RFC1867标准,上载的文件数据也不例外。如用下面HTML页面文件(delphiup.htm)选择上载文件:

    <!-- DelphiUp.htm:文件上载界面 -->

    <html><head><title>文件上载</title></head><body>

    用Delphi编写的文件上载组件实现文件上载

    <form NAME="UploadForm" ACTION="delphiup.asp" METHOD="POST" ENCTYPE="multipart/form-data">

    <p>文件另存为:<input TYPE=text NAME="SaveAs">

    <p>请要选择上载的文件:<input TYPE=file NAME="FileData">

    <input type="submit" name="b1" value="确认上载"> </p>

    </form>

    </body></html>

    当客户端选择了一个文件(如Test.TXT,其内容为"这里是一个用于上载的文件的内容。")并按

    "确认上载"按钮提交数据后,服务器端程序收到的数据将具有如下形式:

    -----------------------------7cf1d6c47c#13#10

    Content-Disposition: form-data; name="SaveAs"#13#10#13#10

    NewFileName#13#10

    -----------------------------7cf1d6c47c#13#10

    Content-Disposition: form-data; name="FileData"; filename="D:\test.txt"

    Content-Type: text/plain#13#10#13#10

    这里是一个用于上载的文件的内容。#13#10

    -----------------------------7cf1d6c47c#13#10

    Content-Disposition: form-data; name="b1"#13#10#13#10

    确认上载#13#10

    -----------------------------7cf1d6c47c--

    其中,"-----------------------------7cf1d6c47c"是分界符,用于分隔表单(Form)中的各个域;

    #13#10是回车换行符的Delphi表示。我们可以这样认为,每个表单域的信息描述,都是以分界符加一对回车换行符#13#10开始;表单域名以"name=""开始,以"""为结束;表单域值以两对回车换行符#13#10#13#10开始,以一对回车换行符#13#10#加分界符结束;文件名称以"filename=""开始,以"""为结束。有了这些标志,我们就可以获取表单域的名称和值以及要上载的文件的名称,从而实现文件数据的读取和存储了。


    二、文件上载的实现过程

    在理解上面提到的数据格式后,自己动手编写一个文件上载组件对我们来说已经不是困难了。


    (一)开始建立一个Asp组件的工程

    如果您对用Delphi开发OLE Automation Server的步骤不太熟悉的话,请参见《电子与电脑》1999年第06期的一篇文章《用Delphi开发用于Asp的OLE Automation Server 》。

    这里只简要介绍一下操作步骤。

    1、建立ActiveX Library工程

    在Delphi中选择菜单File=》New...,在"New Item"对话框的ActiveX选项卡中选择"ActiveX Library",Delphi会自动创建一个DLL工程Project1。

    2、建立Automation组件

    在Delphi中选择菜单File=》New...,在"New Item"对话框的ActiveX选项卡中选择"Automation Object";然后在"Automation Object Wizard"对话框中输入Class Name(如"UploadFile"),Instancing选择"Multiple Instance"即可,单击"OK"后Delphi会自动创建一个TLB(Type Library)文件Project1_TLB.PAS和一个PAS(Unit)文件Unit1.PAS。在Type Library设计窗口中,将Project1改名为MyUpload,则该文件上载组件的OLE注册码为"MyUpload.UploadFile"。

    3、引入Asp类型库

    为了使用Asp的五个内建对象(Request、Response、Server、Application、Session),需要引入Asp类型库。我们主要利用Request对象读取从客户端传递到服务器端的数据。

    在Project菜单中选择"Import Type Library",在"Import Type Library"对话框的"Type Libraries"列表选择"Microsoft Active Server Pages Object Library(Version 2.0)"(如果没有这个选项,请确定您的计算机上安装了IIS3以上或PWS4以上并且ASP.DLL已正确注册),Delphi会自动创建一个TLB文件ASPTypeLibrary_TLB.PAS,其中有我们需要的Asp对象类型声明。

    4、定义OnStartPage、OnEndPage过程

    当在Asp页面上用Server.createObject创建一个OLE对象实例时,WEB服务器会调用其方法OnStartPage,将Asp应用环境信息传递给该对象,我们可以在该过程中获取客户端信息;当在Asp页面中释放一个OLE对象实例时,WEB服务器会调用其方法OnEndPage,我们可以在该过程中进行释放内存等结束操作。在我们这个组件中,我们要用到其OnStartPage方法。

    OnStartPage方法应该在Unit1.PAS中定义,OnStartPage的函数原型为:

    procedure OnStartPage(AScriptingContext: IUnknown);

    其中参数AScriptingContext是一个IScriptingContext类型变量,包含五个属性(Request、Response、Server、Application、Session)分别对应Asp的五个内建同名对象。

    我们需要在TLB定义窗口(View=》Type Library)中,为IUploadFile增加方法OnStartPage,其Declaration语句为"procedure OnStartPage(AScriptingContext: IUnknown);"。


    (二)提取客户端上传的数据

    该工作可以放在OnStartPage过程中进行。

    利用AScriptingContext的属性Request(类型为IRequest)中的属性TotalBytes(请求信息内容长度)和方法BinaryRead可将客户端上传的请求信息数据读取到一个Byte类型的数组中,然后按RFC1867标准定义的数据格式来分析和提取数据。

    1、首先定义TUploadFile的几个私有变量

    在单元文件UP01.PAS(由Unit1.PAS另存)中加入对ASPTypeLibrary_TLB.PAS的引用(Uses),

    然后加入

    private

    FContentLength : LongInt;//请求信息内容长度

    FContentData : Variant;//内容数据,以数组形式存储请求信息内容

    FFileName, //要上载的文件名称

    FDelimeter : string; //表单域分界符

    FScriptingContext : IScriptingContext;//ASP处理上下文环境内容

    FFileDataStart, //文件数据开始位置

    FFileDataEnd : LongInt; //文件数据结束位置


    2、提取客户端上传的请求信息数据

    //在OnStartPage事件中,获取ASP上下文信息、请求信息内容、表单域的分界符、文件数据

    procedure TUploadFile.OnStartPage(AScriptingContext: IUnknown);

    var

    ARequest : IRequest; //WWW请求对象

    AOleVariant : OleVariant; //记录请求信息内容长度

    intDelimterLength : integer;//分界符长度

    longIndex,ALongInt,longPos : LongInt;

    ContentData : AnsiString;//请求信息内容的字符串表示

    strTemp : string;

    FindEndOfFileData : boolean;//是否找到文件数据结束位置

    begin

    //提取客户端上传的请求信息数据

    FScriptingContext := AScriptingContext as IScriptingContext;//获取ASP上下文信息

    ARequest := FScriptingContext.Request;//获取WWW请求信息

    FContentLength := ARequest.TotalBytes;//请求信息内容长度

    //创建动态数组,用于以数组形式存储请求信息内容

    FContentData := VarArraycreate( [0,FContentLength], varByte );

    //将请求信息内容存储到数组中

    AOleVariant := FContentLength;

    FContentData := ARequest.BinaryRead( AOleVariant );//读取请求信息内容

    //将请求信息内容转化为字符串,便于定位

    ContentData := '';

    for longIndex := 0 to FContentLength - 1 do

    begin

    ContentData := ContentData + chr( Byte( FContentData[ longIndex ] ));

    if FContentData[ longIndex ] = 0 then break;//0表示内容结束

    end;


    3、获取分界符、上载文件名称

    //获取表单域的分界符

    longPos := pos( #13#10,ContentData );//回车换行符所在位置

    FDelimeter := Copy( ContentData,1,longPos-1);//该位置之前的内容为分隔符


    //获取带源路径的文件名称,在请求信息内容中,文件名称以

    //filename="path/filename"的形式存储

    strTemp := 'filename="';//文件名称在"filename=""之后

    longPos := pos( strTemp, ContentData );//获取"filename=""位置

    if longPos <= 0 then

    begin

    FFileName := '';

    FFileDataStart := -1;

    FFileDataEnd := -2;

    exit;

    end;

    //获取下个双引号"""之前的内容,即带源路径的文件名称

    longPos := longPos + length( strTemp );

    strTemp := '';

    for longIndex := longPos to FContentLength - 1 do

    if ContentData[ longIndex ] <> '"' then

    strTemp := strTemp + ContentData[ longIndex ]

    else break;

    FFileName := strTemp;


    4、获取文件数据的在请求信息内容中的开始、结束位置

    //文件数据开始位置在文件名称后的第一个#13#10#13#10之后

    delete( ContentData, 1, longIndex );

    strTemp := #13#10#13#10;

    FFileDataStart := longIndex + pos(strTemp, ContentData) + length(strTemp) - 1;


    //文件数据结束位置在下一个#13#10和分界符之前

    //由于文件数据可能包含非法字符,不能再用字符串定位函数POS

    //查找下一个分界符的位置

    FFileDataEnd := FFileDataStart;

    intDelimterLength := length( FDelimeter );

    FindEndOfFileData := false;

    while FFileDataEnd <= FContentLength - intDelimterLength do

    begin

    FindEndOfFileData := true;

    for ALongInt := 0 to intDelimterLength - 1 do

    if Byte( FDelimeter[ ALongInt + 1 ] ) <>

    FContentData[ FFileDataEnd + ALongInt ] then

    begin

    FindEndOfFileData := false;

    break;

    end;

    if FindEndOfFileData then break;

    FFileDataEnd := FFileDataEnd + 1;

    end;

    if not FindEndOfFileData then FFileDataEnd := FFileDataStart - 1//未找到分界符

    else FFileDataEnd := FFileDataEnd - 3;//分界符,向前跳过#13#10

    end;


    (三)向Asp程序传递信息

    在进行了(二)的操作之后,我们的上载组件可以根据Asp程序的要求向其传递数据了。目前可以提供的数据有:客户端源文件名称(FFileName,含路径)、文件大小(FFileDataEnd-FFileDataStart+1)。

    首先应该在TLB设计窗口中声明如下两个方法GetFileName和GetFileSize。

    1、返回客户端源文件名称(含路径)

    //返回客户端源文件名称(含路径)

    function TUploadFile.GetFileName: OleVariant;

    begin

    result := FFileName;//客户端源文件名称(含路径)

    end;

    2、返回文件大小

    //返回文件大小(Bytes)

    function TUploadFile.GetFileSize: OleVariant;

    begin

    result := FFileDataEnd - FFileDataStart + 1;

    end;


    (四)保存文件

    在进行了(二)的操作之后,我们的上载组件可以根据Asp程序的要求保存文件了。首先应该在

    TLB设计窗口中声明如下两个方法SaveFileAs和SaveFile。

    1、按指定文件名称保存文件

    //按指定的文件名称保存文件,参数FileName为指定的文件名称,返回值True表示文件保存成功

    function TUploadFile.SaveFileAs(FileName: OleVariant): OleVariant;

    var

    longIndex : LongInt;

    AFile : file of byte;//以二进制的形式保存文件

    byteData : Byte;

    begin

    result := true;

    try

    assign( AFile, FileName );

    rewrite( AFile );

    for longIndex := FFileDataStart to FFileDataEnd do

    begin

    byteData := Byte( FContentData[ longIndex ] );

    Write( AFile, byteData );

    end;

    CloseFile( AFile );

    except

    result := false;

    end;

    end;

    2、按缺省文件名称保存文件

    //按缺省文件名称保存文件,将文件以同名文件保存在调用页面所在目录

    function TUploadFile.Savefile: OleVariant;

    var

    CurrentFilePath : string;

    begin

    //获取调用页面所在目录

    CurrentFilePath := FScriptingContext.Request.ServerVariables['PATH_TRANSLATED'];

    CurrentFilePath := ExtractFilePath( CurrentFilePath );

    //保存文件

    result := SaveFileAs( CurrentFilePath + ExtractFileName( FFileName ));

    end;


    三、上载组件应用举例

    在我们的例子中,DelphiUp.HTM是文件上载界面,DelphiUp.ASP用来执行文件上载操作。

    DelphiUp.ASP的代码如下:

    <!--DelphiUp.ASP:文件上载处理页面-->

    <html><head><title>文件上载</title></head><body>

    <% dim Upload, FileName

    set Upload = Server.createObject("MyUpload.UploadFile")

    FileName = Upload.GetFileName

    Response.Write "<br>正在保存文件《"&FileName&"》......"

    if Upload.SaveFile then

    Response.Write "<br>文件《"&FileName&"》上载成功。"

    Response.Write "<br>文件大小为"&Upload.GetFileSize&"字节。"

    else

    Response.Write "<br>文件《"&FileName&"》上载失败。"

    end if

    set Upload=nothing %>

    </body></html>


    四、几点说明

    1、由Delphi自动生成的源代码编译的DLL文件大小有215K,可以在

    ASPTypeLibrary_TLB.PAS的Interface段中将Uses中的单元除ActiveX外全部删除,在

    MyUpload_TLB.PAS中删除Uses中所有单元,则生成的DLL文件大小可减少到61K。

    2、以上方法同样适用于CGI程序,不过要用TWebRequest对象。


    以上程序在PWIN98+Delphi3.0+PWS4.0下调试通过。
    本文来源于悠悠博客 http://www.ajaxstu.com/ , 原文地址:http://www.ajaxstu.com/archives/2684_HD.html


     

    展开全文
  • java范例开发大全

    2013-03-08 20:06:54
    实例216 动态的数组链表 382 实例217 你能猜出鱼是谁宠物吗? 387 实例218 使用Collections类对List排序操作 393 实例219 LinkedList添加删除操作 395 实例220 运用Vector 397 实例221 改变Properties文件中...
  • 随着Inteme=t的普及,越来越多的...包括常见网站的信息管理的各个方面完整地实现7网站对信息的管理要求;并且方 便移植,针对不同的学校或相关单位,只需要稍作修改就可以开发出适合本部门特 点的信息管理系统等特点。
  • 《C#开发实例大全(基础卷)》筛选、汇集了C#开发从基础知识到高级应用各个层面约600个实例及源代码,每个实例都按实例说明、关键技术、设计过程、详尽注释、秘笈心法顺序进行了分析解读。全书分6篇共25章,主要...
  • 系统不但拥有供求信息、产品库、品牌、价格行情、报价、公司库、展会等常见的B2B功能,而且开发了专业市场、行业百科、招聘等专业的B2B平台功能; 强大的缓存功能 系统提供了数据库缓存、文件缓存、程序缓存功能...
  • web页面需要动态展示网站的业务数据,所以开发我们一般采用web的MVC模式的框架,struts2是比较主流的web的框架。web页面中表单的录入、修改是非常常见的普遍功能,积累一套表单控件的开发技巧,对web应用的开发效率...

             web页面需要动态展示网站的业务数据,所以开发我们一般采用web的MVC模式的框架,struts2是比较主流的web的框架。web页面中表单的录入、修改是非常常见的普遍功能,积累一套表单控件的开发技巧,对web应用的开发效率会提升很大。以前没有web框架时,大量使用js在表单中控制赋值回写等,现在有了好的web框架,带来了很多方便,下面以struts2为例,对常见的表单控件(如checkbox,select,radio等)的赋值、回写等功能做一个介绍。

    直接显示值

          <s:property value="require.reqtitle"/>

    input控件

    赋值回写:

            <input type="text" name="require.reqtitle" id="reqtitle" value="<s:property value="require.reqtitle"/>" class="inputfen" />

    select控件

    赋值回写:

            <s:select list="#{'image':'影像产品','topic':'专题产品'}" name="requireImgDo.productType" id="productType" listKey="key" listValue="value"  />

    radio控件

    赋值回写:
       <s:radio list="#{'1':'先生','0':'女士'}" name="gender" value="1"/>
      <s:radio list="#{ 'year':'年度' , 'halfyear':'半年' , 'quarter':'季度'}" name="requireTopicDo.timeflag"  id="timeflag" listKey="key" listValue="value" value="%{requireTopicDo.timeflag==null?'year':requireTopicDo.timeflag}"></s:radio>

    checkbox控件

    赋值回写:
        <s:checkboxlist name="user_type_list" list="#{'0':'用户1','1':'用户2','2':'用户3'}"  value="%{ttsList}"></s:checkboxlist>  
    注意,此处name为表弟form映射的属性,ttsList为返回的值,结构应为List<String>,如下:
    可以在action中定义代码:
    private List ttsList = new ArrayList();   
        public List getTtsList() {   
            return ttsList;   
        }  
    业务逻辑对 ttsList变量进行赋值,这样表单页面中就会写入相应选中的checkbox了。

    展开全文
  • 我们经过对国内数千家中小型企业网站功能集中分析开发出了企业网站在互联网应用中最常见和最常用功能管理模块。易迅系统操作简单、安装方便、管理轻松等诸多优点,即使您没有网站布署经验也可轻松使用。系统基本...
  •  第1章介绍了iOS的开发背景以及本书约定。  第2章使用故事板技术创建了HelloWorld,同时讨论了iOS工程模板、应用的运行机制和生命周期、视图器的生命周期等,最后介绍了如何使用API帮助文档和官方案例。  第3章...
  • java范例开发大全源代码

    热门讨论 2011-10-30 23:31:51
     第1章 Java开发环境搭建(教学视频:9分钟) 2  1.1 理解Java 2  1.2 搭建Java所需环境 3  1.2.1 下载JDK 3  1.2.2 安装JDK 4  1.2.3 配置环境 5  1.2.4 测试JDK配置是否成功 7  实例1 ...
  • 说到web业务系统,很多人会下意识的认为Web业务系统 = 网站,但实际上,我们通常所说的Web业务系统指的是利用各种动态Web技术开发的基于B/S(浏览器服务器)模式的事务处理系统。比如:ERP系统、CRM系统以及常见的网站...
  • 系统功能完善,包括常见网站的信息管理的各个方面完整地实现了网站对信息的管理要求;并且方便移植,针对不同的学校或相关单位,只需要稍作修改就可以开发出适合本部门特点的信息管理系统等特点。

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 332
精华内容 132
关键字:

常见的开发动态网站的模式