<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      使用JScript.NET創建asp.net頁面

      [摘要]大家一定習慣于使用vb.net和C#來創建asp.net頁面,但是不知大家知不知道我們還可以使用Jscript.net編寫asp.net.這可能是自微軟1996年推出基于IE3.0的Jscript1.0以來在功能上最大的飛躍。JScript 傳統上被用作開發客戶端腳本。在internet上它普遍存...

      大家一定習慣于使用vb.net和C#來創建asp.net頁面,但是不知大家知不知道我們還可以使用Jscript.net編寫asp.net.
      這可能是自微軟1996年推出基于IE3.0的Jscript1.0以來在功能上最大的飛躍。JScript 傳統上被用作開發客戶端腳本。在internet上它普遍存在,特別是在Active sever page(ASP)中 。
      當腳本變得很大的時候,程序員需要編寫更有效的代碼;并且程序變得越來越復雜,程序員往往受到Jscript的局限性。
      如果你對Jscript很熟悉的話,你將很快的在.net平臺上使用Jscript.net,應為Jscript.net就像是Jscript的升級版,而不是一門新的語言。
      Jscript.net最新的特性是Jscript.net是真正的編譯語言。這使它完全可以與vb.net和C#相媲美。從語法方面,Jscript.net改善了變量類型的定義,不但支持明確的變量類型定義,還支持模糊的變量類型定義。模糊定義是一項激動人心的技術,它可以分析你腳本中使用的變量,并且推斷出變量的類型。這就意味著你可以使用未定義的變量并以更快的速度執行。
      請參照下面的例子:
      function test()
      {
      for (var x = 0; x < 100; x++)
      {
      print(x);
      }
      }
      當Jscript.net編譯這個程序的時候,它分析變量X的用途并確定變量X只用做數值型,結果變量被安全的定義為數值型。技術進步在于把變量定義為數值型要明顯優于把變量定義為generic Object 或 variant。
      為了實現Jscript.net的推斷變量類型的功能,你需要遵守以下幾條規則!
      一. 永遠聲明你的局部變量。這看起來像是顯而易見的,但是這是非常重要的,Jscript.net只能推斷你的局部變量,而不是全局變量。如果你沒有聲明它,直接使用,它就將成為全局變量,將不能被優化。
      二. 僅使用一種數據類型,如果你聲明一個數值型變量,卻用來儲存字符型的數據,Jscript將把該變量定義為generic Object 或 variant。
      //無法推斷類型 -- glob 是一個全局變量
      var glob = 42;
      function myfunc()
      {
      //無法推斷類型-- s 沒有定義因此它被當作全局變量
      s = "hello";
      // 可以推斷類型
      var i = 0;
      //無法推斷類型—q被指派成其他的類型
      var q = new Date();
      q = 3.14159;
      }
      盡管類型推斷是非常好的功能,但是它還是有一定的缺點的。它無法幫助我們捕獲類型不匹配或其他的錯誤。為了解決這個問題,Jscript.net提供一種方法明確定義變量的類型。通過例子,你將很容易的了解它的使用方法。
      // 定義數值類型
      var myInt : int = 42;
      // 定義一個函數,返回一個字符串
      function GetName() : String
      {
      // 程序行
      }
      // 定義一個帶兩個參數的函數返回一個邏輯類型
      function CheckNumber(dVal : double) : Boolean
      {
      // function code
      }
      下面給出一個完成的函數,仔細的體會一下。
      function getConditions(strCity : String) : String
      {
      var now : Date = new Date();
      switch (strCity.toUpperCase())
      {
      case "LONDON":
      if (now.getMonth() <= 7 now.getMonth() >= 9)
      {
      return "overcast";
      }
      else
      {
      return "partly overcast and humid";
      }
      break;
      case "SEATTLE":
      if (now.getMonth() == 7 && now.getDay() == 4)
      {
      return "torrential rain";
      }
      else
      {
      return "rain";
      }
      break;
      case "LA":
      return "smoggy";
      break;
      case "PHOENIX":
      return "damn hot";
      break;
      default:
      return "partly cloudy with a chance of showers";
      }
      }
      使用Jscript.net,你也可以定義其他.net架構的類型,通過引用命名空間和派生類可以向Jscript.net引入新的數據類型。這樣在兩者的數據類型中就有可能產生重疊。參見下表:
      Boolean .NET Framework Boolean / JScript boolean
      Number .NET Framework Double / JScript number
      String .NET Framework String / JScript string
      Int .NET Framework Int32
      Long .NET Framework Int64
      Float .NET Framework Single
      Double .NET Framework Double
      Object .NET Framework Object / JScript Object
      Date JScript Date object
      Array JScript Array
      Function JScript Function object
      在Jscript中定義類通過類聲明, 包含方法和對象和var 聲明。對于類的派生通過下面兩個程序的對比,你講清楚地明白。
      JScript 5.5 Code
      // Simple object with no methods
      function Car(make, color, year)
      {
      this.make = make;
      this.color = color;
      this.year = year;
      }
      function Car.prototype.GetDescription()
      {
      return this.year + " " + this.color + " " + this.make;
      }
      // Create and use a new Car object
      var myCar = new Car("Accord", "Maroon", 1984);
      print(myCar.GetDescription());
      JScript.NET Code
      // Wrap the function inside a class statement.
      class Car
      {
      var make : String;
      var color : String;
      var year : int;
      function Car(make, color, year)
      {
      this.make = make;
      this.color = color;
      this.year = year;
      }
      function GetDescription()
      {
      return this.year + " " + this.color + " " + this.make;
      }
      }
      var myCar = new Car("Accord", "Maroon", 1984);
      print(myCar.GetDescription());
      Jscript.net還支持定義private和protected property通過GET和SET進行讀寫。
      如下例:
      class Person
      {
      private var m_sName : String;
      private var m_iAge : int;
      function Person(name : String, age : int)
      {
      this.m_sName = name;
      this.m_iAge = age;
      }
      // Name 只讀
      function get Name() : String
      {
      return this.m_sName;
      }
      // Age 讀寫但是只能用SET
      function get Age() : int
      {
      return this.m_sAge;
      }
      function set Age(newAge : int)
      {
      if ((newAge >= 0) && (newAge <= 110))
      this.m_iAge = newAge;
      else
      throw newAge + " is not a realistic age!";
      }
      }
      var fred : Person = new Person("Fred", 25);
      print(fred.Name);
      print(fred.Age);
      // 這將產生一個編譯錯誤,name是只讀的。
      fred.Name = "Paul";
      // 這個將正常執行
      fred.Age = 26;
      // 這將得到一個 run-time 錯誤, 值太大了
      fred.Age = 200;
      Jscript.net可以用JScript 或任意NET 框架語言(如 C #,VB7.0) 通過增加extends主題詞在類聲明以后來繼承和擴展現有類。這能力允許Jscript.net非常容易地利用 NET 平臺的豐厚資源。為了說明這些,給出一個程序。這個程序擴展了NET 框架的ServiceBase 類。
      // 導入需要的.net命名空間
      import System;
      import System.ServiceProcess;
      import System.Diagnostics;
      import System.Timers;
      class SimpleService extends ServiceBase
      {
      private var timer : Timer;
      function SimpleService()
      {
      CanPauseAndContinue = true;
      ServiceName = "JScript Service";
      timer = new Timer();
      timer.Interval = 1000;
      timer.AddOnTimer(OnTimer);
      }
      protected override function OnStart(args : String[])
      {
      EventLog.WriteEntry("JScript Service started");
      timer.Enabled = true;
      }
      protected override function OnStop()
      {
      EventLog.WriteEntry("JScript Service stopped");
      timer.Enabled = false;
      }
      protected override function OnPause()
      {
      EventLog.WriteEntry("JScript Service paused");
      timer.Enabled = false;
      }
      protected override function OnContinue()
      {
      EventLog.WriteEntry("JScript Service continued");
      timer.Enabled = true;
      }
      function OnTimer(source : Object, e : EventArgs)
      {
      EventLog.WriteEntry("Hello World from JScript!");
      }
      }
      ServiceBase.Run(new SimpleService());

      如何在asp+中使用Jscript.net這才是我們關鍵的問題。我們將通過一個例子來說明這個問題。
      訪問sqlserver數據庫
      第一個aps+例子是使用Jscript.net和.net的數據訪問類來訪問sqlserver數據庫,
      這里我還將使用大家熟悉的<% %>格式來編寫,訪問pubs中的authors表,我知道這很簡單但是它可以體現一些新的特性。
      <%@ Import Namespace="System.Data" %>
      <%@ Import Namespace="System.Data.SQL" %>
      <%@ language="JScript" %>
      <link rel="STYLESHEET" type="text/css" href="style.css">
      <%
      // 設置數據庫連接
      var myConnection:SQLConnection = new SQLConnection("server=scripting;uid=sa;pwd=;database=pubs");
      // 執行查詢
      var myCommand:SQLDataSetCommand = new SQLDataSetCommand("select * from Authors", myConnection);
      // 聲明變量
      var ds:DataSet = new DataSet();
      var myTable:DataTable
      var myColumns:ColumnsCollection
      var myCol:DataColumn
      var myRows:RowsCollection
      var myRow:DataRow
      // 通過FillDataSet方法獲取數據
      myCommand.FillDataSet(ds, "Authors");
      myTable = ds.Tables[0]
      %>
      <h1>
      <%=ds.Tables[0].TableName%>
      </h1>
      <br>
      <TABLE>
      <THEAD>
      <TR>
      <%
      //在表格的最上面輸出字段名
      myColumns = myTable.Columns
      for (myCol in myColumns)
      {
      %>
      <TH class="spec">
      <%=myCol.ColumnName%>
      </TH>
      <%
      }
      %>
      </TR>
      </THEAD>
      <%
      // 輸出所有的紀錄
      myRows = myTable.Rows
      for (myRow in myRows)
      {
      %>
      <TR>
      <%
      for(var i:int=0;i<myColumns.Count;i++)
      {
      %>
      <TD class="spec">
      <%=myRow[i]%>
      </TD>
      <%
      }
      %>
      </TR>
      <%
      }
      %>
      </TABLE>

      例子2
      <%@ WebService Language="JScript" class="Weather"%>
      import System
      import System.Web.Services
      class Weather {
      WebMethodAttribute function getConditions(strCity : String) : String
      {
      var now = new Date();
      switch (strCity.toUpperCase())
      {
      case "LONDON":
      if (now.getMonth() <= 7 now.getMonth() >=9)
      {
      return "overcast"
      }
      if
      {
      return "partly overcast"
      }
      break;
      case "SEATTLE":
      if (now.getMonth() == 7 && now.getDay()==4)
      {
      return "torrential rain"
      }
      else
      {
      return "rain"
      }
      break;
      case "LA":
      return "smoggy"
      break;
      case "PHOENIX":
      return "damn hot"
      break;
      default:
      return "partly cloudy with a chance of showers"
      }
      }
      }




      日韩精品一区二区三区高清