这篇主要讲述以下基础知识:

  • Request对象
  • Response对象
  • Server对象
  • Cookie对象
  • Application对象
  • ViewState对象
  • <%%>与<%=%>表达式、数据绑定表达式<%#%>
  • 目录运算符

Request封装了客服端的请求信息,它是HttpRequest的一个实例。Response代表了服务器的响应对象,它是HttpResponse的一个实例。每次客户端发出一个请求时,服务器就会用一个响应对象来处理这个请求,处理完之后,服务器就会销毁这个响应对象,以便继续接收其他客户端请求。Server用于获取服务器的相关信息,它是HttpServerUtility的一个实例。通过以下代码介绍这3个对象的一些属性:

 <%@ Page Language="C#" ContentType="text/html" ResponseEncoding="gb2312" %>

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 <script runat="server">

 </script>

 <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<table border="1" width="600px" bordercolordark="#2B72A2" bordercolorlight="#993333">
<tr><td colspan="2" bgcolor="#80ffff">Request</td></tr>
<tr><td>ApplicationPath</td><td><%=Request.ApplicationPath %></td></tr>
<tr><td>ContentEncoding</td><td><%=Request.ContentEncoding %></td></tr>
<tr><td>Cookies Count</td><td><%=Request.Cookies.Count %></td></tr>
<tr><td>QueryString Count</td><td><%=Request.QueryString.Count %></td></tr>
<tr><td>UrlReferrer</td><td><%=Request.UrlReferrer %></td></tr>
<tr><td colspan="2" bgcolor="#80ffff">Response</td></tr>
<tr><td>Charset</td><td><%=Response.Charset %></td></tr>
<tr><td>ContentEncoding</td><td><%=Response.ContentEncoding %></td></tr>
<tr><td>Cookies Count</td><td><%=Response.Cookies.Count %></td></tr>
<tr><td>ContentType</td><td><%=Response.ContentType %></td></tr>
<tr><td colspan="2" bgcolor="#80ffff">Server</td></tr>
<tr><td>Server.MapPath(".")</td><td><%=Server.MapPath(".") %></td></tr>
<tr><td>对特殊字符进行编码Server.HtmlEncode</td><td><%=Server.HtmlEncode("<h1>哈哈哈哈哈哈哈</h1>")%></td></tr>
<tr><td>没有进行编码</td><td><h1>哈哈哈哈哈哈哈</h1></td></tr>
<tr><td>对url路径进行编码Server.UrlEncode</td><td><%=Server.UrlEncode("<a href=\"www.baidu.com\">百度以下</a>")%></td></tr>
<tr><td>没有进行编码</td><td><a href="http://www.baidu.com">百度以下</a></td></tr>
</table>
</body>
</html>

这里要注意一下,请求对象的字符编码是UTF-8,而响应对象的编码为gb2312,这样很可能会产生乱码问题。Response的ContentType指的是返回网页的内容类型(mime类型),如果ContentType是text/html,代表响应是以HTML数据形式传输的,如果是image/jpeg,代表响应的是一张图片,还有很多其他别的类型,http权威指南有比较详细的讲述。

Session用来保存与特定用户相关的信息,它是HttpSessionState的一个实例。Session保存在服务器端,超过Session的生命周期(默认20分钟)后,服务器会销毁Session,使它不再占用服务器内存,因为服务器并不管客服端是否存在,所以无法确定客户端什么时候不再使用Session,因而会通过生命周期销毁Session,确保内存充足。Session是通过SessionID来区分不同用户的,并且在一个有限时间窗口内来自统一浏览器的请求标识为一个会话,也就是它们的SessionID是相同的,如果客户端启用了Cookie,那么客户端与服务器之间通过Cookie来传递SessionID的值;如果客户端没有启用Cookie,则通过URL来传递SessionID的值。

Cookie对象也是用来保存与特定用户相关的数据,它是HttpCookie的一个实例,但和Session不同,Cookie是保存在客户端上的,每次客户端发出请求时都会把Cookie一起发送到服务器,服务器每次响应客户端请求时会重新把Cookie发送到客户端保存。需要注意,Cookie只能保存字符串类型的数据,而Session可以保存任意类型的数据。Cookie也有默认的生命周期,可以手动设置,最多可以为50年之后,不过使用的时候需要注意,有可能被用户禁用的。

