介紹 ASP(Active Server Pages)是一種服務器方的腳本技術,它動態地定位和發送由用戶請求的信息。為了成功地使用ASP,你應該在開發和管理你的項目的實踐中,使用計劃。本文是為系統管理員,網絡作家,及計劃或考慮使用ASP的網絡應用程序開發人員而編寫的。本文中的信息將會幫助你計劃開發和管理安全的,組織良好,易于理解的ASP應用程序。
ASP或瀏覽器腳本
給定對一個腳本解決方案的需求后,你將會想要判斷是編寫ASP頁面還是編寫基于瀏覽器的腳本,并且你還會想要在開發過程的初期就進行這一判斷。
計劃使用ASP,當你需要:
定制帶有從后端資源收集并進行挑選以滿足用戶的需要的信息的網頁。 收集由站點訪問者通過HTML表單提交的數據。 發送為特定種類和版本的瀏覽器制作的頁面。 為了避免在你的服務器上放置不必要的負擔,為這樣的任務如確認用戶提交的數據,計算,及簡單條件輸出的選擇計劃使用基于瀏覽器的腳本。
本文包括ASP應用程序計劃的三個方面:
解決常見問題 組織ASP應用程序目錄和文件 為ASP腳本設置標準 ASP開發的其他方面,如性能和可靠性,將在以后的文章中介紹。
盡管ASP頁面很有用,但是知道開發和配置他們的一些風險是很重要的。如果ASP頁面連接的用戶帶有包含有關怎樣定位和訪問企業數據的信息的后端數據資源,那么這個頁面也可能包含你的企業商業規則,顧客數據,以及其他敏感信息。結果,知道存在將敏感信息顯露給不被許可的人的潛在可能性是很重要的。當開發和配置ASP時,可能會產生錯誤而允許不應該訪問的人訪問到這個信息。此外,如果你沒有使用好的開發和管理實踐,你可能會由于不斷產生性能和可靠性問題,滿意的用戶越來越少兒不得不終止。
ASP管理計劃
ASP應用程序存儲在你的文件系統中。一個ASP應用程序是ASP頁面的一個集合連同所包含的HTML頁面和這個應用程序所需要的組件。當你定義一個應用程序時,你利用Internet服務管理器來制定這個應用程序在網站中的起始目錄。
這一部分提供目錄結構的一個模板和指導,以及ASP應用程序的訪問權限。下面的模板將幫助你建立一個ASP應用程序組織模型,實現一致性,可靠性和安全性,而不管你的ASP應用程序有多大多復雜。
為下面列表中目錄和文件給定的組織和屬性比使用的名字更重要。
/Application_Name
Default.htm Global.asa /Classes /Content /ASP *.asp /HTM *.htm /Images /Media /Themes
/Data (不在站點目錄中) /DLL (不在站點目錄中) /Helper_Files (不在站點目錄中)
應用程序根目錄 應用程序根目錄的名字因該清楚地表達這個站點的主題。例如,用于金融搜索的應用程序可以命名為/Financial_Research。避免使用可能被誤認為是一個站點的邊準子目錄的應用程序根目錄名,如/Media or /Content。還有,避免使用讀起來像是部分數字或代碼的名字,如/FR98346A。
為了避免對產品站點產生負面影響,一定要在一個開發測試環境中開發這個應用程序。實現這個的一個簡單方法是在IIS HTTP根目錄/InetPub/wwwroot下開發新的應用程序,然后將他們拷貝到產品環境中InetPub/wwwroot下的相同目錄中,如果這些目錄已經存在。
注意 /InetPub/wwwroot時所有Microsoft® Visual InterDev™ 和 Microsoft FrontPage™網絡文檔的主位置。如果將一個網絡應用程序遷移到一個存儲位置而不是/InetPub/wwwroot下,這些工具將不能訪問它。
每個應用程序的根目錄應該至少包含如下這些文件:
Default.htm 或 Default.asp Global.asa Default.htm 或 Default.asp應該是應用程序的缺省主頁,并且服務器默認值應該利用Internet服務管理器據此設置。采取這兩個步驟使用戶能夠通過鍵入服務器地址加上應用程序根目錄的名字而一致地在你的公司中找到站點。例如,用戶可以通過輸入msdn.microsoft.com訪問MSDN Online。輸入主頁的名字是不必要的。
文件Global.asa指定事件腳本,聲明擁有應用程序或對話域的對象,及聲明類型庫。例如,Global.asa腳本使application- 和session-scope變量在啟動時可用。Global.asa必須存儲在應用程序根目錄中。
/Classes /Classes目錄存儲由應用程序使用的所有Java類,并請求執行權限。
/Content /Content保存所有頁面(除Default.htm以外)及可能被站點的用戶直接取還的媒體。
/ASP /Content 的/ASP子目錄包含帶有服務器端腳本的所有頁面。這個目錄必須包含執行權限,以便這個ASP能夠執行這個頁面腳本。不要向這個目錄分配讀權限,因為.asp頁面可能包含有關商業規則及到數據資源的訪問權的敏感信息。將所有的腳本頁面存儲在這里簡化了權限管理和站點安全性。
/HTM /Content 的/HTM子目錄包含所有只包含標準HTML的頁面。這個目錄是只讀的,并且沒有執行權限。包含存儲在這里的服務器方腳本的頁面將不會執行。
/Images 作為/Content的一個子目錄,/Images文件夾應該包含與主題相關圖像單獨使用的圖形,如標準按鈕和圖標(如下)。
/Media作為/Content的一個子目錄,/Media應該包含子目錄audio, images, animation files, .avi files及用于整個應用程序類似條目。
/Themes它是/Content目錄的一個子目錄。利用/Themes目錄使程序能夠改變一個站點的面貌。這個目錄應該包含樣式表,bullets,按鈕,圖標,規則,以及組織起來以便你能夠通過簡單地改變任何或所有與這個主題有關的條目改變應用程序的面貌的類似條目。/Theme目錄中的每個條目可以通過向它的虛擬路徑設置一個應用程序變量來動態地連接。
/Data這個目錄應該包含所有數據庫訪問信息,如SQL腳本,基于文件的數據組名字或其他這個應用程序所需的類似的數據。不要將這個目錄放在這個站點目錄下,因為這會給一個未授權的用戶到商業規則及私有數據的訪問權。
/DLLs這個目錄包含COM組件和Visual Basic® 6.0運行事件DLLs,如Vbrun500.dll 和 Msvbvm50.dll。不要將這個目錄放在這個站點目錄下,因為這個會給一個黑客到商業規則和私有數據的訪問權。
/Helper_Files這個目錄保存服務器方包含或文本格式的文件,這個文本格式的文件使信息跨越應用程序或許多應用程序可用。由于安全性原因,這個包含幫助文件的目錄應該存儲在已發行的網絡空間中(用戶可以確認的網站目錄)。
文件-擴展名標準
在這個部分中提供的文件命名協定為可靠的,一致的,和安全的文檔頁面提供有用的標準。
使用.asp擴展名是包含服務器方腳本的頁面必須的。為將來可能包含腳本的頁面使用.asp擴展名是一個好的策略,即使他們開始不是這樣。為了保存服務器資源及在服務業面時最小化延遲,需要為現在和將來都不需要服務器方腳本程序的文件使用.htm擴展。
為了一致性和易于維護,使用包含文件(.inc)使指定的信息對多于一個的相關頁面可用;對包含文件的改變被分配到調用他們的所有頁面。為包含在頁面種的純文本格式的數據文件,使用文本文件(.txt)。
不要為包含腳本的頁面使用.inc。如果一個用戶管理顯示這樣的頁面,這個腳本種的所有商業規則都會顯露出來。為所有包含腳本的頁面或計劃使用腳本的文件使用.asp擴展名,來避免顯示在ASP腳本中編碼的所有權信息。
設置腳本標準
如果你已經組織,命名,并保護你的ASP應用程序空間,那么計劃并設置一個好的ASP的任務就完成了一半。你還將想要為頁面腳本建立標準來使他們易于被小組種的所有頁面作者閱讀。
可讀性腳本樣式
為了增強可讀性,建立為ASP頁建立如下腳本樣式。這些樣式適用于利用Microsoft Visual Basic® Scripting Edition (VBScript) 或 JScript®編寫的腳本。當利用目錄和文件協定時,解決下面的問題比準確地應用給定的協定更重要。當決定是否定義你的腳本協定時,還要考慮大多數ASP頁面包含一些純粹的HTML這個事實。
這一部分將使你開始建立腳本標準。最近在這個站點上將發行一個內容更廣泛的腳本樣式指導參考。
腳本中的說明 說明應該能夠幫助所有的腳本察看代碼作者立即開始理解它。另外,注釋應該解釋代碼的意圖或總結代碼做什么,而不是簡單地重復代碼所說的。
在每頁的頂部附近編寫一致的注釋塊列出文件名,開發這個文件的工作組(不是個人;電子郵件應該到一個工作組別名),文件被開發的日期,所遵循的HTML和腳本標準,過去所有改變的說明。
利用注釋來解釋晦澀或者復雜的代碼,也就是說,將會花費一個腳本作者超過幾秒鐘的時間來理解的任何代碼。對于下面這樣的句子一定要加入注釋:
If Err = LOCK Then
外部注釋的腳本應該被刪除,除非他們是占位符,在這種情況下他們應該被加上這樣的標簽。
在每個注釋中插入相應的代碼。行內注釋應該在相應代碼后面顯示兩個空格。在新的一行上開始的注釋應該被一個空白行分開。
例子:
<% Dim intVariable 'Explicitly declare variable.
'Assign the variable an integer value.
intVariable = 5 %>
如果一個注釋跨越了多個行,每個行必須以標準的VBScript注釋符號(')開始。比較大的,多語句的注釋塊的格式如下:
例子
Sub ShowIt()
'====================================== 'This procedure is called when the 'user selects a language. ' 'It displays an appropriate select 'item based on their language choice. ' 'The method choices are each contained 'in a separate div. '======================================
Dim vntCurrLang vntCurrLang = document.all.langselect.value Select Case vntCurrLang Case "C" document.all.cdiv.style.display = "" Case "VB" document.all.vbdiv.style.display = "" Case "J" document.all.javadiv.style.display = "" End Select End Sub
Jscript中多行注釋以/*開始,以*/結束。比較大的,多語句的注釋塊的格式見下面的例子。
例子:
function showIt()
/******************************************* ** This is a large comment block. ** ** This procedure is called when the user ** selects a language. ** ** It displays an appropriate select item ** based on their language choice. ** ** The method choices are each contained ** in a separate div. *******************************************/
{ var vntCurrLang = document.all ... }
常數名稱 當命名常數以便把他們與其他元素區分開時全部使用大寫。必要時,可以在術語間使用一個下畫線。
例子:
Const MIN_QUAL = 25
環境轉換 為了可讀性,盡量減少HTML和腳本間的轉換。如果可能,在頁面上使用幾個大的腳本塊代替數目更多的分散的代碼段。
縮排 縮排使代碼的邏輯結構更清晰。
將一個由多行代碼腳本放置在腳本分割符下面的一行上,進行模塊化并把它縮進兩個空格。在同一行上放置一個單行的腳本作為分隔符。
縮進ASP分隔符(<% U %>)至少兩個空格。此外,為如下內容加入兩個空格:
邏輯中的中斷。 嵌套語句或HTML語句。 函數體。 來自控制代碼的循環體。 如下例子說明利用VBScript或Jscript編寫的腳本的縮進規則。
單行腳本
<% Dim strLastName %>
帶有嵌套腳本:
<% 'This example demonstrates a script with 'a nested block of logic.
Dim vntOutput Set vntExample = Server.CreateObject("MyComponents.Component.1") vntOutput = varExample.Text
If vntOutput = "" Then Response.Write "An error has occurred" Else Response.Write vntOutput End If %>
利用VBScript編寫一個腳本函數:
<% Function CalcMortgageRate() Statement_1 End Function %>
利用Jscript編寫一個腳本函數:
<% //This is an example of a function.
function calcMortgageRate() { statement1 statement2 } %>
結論
如果你建立并維護好的目錄結構和權限,及有效的頁面腳本標準,你將會發現你的ASP應用程序更易管理,更安全,并且容易被系統管理員和開發小組閱讀和理解。
|