再见西城 发表于 2015-1-16 23:41:04

ASP网站制作之Portal Starter 源码深切分析(一)

asp是基于web的一种编程技术,可以说是cgi的一种。它可以完成以往cgi程序的所有功能,如计数器、留言簿、公告板、聊天室等等。PortalStarter源码深切分析(一)
学ASP.net光看书看来是不可的,找一些典范的源代码来读读,对提拔熟悉是很有匡助的。
在Microsoft的网站上找到几个典范,选择Portal是由于这个典范最年夜,可作为一个复杂的流派站。
Portal的事情流程:
1、读取网站设置文件PortalCfg.xml至context中缓存起来,这个历程由Global.asax中的Application_BeginRequest()事务来完成的。
2、客户会见Portal站,实行Default.aspx,Default.aspx判别客户端是Mobile仍是扫瞄器,假如是后者,引诱客户至DesktopDefault.aspx
3、DesktopDefault.aspx完成网站各个栏目标展现和各个栏目中响应模块的加载。
剖析Global.asax中的Application_BeginRequest()事务:

SubApplication_BeginRequest(ByValsenderAsObject,ByValeAsEventArgs)
默许会见主页
DimtabIndexAsInteger=0
DimtabIdAsInteger=1

GetTabIndexfromquerystring
IfNot(Request.Params("tabindex")IsNothing)Then
tabIndex=CInt(Request.Params("tabindex"))
EndIf

GetTabIDfromquerystring
IfNot(Request.Params("tabid")IsNothing)Then
tabId=CInt(Request.Params("tabid"))
EndIf

AddthePortalSettingsobjecttothecontext
PortalSetting在ComponentsConfiguration.vb中界说,其感化是依据传进的tabIndex,tabId加载响应栏目标元素。
Context用来缓存响应栏目标设置。
Context.Items.Add("PortalSettings",NewPortalSettings(tabIndex,tabId))

ReadtheconfigurationinfofromtheXMLfileorretrievefromCache
andaddtothecontext
Configuration类在ComponentsConfiguration中界说,其感化是操纵Portal网站的设置文件PortalCfg.xml文件。
一样是将设置文件缓存到Context中,如许网站的任何部分都能够会见到这些设置。
DimconfigAsConfiguration=NewConfiguration()
Context.Items.Add("SiteSettings",config.GetSiteSettings())

Try
IfNot(Request.UserLanguagesIsNothing)Then
Thread.CurrentThread.CurrentCulture=CultureInfo.CreateSpecificCulture(Request.UserLanguages(0))
DefaulttoEnglishiftherearenouserlanguages
Else
Thread.CurrentThread.CurrentCulture=NewCultureInfo("en-us")
EndIf
Thread.CurrentThread.CurrentUICulture=Thread.CurrentThread.CurrentCulture
CatchexAsException
Thread.CurrentThread.CurrentCulture=NewCultureInfo("en-us")
EndTry
EndSub
剖析NewPortalSettings(tabIndex,tabId),请看上面PortalSettings的机关函数:
PublicClassPortalSettings
PublicPortalIdAsInteger
PublicPortalNameAsString
PublicAlwaysShowEditButtonAsBoolean
PublicDesktopTabsAsNewArrayList()
PublicMobileTabsAsNewArrayList()
PublicActiveTabAsNewTabSettings()
......

PublicSubNew(ByValtabIndexAsInteger,ByValtabIdAsInteger)

Gettheconfigurationdata
DimconfigAsConfiguration=NewConfiguration()
经由过程Configuration类中的GetSiteSettings()将PortalCfg.xml文件导进到Context中,
随后经由过程前往值赋值给siteSettings,siteSettings被界说为一个加强型的Dataset类。
DimsiteSettingsAsSiteConfiguration=config.GetSiteSettings()


ReadtheDesktopTabInformation,andsortbyTabOrder
读取Tab信息,也就是Portal网站的栏目信息,放到DesktopTabs中。
DimtRowAsSiteConfiguration.TabRow
ForEachtRowInsiteSettings.Tab.Select("","TabOrder")
DimtabDetailsAsNewTabStripDetails()

WithtabDetails
.TabId=tRow.TabId
.TabName=tRow.TabName
.TabOrder=tRow.TabOrder
.AuthorizedRoles=tRow.AccessRoles
EndWith

Me.DesktopTabs.Add(tabDetails)
Next

IfthePortalSettings.ActiveTabpropertyissetto0,changeitto
theTabIDofthefirsttabintheDesktopTabscollection
IfMe.ActiveTab.TabId=0Then
Me.ActiveTab.TabId=CType(Me.DesktopTabs(0),TabStripDetails).TabId
EndIf


ReadtheMobileTabInformation,andsortbyTabOrder
DimmRowAsSiteConfiguration.TabRow
ForEachmRowInsiteSettings.Tab.Select("ShowMobile=true","TabOrder")
DimtabDetailsAsNewTabStripDetails()

Withtabdetails
</p>大家可以自己去看一看.可以说看得想呕吐.以前有次下了个动网来看.里面连基本内置函数的保护措施(函数没防御性)都没有.难怪经常补这个补那个了.可能现在.NET版会好点吧

admin 发表于 2015-1-20 11:06:29

还有如何才能在最短的时间内学完?我每天可以有效学习2小时,双休日4小时。

第二个灵魂 发表于 2015-1-24 09:52:33

Application:这个存储服务端的数据,如果不清除,会直到web应用程序结束才清除(例如重启站点)

分手快乐 发表于 2015-1-27 19:55:03

Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件

蒙在股里 发表于 2015-2-5 08:55:19

代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。

若天明 发表于 2015-2-11 08:17:39

最近在学asp,不要问我为什么不直接学.net,因为公司网站是asp做的所以有这个需要,卖了本书asp入门到精通,对里面的六大内置对象老是记不住,还有很多属性和方法看的头晕。

愤怒的大鸟 发表于 2015-3-11 01:36:07

如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助:

飘灵儿 发表于 2015-3-17 18:09:20

它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。

精灵巫婆 发表于 2015-3-24 17:23:30

弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。
页: [1]
查看完整版本: ASP网站制作之Portal Starter 源码深切分析(一)