yinxing.!!-不斷學習...

          老老實實做人,認認真真做事..走自己的路,讓別人打的去吧.~

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            5 Posts :: 5 Stories :: 2 Comments :: 0 Trackbacks

          2006年12月13日 #

          在使用ASP.NET開發應用程序時需要注意的10個技巧,這些技巧涉及從缺省的控件、表單名的改變到StringBuilder類的使用,有助于編程人員能夠盡快地適應.NET環境。 1、在使用Visual Studio .NET時,除直接或非引用的對象外,不要使用缺省的名字。
          .NET帶來的好處之一是所有的源代碼和配置文件都是純文本文件,能夠使用Notepad或WordPad等任意的文本編輯器進行編輯。如果不愿意,我們并非一定要使用Visual Studio .NET作為集成開發環境。但使用了Visual Studio .NET,我們可以在Windows文件管理器中看到文件,或在Visual Studio .NET之外從文本編輯器中瀏覽文件的內容。
          使用Visual Studio .NET作為集成開發環境有許多好處,其中最顯著的好處是它極大地提高了生產效率。使用Visual Studio. NET,我們能夠在付出較小代價的情況下更快地開發軟件。作為集成開發環境一部分的IntelliSense提供自動的代碼完成、在輸入方法或函數時提供動態幫助、語法錯誤的實時提示,以及其他能夠提高生產效率的功能。
          象其他復雜的工具那樣,在學會如何充分發揮它的作用和掌握其“習性”前,Visual Studio .NET也會使我們產生一種挫折感。有時,它象一個難以了解的黑盒子,會生成大量的文件和許多無用的代碼。
          Visual Studio .NET的一個功能是,無論是類、控件或表單中的對象,它都能夠為新對象提供缺省名字。例如,如果我們創建了一個新的ASP.NET Web Application,其缺省的名字將是WebApplication1。我們可以在“新工程”對話框中方便地改變該應用的名字,但同時改變的只是該應用程序的名字空間的名字及其所在的虛擬目錄,源代碼文件的缺省名字仍然是WebForm1.aspx和WebForm1.aspx.cs(C#工程)或WebForm1.aspx.vb(VB.NET工程)。

          我們可以在方案瀏覽器中改變ASPX和代碼使用的文件名字,但Web頁類的名字仍然將是WebForm1。如果在該Web表單上生成一個按鈕,其缺省的名字將是Button1。事實上,所有控件的名字都是由控件的類型和數字組成的。
          我們能夠,也應該將應用程序中所有的表單和控件的名字都修改成有意義的名字。對于較小的演示性程序而言,缺省的名字還能夠勝任,但如果應用程序由多個表單,每個表單上有許多按鈕和標簽時,象frmStartup、frmDataEntry和frmReports這樣的表單名就比Form1、Form2和Form3這樣的名字更易于理解和維護。
          如果表單上控件要在代碼的其他地方引用,使它有一個有意義的名字就更重要了。btnOK、btnCancel和btnPrint這樣的名字使看代碼的人更容易理解,因而,也比名字為Button1、Button2、Button3這樣的控件更容易維護。
          修改一個工程中所有文件中出現的一個名字的一個好方法是,在Visual Studio .NET菜單中依次選擇“編輯”->“發現和替換”->“替換”命令。
          在看二周前編寫的代碼時,我們經常就象第一次見到這些代碼一樣,因此使它們有一個有助于我們理解其含義的名字是十分有必要的。


          2、即使不使用Visual Studio .NET進行編程,使用代碼支持文件也有利于提高應用程序的性能
          在Web應用程序、Web服務或Web控件等所有的ASP.NET Web工程中,Visual Studio .NET都使用代碼支持文件。代碼支持文件使工程具有更好的組織、模塊性,更適合多人組成的開發團隊。另外,它還會帶來性能的提高。
          代碼支持文件的內容被編譯成一個組合文件中的類,一般是一個DLL文件,有時也可以是EXE文件。該文件駐留在應用程序的組合體高速緩沖區中,在應用程序啟動時,可以立即得到它。
          如果代碼是包含在<script>標記中或ASPX文件代碼中,它仍然會被編譯成一個Web頁類。在這種情況下,每當該網頁在應用程序對話中第一次加載時,都需要重新進行編譯,被編譯的類就會駐留在內存中。每當計算機啟動、IIS停止、重新啟動或者源代碼、配置文件改變時,該文件必須重新編譯。盡管不大,但這樣引起的性能損耗也是相當可觀的。


          3、盡量減少表單回送
          每當點擊Web網頁上的Button、LinkButton或ImageButton控件時,表單就會被發送到服務器上。如果控件的AutoPostBack屬性被設置為true,如果CheckBox、CheckBoxList等控件的狀態被改變后,也會使表單會發送回服務器。
          每次當表單被發送回服務器,就會被重新加載,啟動Page_Load事件,執行Page_Load事件處理程序中的所有代碼。把網頁的初始化代碼放在這里是最合適不過的了。我們經常會希望在每次加載網頁時執行一些代碼,而希望只有在網頁第一次加載時執行另一些代碼,甚至希望一些代碼在除首次加載外的每次加載時執行。
          可以利用IsPostBack特性來完成這一功能。在網頁第一次加載時,該屬性的值是false。如果網頁因回送而被重新加載,IsPostBack屬性的值就會被設置為true。通過測試,可以在任意時候執行指定的代碼。下面是相關的C#代碼:
          protected void Page_Load(Object sender, EventArgs e)
          {
          // 網頁每次加載時,執行的一些操作
          if (!IsPostBack)
          {
          // 網頁第一次加載時執行的操作
          }
          else
          {
          // 回送時執行的操作
          }

          // 網頁每次加載時執行的操作
          }
          我們希望盡量不引起回送(每次回送都會要求服務器進行一系列的操作),即使引起回送后。也希望能夠執行盡量少的操作。大規模、浪費時間的操作(例如數據庫查找)尤其應當避免,因為它們能夠延長應用程序的響應時間。


          4、使用StringBuilder類
          字符串在.NET框架中是不可變的,這意味著改變字符串的操作符和方法會返回字符串的改變后的拷貝,這意味著性能還有提高的空間。當進行大量的字符串操作時,使用StringBuilder類就是一種比較好的選擇了。
          下面的C#代碼測試用二種方式從10000個子字符串中生成字符串所需要的時間。第一次使用了一個簡單的字符串串聯操作;第二次使用了StringBuilder類。要想查看結果字符串,可以去掉下面的代碼中注解行的注解符號:

          <%@ Page Language="C#" %>
          <script runat="server">
          void Page_Load(Object Source, EventArgs E)
          {
          int intLimit = 10000;
          DateTime startTime;
          DateTime endTime;
          TimeSpan elapsedTime;
          string strSub;
          string strWhole = "";

          // 首先執行字符串連接操作
          startTime = DateTime.Now;
          for (int i=0; i < intLimit; i++)
          {
          strSub = i.ToString();
          strWhole = strWhole + " " + strSub;
          }
          endTime = DateTime.Now;
          elapsedTime = endTime - startTime;
          lblConcat.Text = elapsedTime.ToString();
          // lblConcatString.Text = strWhole;

          // 使用stringBuilder類進行同樣的操作
          startTime = DateTime.Now;
          StringBuilder sb = new StringBuilder();
          for (int i=0; i < intLimit; i++)
          {
          strSub = i.ToString();
          sb.Append(" ");
          sb.Append(strSub);
          }
          endTime = DateTime.Now;
          elapsedTime = endTime - startTime;
          lblBuild.Text = elapsedTime.ToString();
          // lblBuildString.Text = sb.ToString();
          }

          </script>
          <html>
          <body>
          <form runat="server">

          <h1>String Concatenation Benchmark</h1>
          Concatenation:
          <asp: Label
          id="lblConcat"
          runat="server"/>

          <br/>
          <asp: Label
          id="lblConcatString"
          runat="server"/>

          <br/>
          <br/>

          StringBuilder:
          <asp: Label
          id="lblBuild"
          runat="server"/>

          <br/>
          <asp: Label
          id="lblBuildString"
          runat="server"/>

          </form>
          </body>
          </html>
          二種方式的差別是相當大的:使用StringBuilder類的Append方法的速度比使用字符串連接的速度快近200倍。比較的結果如下所示:
          (圖:picture01)


          5、只在必要時使用服務器端控件
          ASP.NET中新引入了一種在服務器端運行的被稱作Web Server Controls的控件,在代碼中,它們經常通過下面的語法被說明:
          <asp:TextBox id="txtLastName" size="40" runat="server" />
          它們有時也被稱作ASP控件。服務器端控件是由runat屬性指示的,它的值總是“server”。
          通過添加runat屬性,一般的HTML控件可以被很方便地轉換到服務器端運行,下面是一個簡單的例子:

          <input type="text" id="txtLastName" size="40" runat="server" />
          可以通過id屬性中指定的名字,我們可以引用程序中的控件,可以通過編程的方式設置屬性和獲得值,因此,服務器端處理方式有較大的靈活性。

          這種靈活性是有一定代價的。每種服務器端控件都會消耗服務器上的資源。另外,除非控件、網頁或應用程序明確地禁止view state,控件的狀態是包含在view state的隱藏域中,并在每次回送中都會被傳遞,這會引起嚴重的性能下降。
          在這方面的一個很好的例子是,網頁上控件表格的應用,如果不需要在代碼中引用表格中的元素,則使用無需進行服務器端處理的HTML表格。我們仍然可以在HTML表格單元中放置服務器控件,并在代碼中引用服務器控件。如果需要引用任意的表格元素,例如指定的單元,則整個表格必須是服務器控件。


          6. HyperLink控件、LinkButton控件的差別
          對于Web訪問者而言,HyperLink、LinkButton控件是一樣的,但它們在功能方面仍然有較大的差異。
          當用戶點擊控件時,HyperLink控件會立即將用戶“導航”到目標URL,表件不會回送到服務器上。LinkButton控件則首先將表件發回到服務器,然后將用戶導航到目標URL。如果在“到達”目標URL之前需要進行服務器端處理,則使用LinkButton控件;如果無需進行服務器端處理,則可以使用HyperLink控件。


          7、注釋代碼
          這一技巧并不是針對ASP.NET的,但它是一個良好的編程習慣。
          注釋不僅僅應當說明代碼會執行什么操作,還應當注明原因。例如,不要僅僅在注釋中說明是在遍歷數組,而是要說明遍歷數組是根據某一算法計算一個值,除非算法是相當簡單的,否則還應當對算法進行簡要的說明。
          .NET工程中的不同的編程語言都有各自不同的注釋符號,下面是一個簡要的說明:
          HTML <!-- 注釋 -->
          JavaScript // 注釋
          VBScript ' 注釋
          VB.NET ' 注釋
          C# // 注釋
          /* 多行內容
          的注釋
          */
          SQL -- 注釋

          在服務器控件的開始和結束標記中沒有注釋符號,但服務器能夠忽略掉所有它不能識別的屬性,因此我們能夠通過使用沒有定義的屬性來插入注釋。下面是一個例子:
          <asp:TextBox
          id="txtLastName"
          size="40"
          comment="這是我的注釋"
          runat="server" />
          在Visual Studio .NET中對源代碼進行注釋非常簡單。高亮度顯示需要注釋的行,然后按Ctrl+K+C組合鍵添加注釋。要刪除注釋,只需高亮度顯示被注釋的代碼,并按下Ctrl+K+U組合鍵。
          在C#工程中,我們還可以通過在每行的開始處使用///輸入XML注釋小節。在注釋小節中,我們可以使用下面的XML標記組織注釋:
          <summary></summary>
          <remarks></remarks >
          <param></param>
          <returns></returns>
          <newpara></newpara>
          要在Visual Studio .NET中查看這些XML注釋的格式化的報告,我們可以首先選擇“工具”菜單項,然后選擇“建立注釋Web網頁”菜單項。


          8、使用trace方法和trace屬性記錄Page目錄中網頁的執行情況
          調試程序的一種古老的技術是在程序中的關健點插入輸出語句,通常情況下,輸出信息中會包含重要變量的值,相關信息可以輸出到屏幕、日志文件或者數據庫。
          在ASP.NET中,通過使用Page命令中的trace屬性,這種調試技術的使用更簡單了。Page命令是ASPX文件開始處的一行代碼,它提供編譯器的指示。Page命令中包含一個或多個屬性,向編譯器提供使用的編程語言、代碼支持文件的位置或要繼承的類的名字等信息。
          Page命令中的屬性之一是trace,其值可能是true或false,下面是一個典型的Page命令,其中的trace屬性的值是true:

          <%@ Page language="c#" trace="true" %>
          如果trace屬性的值設置為true,由ASPX文件生成的Web頁就會顯示出來,除了網頁本身外,關于該頁的大量其他信息也會顯示出來。這些信息以下面小節的形式顯示在一張表格中:
          ·Request細節 提供Session ID、請求時間和請求的狀態碼。
          ·Trace Information 包含跟蹤日志、網頁生命周期中按時間先后順序各個步驟的列表。另外,也可以向其中添加定制信息。
          ·控件樹 以一種分層次的方式列出網頁上的所有控件,包括每個控件以字節計算的大小。
          ·Cookies集合 列出該網頁創建的所有Cookie。
          ·頭部集合 HTTP頭部以及它們的值。
          ·Server變量 與該網頁相關的Server環境變量。

          包含在Trace Information小節中的跟蹤日志是最有用的,在這里我們可以插入自己的跟蹤命令。trace類中有2個方法能夠在跟蹤日志中插入命令:Trace.Write和Trace.Warn,除了Trace.Warn命令用紅色字體顯示、Trace.Write命令用黑色字體顯示外,它們是相同的。下面是跟蹤日志的一個屏幕快照,其中包含有幾個Trace.Warn命令。
          跟蹤日志中最方便的功能是我們可以在開發和測試過程中在整個代碼中插入Trace.Write和Trace.Warn語句,而在最終交付應用程序時,可以通過改變Page命令中trace屬性的值,禁止這些命令起作用,而無需在部署應用軟件前刪除這些輸出語句。

          9、使用存儲過程
          微軟公司的SQL Server和其他現代關系數據庫都使用SQL命令定義和處理查詢。一個SQL語句或一系列SQL語句提交給SQL Server,SQL Server會對命令進行解析,然后創建一個查詢計劃并對它進行優化,然后執行該查詢計劃,這都需要大量的時間。
          存儲過程是一系列被查詢處理器預解析和優化的SQL命令,這些命令會被存儲起來,可以得到快速地執行。存儲過程也被稱作sprocs,它可以接收輸入參數,使一個單一的存儲過程能夠處理較大范圍的特定的查詢。
          因為sprocs是預先被解析的,對于復雜的查詢更顯得重要,其查詢計劃是預先優化的,因此調用查詢過程比執行相同功能的SQL語句速度要快得多。


          10、使用.NET命令行
          .NET命令行工具在命令提示符窗口中運行。為了使命令能夠執行,它必須駐留在命令提示符的當前目錄中,或通過設置PATH環境變量。
          .NET SDK在“啟動”菜單上安裝一個菜單項,該菜單項能夠打開一個正確設置了PATH環境變量的命令提示符窗口。我們可以通過依次點擊“開始”->“程序”->“Microsoft Visual Studio .NET”->“Visual Studio .NET工具”->“Visual Studio .NET命令提示符”,啟動命令提示符窗口。
          通過在將該菜單項從菜單上拖到桌面上時,同時按Ctrl+C鍵,就可以將該菜單項的快捷方式拷貝到桌面上,使用起來會非常方便。

          posted @ 2006-12-13 19:43 yinxing 閱讀(168) | 評論 (0)編輯 收藏

          前,最常用的三種動態網頁語言有ASP(Active Server Pages),JSP(JavaServer Pages),PHP (Hypertext Preprocessor)。

          簡 介

            ASP全名Active Server Pages,是一個WEB服務器端的開發環境,利用它可以產生和執行動態的、互動的、高性能的WEB服務應用程序。ASP采用腳本語言VBScript(Java script)作為自己的開發語言。

            PHP是一種跨平臺的服務器端的嵌入式腳本語言。它大量地借用C,Java和Perl語言的語法, 并耦合PHP自己的特性,使WEB開發者能夠快速地寫出動態產生頁面。它支持目前絕大多數數據庫。還有一點,PHP是完全免費的,不用花錢,你可以從PHP官方站點(http: //www.php.net)自由下載。而且你可以不受限制地獲得源碼,甚至可以從中加進你自己需要的特色。

            JSP是Sun公司推出的新一代網站開發語言,Sun公司借助自己在Java上的不凡造詣,將Java從Java應用程序和Java Applet之外,又有新的碩果,就是JSP,Java Server Page。JSP可以在Serverlet和JavaBean的支持下,完成功能強大的站點程序。

            三者都提供在 HTML代碼中混合某種程序代碼、由語言引擎解釋執行程序代碼的能力。但JSP代碼被編譯成 Servlet并由Java虛擬機解釋執行,這種編譯操作僅在對JSP頁面的第一次請求時發生。在ASP 、PHP、JSP環境下,HTML代碼主要負責描述信息的顯示樣式,而程序代碼則用來描述處理邏輯。普通的 HTML頁面只依賴于Web服務器,而ASP 、PHP、JSP頁面需要附加的語言引擎分析和執行程序代碼。程序代碼的執行結果被重新嵌入到HTML代碼中,然后一起發送給瀏覽器。ASP 、PHP、JSP三者都是面向Web服務器的技術,客戶端瀏覽器不需要任何附加的軟件支持。

          技術特點:
          ASP:
          ???1. 使用VBScript 、 JScript等簡單易懂的腳本語言,結合HTML代碼,即可快速地完成網站的應用程序。
          ???2. 無須compile編譯,容易編寫,可在服務器端直接執行。
          ???3. 使用普通的文本編輯器,如Windows的記事本,即可進行編輯設計。
          ???4. 與瀏覽器無關(Browser Independence), 客戶端只要使用可執行HTML碼的瀏覽器,即可瀏覽Active Server Pages所設計的網頁內容。Active ServerPages 所使用的腳本語言(VBScript 、 Jscript)均在WEB服務器端執行,客戶端的瀏覽器不需要能夠執行這些腳本語言。
          ???5.Active Server Pages能與任何ActiveX scripting語言兼容。除了可使用VB Script或JScript語言來設計外,還通過plug-in的方式,使用由第三方所提供的其它腳本語言,譬如REXX 、Perl 、Tcl等。腳本引擎是處理腳本程序的COM(Component Object Model) 對象。
          ???6. 可使用服務器端的腳本來產生客戶端的腳本。
          ???7. ActiveX Server Components(ActiveX 服務器組件 )具有無限可擴充性。可以使用Visual Basic 、Java 、Visual C++ 、COBOL等程序設計語言來編寫你所需要的ActiveX Server Component 。

          PHP:
          ???1 數據庫連接
          ???? PHP可以編譯成具有與許多數據庫相連接的函數。PHP與MySQL是現在絕佳的群組合。你還可以自己編寫外圍的函數去間接存取數據庫。通過這樣的途徑當你更換使用的數據庫時,可以輕松地修改編碼以適應這樣的變化。PHPLIB就是最常用的可以提供一般事務需要的一系列基庫。但PHP提供的數據庫接口支持彼此不統一,比如對Oracle, MySQL,Sybase的接口,彼此都不一樣。這也是PHP的一個弱點。

          JSP:
          ???1.將內容的產生和顯示進行分離
          ???? 使用JSP技術,Web頁面開發人員可以使用HTML或者XML標識來設計和格式化最終頁面。使用JSP標識或者小腳本來產生頁面上的動態內容。產生內容的邏輯被封裝在標識和JavaBeans群組件中,并且捆綁在小腳本中,所有的腳本在服務器端執行。如果核心邏輯被封裝在標識和Beans中,那么其它人,如Web管理人員和頁面設計者,能夠編輯和使用JSP頁面,而不影響內容的產生。在服務器端,JSP引擎解釋JSP標識,產生所請求的內容(例如,通過存取JavaBeans群組件,使用JDBC技術存取數據庫),并且將結果以HTML(或者XML)頁面的形式發送回瀏覽器。這有助于作者保護自己的代碼,而又保證任何基于HTML的Web瀏覽器的完全可用性。

          ???2.強調可重用的群組件
          ???? 絕大多數JSP頁面依賴于可重用且跨平臺的組件(如:JavaBeans或者Enterprise JavaBeans)來執行應用程序所要求的更為復雜的處理。開發人員能夠共享和交換執行普通操作的組件,或者使得這些組件為更多的使用者或者用戶團體所使用。基于組件的方法加速了總體開發過程,并且使得各種群組織在他們現有的技能和優化結果的開發努力中得到平衡。

          ???3.采用標識簡化頁面開發
          ???? Web頁面開發人員不會都是熟悉腳本語言的程序設計人員。JavaServer Page技術封裝了許多功能,這些功能是在易用的、與JSP相關的XML標識中進行動態內容產生所需要的。標準的JSP標識能夠存取和實例化JavaBeans組件,設定或者檢索群組件屬性,下載Applet,以及執行用其它方法更難于編碼和耗時的功能。通過開發定制化標識庫,JSP技術是可以擴展的。今后,第三方開發人員和其它人員可以為常用功能建立自己的標識庫。這使得Web頁面開發人員能夠使用熟悉的工具和如同標識一樣的執行特定功能的構件來工作。 JSP技術很容易整合到多種應用體系結構中,以利用現存的工具和技巧,并且擴展到能夠支持企業級的分布式應用。作為采用Java技術家族的一部分,以及Java 2EE的一個成員,JSP技術能夠支持高度復雜的基于Web的應用。由于JSP頁面的內置腳本語言是基于Java程序設計語言的,而且所有的JSP頁面都被編譯成為Java Servlet,JSP頁面就具有Java技術的所有好處,包括健壯的存儲管理和安全性。作為Java平臺的一部分,JSP擁有Java程序設計語言“一次編寫,各處執行”的特點。隨著越來越多的供貨商將JSP支持加入到他們的產品中,您可以使用自己所選擇的服務器和工具,修改工具或服務器并不影響目前的應用。

          應用范圍:
          ???ASP是Microsoft開發的動態網頁語言,也繼承了微軟產品的一貫傳統,只能執行于微軟的服務器產品,IIS(Internet Information Server) (windows NT)和PWS(Personal Web Server)(windows 98)上。Unix下也有ChiliSoft的組件來支持ASP,但是ASP本身的功能有限,必須通過ASP+COM的群組合來擴充,Unix下的COM實現起來非常困難。

          ???PHP可在Windows,Unix,Linux的Web服務器上正常執行,還支持IIS,Apache等一般的Web服務器,用戶更換平臺時,無需變換PHP3代碼,可即拿即用。

          ???JSP同PHP類似,幾乎可以執行于所有平臺。如Win NT,Linux,Unix。在NT下IIS通過一個外加服務器,例如JRUN或者ServletExec,就能支持JSP。知名的Web服務器Apache已經能夠支持JSP。由于Apache廣泛應用在NT、Unix和Linux上,因此JSP有更廣泛的執行平臺。雖然現在NT操作系統占了很大的市場份額,但是在服務器方面Unix的優勢仍然很大,而新崛起的Linux更是來勢不小。從一個平臺移植到另外一個平臺,JSP和JavaBean甚至不用重新編譯,因為Java字節碼都是標準的與平臺無關的。

          性能比較:
          ???有人做過試驗,對這三種語言分別做回圈性能測試及存取Oracle數據庫測試。在循環性能測試中,JSP只用了令人吃驚的四秒鐘就結束了20000*20000的回圈。而ASP、PHP測試的是2000*2000循環(少一個數量級),卻分別用了63秒和84秒。(參考PHPLIB)。 數據庫測試中,三者分別對 Oracle 8 進行 1000 次 Insert,Update,Select和Delete: JSP 需要 13 秒,PHP 需要 69 秒,ASP則 需要 73 秒。

          前景分析:
            目前在國內PHP與ASP應用最為廣泛。而JSP由于是一種較新的技術,國內采用的較少。但在國外,JSP已經是比較流行的一種技術,尤其是電子商務類的網站,多采用JSP。采用PHP的網站如新浪網(sina)、中國人(Chinaren)等,但由于PHP本身存在的一些缺點,使得它不適合應用于大型電子商務站點,而更適合一些小型的商業站點。首先,PHP缺乏規模支持。其次,缺乏多層結構支持。對于大負荷站點,解決方法只有一個:分布計算。數據庫、應用邏輯層、表示邏輯層彼此分開,而且同層也可以根據流量分開,群組成二維數組。而PHP則缺乏這種支持。還有上面提到過的一點,PHP提供的數據庫接口支持不統一,這就使得它不適合運用在電子商務中。

            ASP和JSP則沒有以上缺陷,ASP可以通過Microsoft Windowsd的COM/DCOM獲得ActiveX規模支持,通過DCOM和Transcation Server獲得結構支持;JSP可以通過SUN Java的Java Class和EJB獲得規模支持,通過EJB/CORBA以及眾多廠商的Application Server獲得結構支持。三者中,JSP應該是未來發展的趨勢。世界上一些大的電子商務解決方案提供商都采用JSP/Servlet。比較出名的如IBM的E-business,它的核心是采用JSP/Servlet的Web Sphere。它們都是通過CGI來提供支持的。但去年10月后它推出了Enfinity,一個采用JSP/Servlet的電子商務Application Server,而且聲言不再開發傳統軟件。

            總之,ASP,PHP,JSP三者都有相當數量的支持者,由此也可以看出三者各有所長。正在學習或使用動態頁面的朋友可根據三者的特點選擇一種適合自己的語言。
          posted @ 2006-12-13 19:41 yinxing 閱讀(262) | 評論 (0)編輯 收藏


          1、DateTime 數字型
          System.DateTime currentTime=new System.DateTime();
          1.1 取當前年月日時分秒
          currentTime=System.DateTime.Now;
          1.2 取當前年
          int 年=currentTime.Year;
          1.3 取當前月
          int 月=currentTime.Month;
          1.4 取當前日
          int 日=currentTime.Day;
          1.5 取當前時
          int 時=currentTime.Hour;
          1.6 取當前分
          int 分=currentTime.Minute;
          1.7 取當前秒
          int 秒=currentTime.Second;
          1.8 取當前毫秒
          int 毫秒=currentTime.Millisecond;
          (變量可用中文)
          2、Int32.Parse(變量) Int32.Parse("常量")
          字符型轉換 轉為32位數字型

          3、 變量.ToString()
          字符型轉換 轉為字符串
          12345.ToString("n"); //生成 12,345.00
          12345.ToString("C"); //生成 ¥12,345.00
          12345.ToString("e"); //生成 1.234500e+004
          12345.ToString("f4"); //生成 12345.0000
          12345.ToString("x"); //生成 3039 (16進制)
          12345.ToString("p"); //生成 1,234,500.00%


          4、變量.Length 數字型
          取字串長度:
          如: string str="中國";
          int Len = str.Length ; //Len是自定義變量, str是求測的字串的變量名

          5、System.Text.Encoding.Default.GetBytes(變量)
          字碼轉換 轉為比特碼
          如:byte[] bytStr = System.Text.Encoding.Default.GetBytes(str);
          然后可得到比特長度:
          len = bytStr.Length;

          6、System.Text.StringBuilder("")
          字符串相加,(+號是不是也一樣?)
          如:System.Text.StringBuilder sb = new System.Text.StringBuilder("");
          sb.Append("中華");
          sb.Append("人民");
          sb.Append("共和國");

          7、變量.Substring(參數1,參數2);
          截取字串的一部分,參數1為左起始位數,參數2為截取幾位。
          如:string s1 = str.Substring(0,2);

          8、String user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
          取遠程用戶IP地址

          9、穿過代理服務器取遠程用戶真實IP地址:
          if(Request.ServerVariables["HTTP_VIA"]!=null){
          string user_IP=Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
          }else{
          string user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
          }

          10、 Session["變量"];
          存取Session值;
          如,賦值: Session["username"]="小布什";

          取值: Object objName=Session["username"];
          String strName=objName.ToString();
          清空: Session.RemoveAll();

          11、String str=Request.QueryString["變量"];
          用超鏈接傳送變量。
          如在任一頁中建超鏈接:<a href=Edit.aspx?fbid=23>點擊</a>
          在Edit.aspx頁中取值:String str=Request.QueryString["fdid"];

          12、DOC對象.CreateElement("新建節點名");
          創建XML文檔新節點

          13、父節點.AppendChild(子節點);
          將新建的子節點加到XML文檔父節點下

          14、 父節點.RemoveChild(節點);
          刪除節點

          15、Response
          Response.Write("字串");
          Response.Write(變量);
          向頁面輸出。

          Response.Redirect("URL地址");
          跳轉到URL指定的頁面

          16、char.IsWhiteSpce(字串變量,位數)——邏輯型
          查指定位置是否空字符;
          如:
          string str="中國 人民";
          Response.Write(char.IsWhiteSpace(str,2)); //結果為:True, 第一個字符是0位,2是第三個字符。

          17、char.IsPunctuation('字符') --邏輯型
          查字符是否是標點符號
          如:Response.Write(char.IsPunctuation('A')); //返回:False

          18、(int)'字符'
          把字符轉為數字,查代碼點,注意是單引號。
          如:
          Response.Write((int)'中'); //結果為中字的代碼:20013

          19、(char)代碼
          把數字轉為字符,查代碼代表的字符。
          如:
          Response.Write((char)22269); //返回“國”字。

          20、 Trim()
          清除字串前后空格

          21 、字串變量.Replace("子字串","替換為")
          字串替換
          如:
          string str="中國";
          str=str.Replace("國","央"); //將國字換為央字
          Response.Write(str); //輸出結果為“中央”

          再如:(這個非常實用)

          string str="這是<script>腳本";
          str=str.Replace("<","<font><</font>"); //將左尖括號替換為<font> 與 < 與 </font> (或換為<,但估計經XML存諸后,再提出仍會還原)
          Response.Write(str); //顯示為:“這是<script>腳本”

          如果不替換,<script>將不顯示,如果是一段腳本,將運行;而替換后,腳本將不運行。
          這段代碼的價值在于:你可以讓一個文本中的所有HTML標簽失效,全部顯示出來,保護你的具有交互性的站點。
          具體實現:將你的表單提交按鈕腳本加上下面代碼:
          string strSubmit=label1.Text; //label1是你讓用戶提交數據的控件ID。
          strSubmit=strSubmit.Replace("<","<font><</font>");
          然后保存或輸出strSubmit。
          用此方法還可以簡單實現UBB代碼。

          22、Math.Max(i,j)
          取i與j中的最大值
          如 int x=Math.Max(5,10); // x將取值 10

          加一點吧 23、字串對比......
          加一點吧

          23、字串對比一般都用: if(str1==str2){ } , 但還有別的方法:

          (1)、
          string str1; str2
          //語法: str1.EndsWith(str2); __檢測字串str1是否以字串str2結尾,返回布爾值.如:
          if(str1.EndsWith(str2)){ Response.Write("字串str1是以"+str2+"結束的"); }

          (2)、
          //語法:str1.Equals(str2); __檢測字串str1是否與字串str2相等,返回布爾值,用法同上.

          (3)、
          //語法 Equals(str1,str2); __檢測字串str1是否與字串str2相等,返回布爾值,用法同上.

          24、IndexOf() 、LastIndexOf()
          查找字串中指定字符或字串首次(最后一次)出現的位置,返回索引值,如:
          str1.IndexOf("字"); //查找“字”在str1中的索引值(位置)
          str1.IndexOf("字串");//查找“字串”的第一個字符在str1中的索引值(位置)
          str1.IndexOf("字串",3,2);//從str1第4個字符起,查找2個字符,查找“字串”的第一個字符在str1中的索引值(位置)

          25、Insert()
          在字串中指定索引位插入指定字符。如:
          str1.Insert(1,"字");在str1的第二個字符處插入“字”,如果str1="中國",插入后為“中字國”;

          26、PadLeft()、PadRight()
          在字串左(或右)加空格或指定char字符,使字串達到指定長度,如:
          <%
          string str1="中國人";
          str1=str1.PadLeft(10,'1'); //無第二參數為加空格
          Response.Write(str1); //結果為“1111111中國人” , 字串長為10
          %>

          27、Remove()
          從指定位置開始刪除指定數的字符
          字串對比一般都用: if(str1==str2){ } , 但還有別的方法:

          1、
          string str1; str2
          //語法: str1.EndsWith(str2); __檢測字串str1是否以字串str2結尾,返回布爾值.如:
          if(str1.EndsWith(str2)){ Response.Write("字串str1是以"+str2+"結束的"); }

          2、
          //語法:str1.Equals(str2); __檢測字串str1是否與字串str2相等,返回布爾值,用法同上.

          3、
          //語法 Equals(str1,str2); __檢測字串str1是否與字串str2相等,返回布爾值,用法同上.

          IndexOf()
          查找字串中指定字符或字串首次出現的位置,返首索引值,如:
          str1.IndexOf("字"); //查找“字”在str1中的索引值(位置)
          str1.IndexOf("字串");//查找“字串”的第一個字符在str1中的索引值(位置)
          str1.IndexOf("字串",3,2);//從str1第4個字符起,查找2個字符,查找“字串”的第一個字符在str1中的索引值(位置)

          1.9 取中文日期顯示——年月日時分
          string strY=currentTime.ToString("f"); //不顯示秒

          1.10 取中文日期顯示_年月
          string strYM=currentTime.ToString("y");

          1.11 取中文日期顯示_月日
          string strMD=currentTime.ToString("m");

          1.12 取當前年月日,格式為:2003-9-23
          string strYMD=currentTime.ToString("d");

          1.13 取當前時分,格式為:14:24
          string strT=currentTime.ToString("t");
          更新一下, 上面不能編輯:

          c#.net函數和方法集(大家一起來加啊)


          1、DateTime 數字型
          System.DateTime currentTime=new System.DateTime();
          1.1 取當前年月日時分秒
          currentTime=System.DateTime.Now;
          1.2 取當前年
          int 年=currentTime.Year;
          1.3 取當前月
          int 月=currentTime.Month;
          1.4 取當前日
          int 日=currentTime.Day;
          1.5 取當前時
          int 時=currentTime.Hour;
          1.6 取當前分
          int 分=currentTime.Minute;
          1.7 取當前秒
          int 秒=currentTime.Second;
          1.8 取當前毫秒
          int 毫秒=currentTime.Millisecond;
          (變量可用中文)

          1.9 取中文日期顯示——年月日時分
          string strY=currentTime.ToString("f"); //不顯示秒

          1.10 取中文日期顯示_年月
          string strYM=currentTime.ToString("y");

          1.11 取中文日期顯示_月日
          string strMD=currentTime.ToString("m");

          1.12 取中文年月日
          string strYMD=currentTime.ToString("D");

          1.13 取當前時分,格式為:14:24
          string strT=currentTime.ToString("t");

          1.14 取當前時間,格式為:2003-09-23T14:46:48
          string strT=currentTime.ToString("s");

          1.15 取當前時間,格式為:2003-09-23 14:48:30Z
          string strT=currentTime.ToString("u");

          1.16 取當前時間,格式為:2003-09-23 14:48
          string strT=currentTime.ToString("g");

          1.17 取當前時間,格式為:Tue, 23 Sep 2003 14:52:40 GMT
          string strT=currentTime.ToString("r");

          1.18獲得當前時間 n 天后的日期時間
          DateTime newDay = DateTime.Now.AddDays(100);

          2、Int32.Parse(變量) Int32.Parse("常量")
          字符型轉換 轉為32位數字型

          3、 變量.ToString()
          字符型轉換 轉為字符串
          12345.ToString("n"); //生成 12,345.00
          12345.ToString("C"); //生成 ¥12,345.00
          12345.ToString("e"); //生成 1.234500e+004
          12345.ToString("f4"); //生成 12345.0000
          12345.ToString("x"); //生成 3039 (16進制)
          12345.ToString("p"); //生成 1,234,500.00%


          4、變量.Length 數字型
          取字串長度:
          如: string str="中國";
          int Len = str.Length ; //Len是自定義變量, str是求測的字串的變量名

          5、System.Text.Encoding.Default.GetBytes(變量)
          字碼轉換 轉為比特碼
          如:byte[] bytStr = System.Text.Encoding.Default.GetBytes(str);
          然后可得到比特長度:
          len = bytStr.Length;

          6、System.Text.StringBuilder("")
          字符串相加,(+號是不是也一樣?)
          如:System.Text.StringBuilder sb = new System.Text.StringBuilder("");
          sb.Append("中華");
          sb.Append("人民");
          sb.Append("共和國");

          posted @ 2006-12-13 19:36 yinxing 閱讀(215) | 評論 (0)編輯 收藏

          2006年9月17日 #

            1.不要看到別人的回復第一句話就說:給個代碼吧!你應該想想為什么。當你自己想出來再參考別人的提示,你就知道自己和別人思路的差異。


            2.初學者請不要看太多太多的書那會誤人子弟的,先找本系統的學,很多人用了很久都是只對部分功能熟悉而已,不系統還是不夠的。


            3.看幫助,不要因為很難而自己是初學者所以就不看;幫助永遠是最好的參考手冊,雖然幫助的文字有時候很難看懂,總覺得不夠直觀。


            4.不要被對象、屬性、方法等詞匯所迷惑;最根本的是先了解最基礎知識。


            5.不要放過任何一個看上去很簡單的小問題--他們往往并不那么簡單,或者可以引伸出很多知識點;不會舉一反三你就永遠學不會。


            6.知道一點東西,并不能說明你會寫腳本,腳本是需要經驗積累的。


            7.學腳本并不難,JSP、ASP、PHP等等也不過如此--難的是長期堅持實踐和不遺余力的博覽群書;


            8.看再多的書是學不全腳本的,要多實踐。


            9.把時髦的技術掛在嘴邊,還不如把過時的技術記在心里;


            10.學習腳本最好的方法之一就是多練習;


            11.在任何時刻都不要認為自己手中的書已經足夠了;


            12.看得懂的書,請仔細看;看不懂的書,請硬著頭皮看;


            13.別指望看第一遍書就能記住和掌握什么——請看第二遍、第三遍;


            14.請把書上的例子親手到電腦上實踐,即使配套光盤中有源文件;


            15.把在書中看到的有意義的例子擴充;并將其切實的運用到自己的工作中;


            16.不要漏掉書中任何一個練習——請全部做完并記錄下思路;


            17.當你用腳本到一半卻發現自己用的方法很拙劣時,請不要馬上停手;請盡快將余下的部分粗略的完成以保證這個代碼的完整性,然后分析自己的錯誤并重新編寫和工作。


            18.別心急,寫腳本確實不容易;水平是在不斷的實踐中完善和發展的;


            19.每學到一個腳本難點的時候,嘗試著對別人講解這個知識點并讓他理解----你能講清楚才說明你真的理解了;


            20.記錄下在和別人交流時發現的自己忽視或不理解的知識點;


            21.保存好你做過的所有的源文件----那是你最好的積累之一;


            22.對于網絡,還是希望大家能多利用一下,很多問題不是非要到論壇來問的,首先你要學會自己找答案,比如google、百度都是很好的搜索引擎,你只要輸入關鍵字就能找到很多相關資料,別老是等待別人給你希望,看的出你平時一定也很懶!


            23,到一個論壇,你學會去看以前的帖子,不要什么都不看就發帖子問,也許你的問題早就有人問過了,你再問,別人已經不想再重復了,做為初學者,誰也不希望自己的帖子沒人回的。


            24,雖然不是打擊初學者,但是這句話還是要說:論壇論壇,就是大家討論的地方,如果你總期望有高手總無償指點你,除非他是你親戚!!討論者,起碼是水平相當的才有討論的說法,如果水平真差距太遠了,連基本操作都需要別人給解答,誰還跟你討論呢。能找到很多相關資料,別老是等待別人給你希望,看的出你平時一定也很懶!


           
            浮躁的人容易問:我到底該學什么;----別問,學就對了;
            浮躁的人容易問:JS有錢途嗎;----建議你去搶銀行;
            浮躁的人容易說:我要中文版!我英文不行!----不行?學呀!
            浮躁的人分兩種:只觀望而不學的人;只學而不堅持的人;
            浮躁的人永遠不是一個高手。

          posted @ 2006-09-17 14:07 yinxing 閱讀(181) | 評論 (1)編輯 收藏

          2006年9月16日 #

               摘要: 推薦大家看...  閱讀全文
          posted @ 2006-09-16 12:43 yinxing 閱讀(289) | 評論 (1)編輯 收藏

          主站蜘蛛池模板: 天津市| 通江县| 乌鲁木齐县| 朝阳县| 平乡县| 叶城县| 多伦县| 阿瓦提县| 洛阳市| 山丹县| 维西| 无极县| 涟水县| 岳西县| 河源市| 安化县| 修武县| 浦城县| 呼伦贝尔市| 安乡县| 玉环县| 栾城县| 绥江县| 阳江市| 新干县| 樟树市| 乌兰浩特市| 芮城县| 久治县| 东阿县| 阿鲁科尔沁旗| 天气| 太康县| 高台县| 安吉县| 许昌县| 山东| 西和县| 长阳| 江川县| 营山县|