用ISAPI方式實現Web頁面的自動更新 (轉)
用IS方式實現頁面的自動
作者:崔本強
對於某些網站管理員來說,最痛苦的事情莫過於每天必做的重複工作。譬如:從新聞頁面中刪除舊的新聞標題,換上新的新聞標題;如果想讓讀者能看到以前的新聞,還要更改隨時間改變的FormField值。等等。用編寫一個WebServer端的ISAPI,可以大大減輕工作量。
---- ISAPI方式的端程式,有以下特點:開銷小,多個客戶端連結與一個連結記憶體開銷等同;速度快。由於DLL執行一次後便常駐記憶體,當有新的連結時,直接從記憶體傳送資料,有效地提高了速度。
---- 我用DELPHI4編寫的這個程式,具有以下功能:
---- 1、根據日期變化,自動修改FormField的時間值(此值宮端選擇)。
---- 2、自動生成新聞目錄。管理者只需把新的新聞複製至此目錄即可,程式能自動生成新聞首頁的頁面。
---- 重點:
---- 1、在一個目錄中搜尋符合條件的,返回控制程式碼: HANDLE FindFirstFile(LPCTSTR lpFileName,LP_FIND_DATA lpFindFileData);
---- 2、根據FindFirstFile返回的控制程式碼繼續搜尋下一個檔案: BOOL FindNextFile(HANDLE hFindFile,LPWIN32_FIND_DATA lpFindFileData );
---- 3、關閉指定搜尋控制程式碼: BOOL FindClose(HANDLE hFindFile);
---- 4、WIN32_FIND_DATA該結構FindFirstFile和FindNextFile找到檔案的各項資訊,其結構如下:
typedef struct _WIN32_FIND_DATA {
D dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
DWORD dwReserved0;
DWORD dwReserved1;
TCHAR cFileName
[ MAX_PATH ];
TCHAR cAlternateFileName[ 14 ];
} WIN32_FIND_DATA;
程式的action內容:
name
pathinfo
enabled
updata
WebActionItem1
/DispNews true
如下:
unit Unit1;
interface
uses
, Messages,
SysUtils, Classes,
HTTPApp,Api, ExtCtrls;
type
TWebModule1 = class(TWebModule)
Timer1: TTimer;
procedure WebModule1updataAction
(Sender: T; Request: TWebRequest;
Response: TWebResponse;
var Handled: Boolean);
procedure WebModule1WebActionItem1
Action(Sender: TObject;
Request: TWebRequest; Response:
TWebResponse; var Handled: Boolean);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
WebModule1: TWebModule1;
implementation
{$R *.DFM}
//
//本部分是不帶入口的dll。
功能:生成新聞中心的首頁,
//主要目的是下拉選單
的時間動態改變
procedure TWebModule1.
WebModule1updataAction
(Sender: TObject;
Request: TWebRequest;
Response: TWebResponse;
var Handled: Boolean);
var :string;
var I:integer;
begin
DHTML:='< html >';
DHTML:=DHTML+'< head >';
DHTML:=DHTML+'< title >
新聞中心< /title >';
DHTML:=DHTML+'< /head >';
DHTML:=DHTML+'< body >';
DHTML:=DHTML+'< p >
請選擇日期:< /p >';
DHTML:=DHTML+'< fo
method="POST" action="AutoUpDt.dll/DispNews"';
DHTML:=DHTML+'< p >
< size="1" name="tm" >';
//下拉選單中包含
前推十天的日期
DHTML:=DHTML+'< option
selected value="'+FormatDateTime('mmdd',
date)+'" >今天< /option >';
DHTML:=DHTML+'< ption value="'
+FormatDateTime('mmdd', date-1)+'"
>昨天< /option >';
DHTML:=DHTML+'< option value="'
+FormatDateTime('mmdd', date-2)+'"
>前天< /option> ';
for i:=1 to 7 do
DHTML:=DHTML+'< option value="'
+FormatDateTime('mmdd',
date-2-I)+'" >'+FormatDateTime
('m"月"dd"日"', date-2-I)+'< /option >';
DHTML:=DHTML+'< /select >
< input type="submit" value="提交" name="B1" >';
DHTML:=DHTML+'< /p >';
DHTML:=DHTML+'< /form >';
DHTML:=DHTML+'< /body >';
DHTML:=DHTML+'< /html >';
Response.Content:=DHTML;
end;
//根據request傳送的引數
確定要顯示的檔案目錄
//並從該目錄中取
出所有的htm檔案
//如果沒有該目錄,
則向瀏覽器傳送提示資訊
procedure TWebModule1.
WebModule1WebAction
Item1Action(Sender: TObject;
Request: TWebRequest;
Response: TWebResponse;
var Handled: Boolean);
Var ReqDir:Tstrings;
//儲存Request要求的引數
Var DHTML,SeleDir:string;
var FileNameData:
WIN32_FIND_DATA;
var SearchFileHandle:THandle;
begin
ReqDir:=NIL;
ReqDir:=Request.
ContentFields;
DHTML:='< html >';
DHTML:=DHTML+'< head >';
DHTML:=DHTML+'
< title >新聞中心< /title >';
DHTML:=DHTML+'
< /head >';
DHTML:=DHTML+'
< body >';
DHTML:=DHTML+'
< p align="center" >
< font face="宋體" size="5"
color="#0000FF" >
新聞中心< /font >< /p >';
//DHTML:=DHTML
+ReqDir.Values['tm'];
SeleDir:=ReqDir.
Values['tm'];
// 獲得搜尋控制程式碼
SearchFileHandle:=FindFirstFile
(Pchar('C:MyWebnews'+SeleDir+'
*.htm'),FileNameData);
if SearchFileHandle< >
INVALID_HANDLE_VALUE then
begin
DHTML:=DHTML+'< P >< a
href="../'+SeleDir+'/'
+FileNameData.cFileName+'" >'
+FileNameData.cFileName+'
< /a >< /p >';
//根據搜尋控制程式碼向後搜尋
while FindNextFile
(SearchFileHandle,
FileNameData ) do
DHTML:=DHTML+'< P >< a
href="../'+SeleDir+'/'
+FileNameData.cFileName+'"
>'+FileNameData.cFileName+'
< /a >< /p >';
//關閉搜尋控制程式碼
fileClose(SearchFileHandle);
end
else
DHTML:=DHTML+'對不起,
沒有您需要的新聞';
DHTML:=DHTML+'< /body >';
DHTML:=DHTML+'< /html >';
Response.Content:=DHTML;
end;
//在上午八點到九點之間,
Timer被激發一次,建立下一天的資料夾
procedure TWebModule1.
Timer1Timer(Sender: TObject);
begin
if FormatDateTime('h',
time)='8' then
mkdir(IntToStr(StrToInt
(FormatDateTime('mmdd', date))+1));
end;
end.
---- 實際使用時,可根據自己的需要,將已有的Web頁面編輯程式序中;同時,編寫合適的時間處理修改FormField的值也是必須的,因為在本程式中,並未涉及到月初月末時間變化。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-995482/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用Web Datawindow ActiveX實現Web頁面的列印功能Web
- js實現 web頁面的滾動條下拉時載入更多JSWeb
- SAP UI5 Web Component不同React頁面的跳轉實現UIWebReact
- Web APP自動更新WebAPP
- 開啟網頁 自動提示選擇qq實現方式整理網頁
- python處理web網頁cookies實現自動登入PythonWeb網頁Cookie
- ISAPI 與CGI 的 比 較 及 其 實 現 (轉)API
- ASP.NET頁面重新整理:自動重新整理頁面的實現方法總結ASP.NET
- postman實現介面的自動化測試Postman
- 利用CGI方式實現Web查詢 (轉)Web
- Selenium自動化實現web自動化-1Web
- sqlalchemy實現時間列自動更新SQL
- 用 VB 實現表單的自動提交 (轉)
- redhat 9.0 中任務自動執行的實現方式 (轉)Redhat
- 輕鬆實現.NET應用自動更新:AutoUpdater.NET教程
- TabLayout + ViewPager +Fragment 實現頁面的動態重新整理TabLayoutViewpagerFragment
- js實現操作成功之後自動跳轉頁面JS
- iOS熱更新實現方式iOS
- 實現Web程式的自動登入Web
- 實現網頁自動重新整理網頁
- SpringMVC---02---實現頁面的跳轉 轉向與重定向SpringMVC
- 用C++Builder實現Word 97自動化 (轉)UI
- 用WebBrowser實現HTML介面的應用和互動WebHTML
- 用PHP動態生成虛擬現實VRML網頁 (轉)PHPVR網頁
- 用AutoLayout實現分頁滾動
- Android熱更新實現方式Android
- 滑鼠雙擊頁面實現自動滾動效果
- js網頁圖片每日自動更新JS網頁
- 觸發器實現表資料自動更新觸發器
- 簡單實現安卓app自動更新功能安卓APP
- Java Web 分頁實現JavaWeb
- 用CTI實現與Web交談 (轉)Web
- iOS開發登入頁面的實現iOS
- MyBatis實現分頁的方式MyBatis
- 分析nuget原始碼,用nuget + nuget.server實現winform程式的自動更新原始碼ServerORM
- [javascript]如何優雅的實現網頁自動滾動JavaScript網頁
- Win7 英文版 啟用自動更新後的不自動重啟方式Win7
- docker stack滾動更新web應用DockerWeb