| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1051 人关注过本帖
标题:动网论坛源代码解读及其向JSP的移植——第五章,探索Application中缓存的数 ...
只看楼主 加入收藏
京山游侠
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2006-2-12
收藏
 问题点数:0 回复次数:1 
动网论坛源代码解读及其向JSP的移植——第五章,探索Application中缓存的数据
根据前面几章的分析,我们可以看到index.asp的运行流程:
构造objForum对象...
构造objTemplates对象...
构造objUserOnline对象...
调用objForum.getForumSetting()...
调用objForum.checkUserLogin()...
调用main()...

我们知道了在objForum对象和objUserOnline对象的构造函数中进行的一些初始化操作,但是,一直到现在,我们还不清楚index.asp是怎样在浏览器中显示用户界面的。这一章,我们就来解决这个问题。

首先,我们再来复习一下Main()函数:
Sub Main()
Dvbbs.LoadTemplates("index")
If Dvbbs.BoardID=0 Then
Dvbbs.Stats=Replace(template.Strings(0),"动网先锋论坛",Dvbbs.Forum_Info(0))
Response.Write Dvbbs.mainhtml(18)
Dvbbs.Nav()
Dvbbs.ActiveOnline()
GetForumTextAd(0)
BoardList()
Else
Chk_List_Err()
TopicMode=0
If Request("topicmode")<>"" and IsNumeric(Request("topicmode")) Then TopicMode=Cint(Request("topicmode"))
If Dvbbs.Board_Setting(43)="0" Then
Dvbbs.Stats=Dvbbs.LanStr(7)
Else
Dvbbs.Stats=Dvbbs.LanStr(8)
End If
Response.Write Dvbbs.mainhtml(18)
Dvbbs.Nav()
Dvbbs.ActiveOnline()
Dvbbs.Head_var 1,Application(Dvbbs.CacheName&"_boardlist").documentElement.selectSingleNode("board[@boardid='"&Dvbbs.BoardID&"']/@depth").text,"",""
GetForumTextAd(1)
BoardList()
Page=Request("Page")
If ( Not isNumeric(Page) )or Page="" Then Page=1
Page=Clng(Page)
If Page <1 Then Page=1
If Dvbbs.Board_Setting(43)="0" Then
topicList()
End If
End If

Dvbbs.Footer
End Sub
首先,这个页面中先调用
Dvbbs.LoadTemplates("index")
然后判断Dvbbs.BoardID是否为零,分别进行不同的操作
我们先研究Dvbbs.BoardID=0时的情况
Dvbbs.Stats=Replace(template.Strings(0),"动网先锋论坛",Dvbbs.Forum_Info(0))
Response.Write Dvbbs.mainhtml(18)
Dvbbs.Nav()
Dvbbs.ActiveOnline()
GetForumTextAd(0)
BoardList()
最后,再调用Dvbbs.Foolter来显示页脚

先来看看Dvbbs.mainhtml(18)是一个什么内容,打开Dv_ClsMain.asp,在LoadTemplates函数里面可以看到:
mainhtml = Split(Main_Style(0),"|||")
可见mainhtml是一个数组,而Main_Style怎么来的呢?
Main_Style = Split(Main_Style,"@@@")
继续往上找:
Main_Style = Replace(Application(CacheName &"_style").documentElement.selectSingleNode("style[@id='"& SkinID &"']/@main_style").text,"{$PicUrl}",Forum_PicUrl) '风格图片路径替换

哦,原来他们都是从Application变量中来的,而且我们可以看到Application中储存的一定是xml格式的数据。
那么,Application中究竟缓存了哪些东西呢?我今天决心一探究竟。
搜索更多相关主题的帖子: 源代码 缓存 Application JSP 
2006-06-14 21:11
京山游侠
Rank: 1
等 级:新手上路
帖 子:96
专家分:0
注 册:2006-2-12
收藏
得分:0 
怎么样寻找这些变量呢?没有别的办法,只有按照动网论坛执行的流程一个个函数查看。

1。Cls_Forum的构造函数:没有设置Application变量和Session变量
2。Cls_UserOnlne的构造函数:调用了RefreshOnlineNum()
3。Cls_UserOnlne的RefreshOnlineNum函数:调用了Cls_Forum的Let Value属性
4。Cls_Forum的Let Value属性向Application变量里面存入了以下几个值:
Application('DvCache_Forum_Online_-time'):2006-6-15 0:37:23
Application('DvCache_Forum_Online'):1
Application('DvCache_Forum_UserOnline_-time'):2006-6-15 0:37:23
Application('DvCache_Forum_UserOnline'):0

这些值是关于在线用户数的,而且成对出现,包含时间信息,说明这些值是定时刷新的。

5。Cls_Forum的GetForum_Setting函数:该函数应该是向Application里面存入变量的主要函数,很多数据以xml的形式缓存于Application中
6。Cls_Forum的GetForum_Setting函数调用UpdateForum_Info函数,这个函数里面首先更新了以下四个变量:
Forum_YesterdayNum
Forum_TodayNum
Forum_LastPost
Forum_MaxPostNum

然后影响了
Application("DvCache_boardlist")
写到这里,我们要暂时中断一下,我们已经涉及了哪些数据表呢?
看看以下语句:
Set Rs=Dvbbs.Execute("Select Count(*) From Dv_Online")
Set Rs=Dvbbs.Execute("Select Count(*) From Dv_Online Where UserID>0")
Set Rs=Execute("Select Top 1 Forum_YesterdayNum,Forum_TodayNum,Forum_LastPost,Forum_MaxPostNum From Dv_Setup")
Execute("Update Dv_Setup Set Forum_YesterdayNum="&Forum_TodayNum&",Forum_LastPost='"&TempStr&"',Forum_TodayNum=0")
Execute("update Dv_board Set TodayNum=0")

根据这些语句,再结合动网的数据库文件,我们不难在mysql上建立相同的数据表。

下面,我们接着看GetForum_Setting函数,它接着调用LoadBoardList()和Loadstyle(),分别设置如下变量:
Application("DvCache_boardlist")
Application("DvCache_boardmaster")
Application("DvCache_sboardlist")
Application("DvCache_style")

而且我们也可以找到相应的sql语句,这里我就不列出来的。

[此贴子已经被作者于2006-6-15 22:32:22编辑过]


相濡以沫,不如相忘于江湖
2006-06-15 00:34
快速回复:动网论坛源代码解读及其向JSP的移植——第五章,探索Application中缓存 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014950 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved