4.4 Server对象
Server对象也是Page对象的成员之一,主要提供一些处理网页请求时所需的功能,例如建立COM对象、将字符串进行编码和解码等工作。
4.4.1 Server对象的属性
Server对象提供对服务器上的方法和属性的访问,它是HttpServerUtility类的实例。Server对象提供两个属性,说明如下。
(1)MachineName属性:获取服务器的计算机名称。
(2)ScriptTimeout属性:获取和设置请求超时(以秒计)的时间。
例如,在窗体页面上添加Label控件,该控件显示计算机名称和请求超时的时间。Load事件中的代码如下。
protected void Page_Load(object sender, EventArgs e) { lblResult.Text = "计算机名称:" + Server.MachineName + "<br/>获取超时的 时间:" + Server.ScriptTimeout; }
4.4.2 Server对象的方法
与Server对象的属性相比,它的方法要多一些,常用方法如表4-8所示。
表4-8 Server对象的常用方法
虽然表4-8中列出了Server对象的多个方法,但是下面只对该对象的常用方法进行介绍。
1.MapPath()方法
Server对象的MapPath()方法返回与Web服务器上的指定虚拟路径相对应的物理文件路径。使用该方法时需要传入一个string类型的参数,该参数是虚拟路径(即相对路径),返回传入的相对路径的绝对路径。如果传入参数的值是null,则返回应用程序所在的目录的物理路径。
【范例11】
页面加载时指定ID属性值为lblResult的Label控件的Text属性值,代码如下。
protected void Page_Load(object sender, EventArgs e){ lblResult.Text = "相对地址:" + Server.MapPath("images")+"<br/>" + "指定~符号:" + Server.MapPath("~/images")+"<br/>" + "传入null:" + Server.MapPath(null); }
运行窗体页面查看效果,如图4-12所示。
图4-12 MapPath()方法的使用
2.Transfer()和Execute()方法
实现从一个页面A.aspx跳转到另一个页面B.aspx,常用的有以下5种方法。
(1)通过Response对象的Redirect()方法实现。
(2)通过Response对象的Write()方法实现,在该方法中通过脚本跳转页面。
(3)通过Button控件、ImageButton控件和LinkButton控件的PostBackUrl属性实现。
(4)通过Server对象的Transfer()方法实现。
(5)通过Server对象的Execute()方法实现。
通过前面的三种方式实现页面跳转时,地址栏中的页面都会发生改变。例如,范例9通过PostBackUrl属性实现跳转,当单击页面中的【登录】按钮时会提交到MessageDefault.aspx页面,并且地址栏中的页面发生改变。但是,使用Server对象的Transfer()方法实现跳转时,地址栏中的页面不会发生改变。
【范例12】
下面演示Server对象的Transfer()方法的使用。
(1)创建Transfer.aspx窗体页面,并在该页面中添加一个Button控件。页面代码如下。
<asp:Button ID="btn1" runat="server" Text="Transfer()" OnClick= "btn1_Click" />
(2)在后台页面的Load事件中添加如下代码。
protected void btn1_Click(object sender, EventArgs e) { Server.Transfer("Default.aspx"); }
(3)创建Default.aspx页面,该页面的HTML文档中只包含一段文本,内容是“这是一个简单的ASP.NET网页。”。
(4)运行窗体页面查看效果,如图4-13所示。单击图中的按钮进行测试,如图4-14所示。比较图4-13和图4-14可以发现,虽然实现页面跳转,但是地址栏并没有发生改变。
图4-13 页面初始效果
图4-14 实现页面跳转
通过Server对象的Execute()方法也可以实现从A.aspx页面到B.aspx页面的跳转,但是不同的是,执行完B.aspx页面之后会重新返回到A.aspx页面继续执行。
【范例13】
在范例12的基础上添加新的内容,步骤如下。
(1)在创建Transfer.aspx窗体页面中添加文本值为“Execute()”的Button控件,并指定控件的Click事件。
(2)为上述添加的Button控件添加Click事件代码,调用Execute()方法实现跳转。
(3)运行窗体页面查看效果,如图4-15所示。单击Execute()按钮进行测试,如图4-16所示。
图4-15 页面初始效果
图4-16 实现跳转效果
3.HtmlEncode()和HtmlDecode()方法
HtmlEncode()方法对字符串进行编码;HtmlDecode()方法对字符串进行解码。HtmlEncode()和HtmlDecode()方法都有两种构造函数,以HtmlEncode()方法为例,形式如下。
string HtmlEncode(string s) void HtmlEncode(string s, TextWriter output)
其中,第一种形式的构造函数表示对字符串进行HTML编码并返回已编码的字符串,参数s是要编码的字符串。第二种形式的构造函数表示对字符串进行HTML编码,并将结果输出发送到文本输出流,参数s表示要编码的字符串,output表示TextWriter类的文本输出流。
【范例14】
下面演示HtmlEncode()和HtmlDecode()方法的使用。
(1)创建BJDefault.aspx页面,并在页面中添加两个TextBox控件和两个Button控件,代码如下。
<asp:TextBox ID="txtSource" runat="server" TextMode="MultiLine" Columns="50" Rows="5"></asp:TextBox><br /><br /> <asp:Button ID="btnEncode" runat="server" Text="编 码" OnClick= "btnEncode_Click" /> <asp:Button ID="btnDecode" runat="server" Text="解 码" OnClick= "btnDecode_Click" /><br /><br /> <asp:TextBox ID="txtTarget" runat="server" TextMode="MultiLine" Columns="50" Rows="5"></asp:TextBox>
(2)在BJDefault.aspx.cs页面添加Button控件的Click事件代码,以【编码】按钮的事件代码为例,内容如下。
protected void btnEncode_Click(object sender, EventArgs e) { txtTarget.Text = "编码后的内容:"+Server.HtmlEncode(txtSource.Text); }
(3)运行窗体页面查看效果,如图4-17所示。输入内容后单击【编码】按钮,如图4-18所示。
图4-17 初始运行效果
图4-18 内容编码效果
(4)重新输入内容后单击【解码】按钮进行测试,效果图不再显示。