Application是HttpApplicationState的一个实例,存储的数据类型和存储位置和Session一样,并且Application存放的数据没有时间限制,除非在代码中手动删除或者Web服务器重启,否则存放的数据都不会丢失 。与Session和Cookie不一样,Application不是针对特别用户的,它适合保存全局的数据信息,常用作记录网站的用户访问量。

可通过以下例子演示Application和Session的区别和用法:

 <%@ Page Language="C#" ContentType="text/html" ResponseEncoding="gb2312" %>

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 <script runat="server">

 </script>

 <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<%
int applicationCount = 1;
int sessionCount = 1;
if (Application["ApplicationCount"] == null)
{
Application["ApplicationCount"] = 1;
}
else
{
applicationCount = (int)Application["ApplicationCount"] + 1;
Application["ApplicationCount"] = applicationCount;
}
if (Session["SessionCount"] == null)
{
Session["SessionCount"] = 1;
}
else
{
sessionCount = (int)Session["SessionCount"] + 1;
Session["SessionCount"] = sessionCount;
}
Response.Write("当前页面由Application记录到的被访问了" + applicationCount + "次<br/>");
Response.Write("当前页面由Session记录到的被访问了" + sessionCount + "次<br/>");
%>
</body>
</html>

ps:要注意Application和Session都是存储在服务器的内存中,所以不要存储太多或太大的数据。

ViewState是System.Web.UI.StateBag的一个实例。在asp.net中HTML和Web服务器控件使用了ViewState对象作为其主存储机制,用ViewState对象来存储控件的基本状态信息,当然在开发过程中也可以使用ViewState来存储自定义的数据。ViewState提供一种在一个页面的多个请求之间保存状态数据的方法,在处理页面时,ViewState会被散列为一个或多个隐藏域(可以通过查看页面代码见到隐藏域)。

ViewState很多方法和属性与Session相似,但是ViewState中的数据是以隐藏域的形式保存的并且ViewState中的数据只能在同一个页面的不同请求之间传递,而不能从一个页面传递到另一个页面。

以下是ViewState的一个例子:

 <%@ Page Language="C#" %>

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 <script runat="server">
protected void btnSet_Click(object sender, EventArgs e)
{
ViewState["text"] = txtSource.Text;
}
protected void btnGet_Click(object sender, EventArgs e)
{
if (ViewState["text"] != null)
{
txtResult.Text = (string)ViewState["text"];
}
else
{
txtResult.Text = string.Empty;
}
}
</script> <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table border="0">
<tr><td>要设置的值</td><td><asp:TextBox ID="txtSource" runat="server"></asp:TextBox></td></tr>
<tr><td>获取到的值</td><td><asp:TextBox ID="txtResult" runat="server"></asp:TextBox></td></tr>
<tr><td><asp:Button ID="btnSet" runat="server" OnClick="btnSet_Click" Text="设置" /></td>
<td><asp:Button ID="btnGet" runat="server" OnClick="btnGet_Click" Text="获取" /></td>
</tr>
</table>
</div>
</form>
</body>
</html>

<%%>用来编写程序的代码部分,而<%=%>用来向输出流中输出变量的值,可通过之前的查看。<%#%>用于绑定数据,可配合Xpath或Eval函数进行绑定。

目录运算符,有以下4种路径表示的方式:

1、直接以绝对URL表示

例如:<img src="http://www.baidu.com/images/book.jpg" />,表示的是图片位于www.baidu.com这个网站根目录的images子目录下。这段代码可以放在任意位置,只要确保图片和网络状态正常。

2、以相对与当前网页的形式表示

例如:<img src="data:images/book.jpg" />,表示的是图片位于陷入这段代码的网页所在目录下的images子目录下,必须保证网页与图片的这种对应关系才能保证正常显示。

3、以相对于网站根路径的方式表示

例如:<img src="/images/book.jpg" />,表示的是图片位于网站根目录下的images文件夹下,用这种方法,网页与图片之间不必豹祠一定的相应关系

4、以当前页面路径对等的路径形式表示

例如:<img src="../images/book.jpg" />,表示的是图片位于当前页面所在目录的上级目录下的images子目录下。

也可以通过设置<base href="" />的方式表示基于基路径的表示形式。在asp.net当中,引入了一种只能用于服务器控件上或者服务器代码里的根目录运算符(~),它表示当前应用程序的根目录,例如:

