欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Asp.net内置对象之Server对象(概述及应用)

程序员文章站 2024-03-05 13:51:18
一、了解server对象 server对象提供对服务器上的方法和属性的访问以及进行html编码的功能。这些功能分别由server对象相应的方法和属性完成。 二、serv...

一、了解server对象

server对象提供对服务器上的方法和属性的访问以及进行html编码的功能。这些功能分别由server对象相应的方法和属性完成。

二、server对象的常用属性

(1).machinename
(2).scripttimeout:属性用于设置脚本程序执行的时间,适当地设置脚本程序的scripttimeout可以提高整个web应用程序的效率。语法如下:
server.scripttimeout=time;(以s(秒)为单位)

scripttimeout属性的最短时间默认为90 s。对于一些逻辑简单、活动内容较少的脚本程序该值已经足够。但在执行一些活动内容较多的脚本程序时,就显得小了些。比如访问数据库的脚本程序,必须设置较大的scripttimeout属性值,否则脚本程序就不能正常执行完毕。

复制代码 代码如下:

response.write("服务器机器名:" + server.machinename);//服务器机器名:ibm 
response.write("超时时间为:" + server.scripttimeout);//超时时间为:30000000

三、server对象的主要方法

Asp.net内置对象之Server对象(概述及应用)

四、server对象的常见应用

(1).执行其他asp.net网页

使用server对象的execute方法可以在当前页面中执行同一web服务器上的另一页面,当该页面执行完毕后,控制流程将重新返回到原页面中发出server.execute方法调用的位置。被调用的页面应是一个.aspx网页,因此,通过server.execute方法调用可以将一个.aspx页面的输出结果插入到另一个.aspx页面中。server.execute方法语法如下:
server.execute (path)

在webform1页面中:

复制代码 代码如下:
 
protected void page_load(object sender, system.eventargs e)
{
response.write("<p>调用 execute 方法之前</p>");
server.execute("page2.aspx");//使用server.execute(path)执行其他asp.net页面。这里将page2.aspx的输出结果插入到当前页面
//server.execute("http://www.163.com");//程序不能执行,必须是相对路径
response.write("<p>调用 execute 方法之后</p>");
}

在page.aspx页面中
复制代码 代码如下:
 
protected void page_load(object sender, system.eventargs e)
{
response.write("这是page2.aspx网页");
}

则运行结果为:
Asp.net内置对象之Server对象(概述及应用)

(2).将流程控制转移到其他asp.net网页

使用server对象的transfer方法可以终止当前页的执行,并将执行流程转入同一web服务器的另一个页面。被调用的页面应是一个.aspx页面,在页面跳转过程中,request等对象保存的信息不变,这意味着从页面a跳转到页面b后可以继续使用页面a中提交的数据。此外,由于server.transfer方法调用是在服务器端进行的,客户端浏览器并不知道服务器端已经执行了一次页面跳转,所以实现页面跳转后浏览器地址栏仍将保存页面a的url信息,这样还可以避免不必要的网络通信,从而获得更好的性能和浏览效果。server.transfer方法如下:
server.transfer(path)

提示:参数path指定在服务器上要执行的新页的url路径,在此url后面也可以附加一些查询字符串变量的名称/值对
在webform1页面中:

复制代码 代码如下:

protected void page_load(object sender, system.eventargs e)
{
response.write("<p>调用 transfer 方法之前</p>");
//response.redirect("page2.aspx");
server.transfer("page2.aspx");
//使用server.transfer(path)终止当前页的执行,所以执行到这一行就终止了,也就是说后面的不再执行;
//然后将执行流程转入同一web服务器的另一个页面。也就是page2.aspx页面中了。在页面跳转过程中,request等对象保存的信息不变
//这意味着从页面a跳转到页面b后可以继续使用页面a中提交的数据:那么在page2.apsx页面中就能输出server.transfer(path)之前的数据了。
//server.transfer("www.163.com");//这样不行,只能是虚拟路径
response.write("<p>调用 transfer 方法之后</p>");
}

在page2页面:
复制代码 代码如下:

protected void page_load(object sender, system.eventargs e)
{
response.write("<p>这是 page2.aspx 的执行结果</p>");
}

则运行结果:
Asp.net内置对象之Server对象(概述及应用)

如果我们换成了response.redirect("page2.aspx");则只能实现页面跳转功能了。
引述:asp.net页面传值的三种方式

复制代码 代码如下:

(1).使用querystring
(2).使用session变量
(3).使用server.transfer

(3).将虚拟路径转换为物理文件路径

在web窗体页中经常需要访问文件或文件夹,此时往往要求将虚拟路径转换为物理文件路径。mappath方法将指定的相对或虚拟路径映射到服务器上相应的物理目录上。web服务器中的多个web应用程序一般都按照各自不同的功能存放于不同的目录中。

