使用JScript.NET创建asp.net页面

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
大家一定习惯于使用vb. net和C#来 创建 asp. net 页面,但是不知大家知不知道我们还可以使用 JScript. net编写 asp. net.
这可能是自微软1996年推出基于IE3.0的 JScript1.0以来在功能上最大的飞跃。 JScript 传统上被用作开发客户端脚本。在inter net上它普遍存在,特别是在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"
}
}
}

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值