<asp:Image ID="aa" runat="server" ImageUrl="~/images/book.jpg" />

asp.net基础的更多相关文章

  1. (转)asp.net基础-HttpModule

    HttpModule是向实现类提供模块初始化和处置事件.当一个HTTP请求到达HttpModule时,整个ASP.NET Framework系统还并没有对这个HTTP请求做任何处理,也就是说此时对于H ...

  2. ASP.NET基础之HttpHandler学习

    ASP.NET基础之HttpHandler学习 经过前两篇[ASP.NET基础之HttpModule学习]和[ASP.NET基础之HttpContext学习]文章的学习我们对ASP.NET的基础内容有 ...

  3. ASP.NET基础之HttpModule学习

    最近学习WCF知识时看到有关IIS版本的知识,发现对HttpContext,HttpModule,HttpHandler的内容都不是很了解,这三个也是ASP.NET相对基础的内容,晚上特地花点时间针对 ...

  4. ASP.NET基础知识汇总之WebConfig自定义节点详细介绍

    之前介绍过Webconfig的具体知识ASP.NET基础知识汇总之WebConfig各节点介绍.今天准备封装一个ConfigHelper类,涉及到了自定义节点的东东,平时虽然一直用,但也没有系统的总结 ...

  5. [随记][asp.net基础]Page_Load和OnLoad

    标题:[随记][asp.net基础]Page_Load和OnLoad 一.前言 东西好久不用.不想,就会忘,所以没办法,只好记下来. 二.正文 aspx页面加载的时候会自动执行Page_Load,也会 ...

  6. (转)ASP.NET基础之HttpHandler学习

    原文地址:http://www.cnblogs.com/wujy/archive/2013/08/18/3266009.html 经过前两篇[ASP.NET基础之HttpModule学习]和[ASP. ...

  7. 【ASP.NET 基础】表单和控件

    1.HTML表单的提交方式 对于一个普通HTML表单来说,它有两个重要的属性:action 和 method.action属性指明当前表单提交之后由哪个程序来处理,这个处理程序可以是任何动态网页或者 ...

  8. 【ASP.NET 基础】ASP.NET内置对象

    准确地说,asp.net 并没有内置对象这一说,jsp 里确实把 request.response 这些当作 jsp 的内置对象,这里只不过是借用了一下 jsp 的说法而已.在 Web 中处于中心的是 ...

  9. ASP.NET基础笔记

    MSDN:                                                                                                ...

随机推荐

  1. MySQL查看和修改字符编码

    MySQL的默认编码是Latin1,不支持中文,要支持中午需要把数据库的默认编码修改为gbk或者utf8. 1.需要以root用户身份登陆才可以查看数据库编码方式(以root用户身份登陆的命令为:&g ...

  2. find grep

    grep grep -rn "hello,world!" * #递归查找当前目录下所有包含hello,world的文件 grep -C number pattern files : ...

  3. python log 层次结构

    文件结构 - run.py - b -- __init__.py run.py import logging import b log = logging.getLogger("" ...

  4. Oracle的rowid结构解析

    SQL> select rowid,deptno from dept; ROWID                  DEPTNO ------------------ ---------- A ...

  5. const用法

    一.const作用 二.const用法 1.修饰一般常量   修饰符const可以用在类型说明符前,也可以用在类型说明符后. 例如: ; ; 2.修饰常数组  修饰符const可以用在类型说明符前,也 ...

  6. C# - implicit, explicit

    如果类型直接没有继承关系,也没有共享接口,想在这两个类型之间进行转换,就必须重载转换运算符. 此时需要关键字implicit和explicit. 下面定义了类型ConvClass1和ConvClass ...

  7. CSS3学习之 transform 属性

    CSS3 transform是什么? transform的含义是:改变,使…变形:转换 CSS3 transform都有哪些常用属性? transform的属性包括:rotate() / skew() ...

  8. javascript中部分不能使用call apply调用来重写的构造函数

      This tests if TypeError is thrown or not when we call a constructor as a normal function.       On ...

  9. scrollview始终显示滚动条 Android

    设置scrollview的:android:fadeScrollbars="false"表示始终显示垂直滚动条

  10. C#中文转换成拼音英文

    #region 0.1 中文转到英文 + static string GetPinYing(string characters) /// <summary> /// 中文转到英文 /// ...