使用虚拟目录后,客户端仍然可以利用虚拟路径存取网页,这就是互联网用户在浏览器中常见的网页的url,但此时用户无法知道该网页的实际路径(实际存放位置)。但如果确实需要知道某网页文件的实际路径,则可利用mappath方法。mappath方法的语法如下:

server.mappath(path)

注意:其中参数path表示指定要映射物理目录的相对或虚拟路径。执行mappath方法后,将返回与path相对应的物理文件路径。
解惑:相对路径、绝对路径、物理路径、虚拟路径

复制代码 代码如下:

(1).相对路径:相对当前目录的路径、或相对某个目录的路径,这里主要体现“相对”的概念
(2).绝对路径:从网站的根路径为最高层开始的路径,如:c:\website\web1\index.html
(3).物理路径:实际磁盘中的路径,可以是相对路径、也可以是绝对路径
(4).虚拟路径:是服务器映射出来的路径,如/myweb

(这里引用了csdn博友:flytosea8的解释:链接地址:http://bbs.csdn.net/topics/70115404)


虚拟路径、物理路径
用iis举个例子:
web服务目录是d:\test
那么用http访问网站根目录的时候,其实访问的是d:\test,那么其中虚拟路径就是\(根),物理路径就是d:\test

一般虚拟路径、物理路径的提法在web、ftp服务中比较多见。

相对路径和绝对路径就比较广泛了,哪儿都看得到
相对路径:比如d:\test1\test2\test3
那么test2是test1的下级路径,test2又是test3的上级路径,所以上级路径或者下级路径都是相对而言的。一般上级路径可以用..来表示,当前路径可以用.来表示。
绝对路径:比如c:\根路径都是绝对了,任何路径相对于根路径都有一个绝对的最近的路径,也是绝对路径。

如果你想想别人指路的话,就可以悟出什么是相对的,什么是绝对的
相对的指路方法:从“这儿”向前走,右拐就到了
绝对的指路方法:汽车站向东100米(如果汽车站是绝对的位置),绝对的指路方法不依赖于指路的人在什么地方


复制代码 代码如下:

protected void page_load(object sender, system.eventargs e)
{
response.write("web站点的根目录为:"+server.mappath("/")+"<br>");
response.write("当前虚拟目录的实际路径为:"+server.mappath("./")+"<br>");//e:\asp.net\server对象\code\
response.write("当前网页的实际路径为:"+server.mappath(request.filepath)+"<br>");//e:\asp.net\server对象\code\webform1.aspx
response.write("当前网页的实际路径为:"+server.mappath("webform2.aspx")+"<br>");//e:\asp.net\server对象\code\webform2.aspx

}

(4).字符串的编码与解码

在某些情况下,可能需要在网页中显示“段落标记<p>”之类的内容,而不希望浏览器将其中的<p>解释为html语言中的段落标记;在上述场合,应当调用server对象的htmlencode方法对要在浏览器中显示的字符串进行编码
有时候,在传递参数时,是将数据附在网址后面传递,但是如果遇到一些如“#”等特殊字符的时候,就会读不到这些字符后面的参数。所以需要在传递特殊字符的时候,需先将要传递的内容先以urlencode编码,这样才可以保证所传递的值可以被顺利读到。
另外有些服务器对中文不能很好的支持,这时候也需要利用urlencode对其进行编码,以被服务器所识别。

复制代码 代码如下:

htmlencode||htmldecode:
protected void page_load(object sender, system.eventargs e)
{
response.write(server.htmlencode("粗体标记为:<b>粗体文字</b>"));//htmlencode对字符串进行html编码并返回编码后的字符串,所以这个原样输出
response.write("<br>");
response.write(server.htmldecode("粗体标记为:<b>粗体文字</b>"));//htmldecode对字符串进行html解码并返回解码后的字符串,所以这个后面加粗
}

复制代码 代码如下:

urlencode||urldecode:
protected void page_load(object sender, system.eventargs e)
{
response.write("<a href='1.aspx?data=" + server.urldecode("name@#163.com") + "'>没有编码的参数内容</a><br>");//在1.aspx页面输出:name@
response.write("<a href='1.aspx?data=name@#163.com'>没有编码的参数内容</a><br>");//在1.aspx页面输出:name@
response.write("<a href='1.aspx?data=" + server.urlencode("name@#163.com") + "'>编码的参数内容</a><br>");//在1.aspx页面输出:name@#163.com
response.write(server.urldecode("name@#163.com"));//对字符串进行url解码,这里输出:name@#163.com
response.write("<br>");
response.write(server.urlencode("name@#163.com"));//对字符串进行url编码,这里输出:name%40%23163.com
response.write("<br>");
response.write(server.urldecode("中文"));//输出:中文
response.write("<br>");
response.write( server.urlencode("中文"));//输出:%e4%b8%ad%e6%96%87
response.write("<br>");
response.write(server.urlencode("english"));//输出:english
response.write("<br>");
response.write(server.urldecode("english"));//输出:english
}