准确地说,asp.net 并没有内置对象这一说,jsp 里确实把 request、response 这些当作 jsp 的内置对象,这里只不过是借用了一下 jsp 的说法而已。
在 Web 中处于中心的是 Web 服务器,用来处理客户端的 HTTP 请求。由于 HTTP 是一种无状态的协议,也就是它并不记得上一次谁请求过它,不会主动去询问客户端,只有当客户端主动请求之后,服务器才会响应。
在 Web 中处于中心的是 Web 服务器,用来处理客户端的 HTTP 请求。由于 HTTP 是一种无状态的协议,也就是它并不记得上一次谁请求过它,不会主动去询问客户端,只有当客户端主动请求之后,服务器才会响应。
1.【Request】
Request封装了客户端请求信息。Request的常见属性如下:
属性名 | 值类型 | 说明 |
ApplicationPath | String | 获取请求的资源在网站上的根路径 |
ContentEncoding | Encoding | 设置请求对象的编码 |
Cookies | HttpCookieCollection | 客户端发送到服务器的Cookie集合 |
QueryString | NameValueCollection | 当前请求的查询字符串集合 |
UrlReferrer | Url | 获取用户由哪个url跳转到当前页面 |
2.【Response】
Response代表了服务器响应对象。每次客户端发出一个请求的时候,服务器就会用一个响应对象来处理这个请求,处理完这个请求之后,服务器就会销毁这个相应对象,以便继续接受其它客服端请求。
Response常用属性如下:
属性名 | 值类型 | 说明 |
Charset | string | 表示输出流的所使用的字符集 |
ContentEncoding | Encoding | 设置输出流的编码 |
ContentLength | Int | 输出流的字节大小 |
ContentType | string | 输出流的HTTP MIME类型 |
Cookies | HttpCookieCollection | 服务器发送到客户端的Cookie集合 |
Output | TextWriter | 服务器响应对象的字符输出流 |
RedirectLocation | string | 将当前请求重定向 |
Response常用方法
属性名 | 返回值类型 | 说明 |
AppendCookie | void | 向响应对象的Cookie集合中增加一个Cookie |
Clear | void | 清空缓冲区中的所有内容输出 |
Close | void | 关闭当前服务器到客户端的连接 |
End | void | 终止响应,并且将缓冲区中的输出发送到客户端 |
Redirect | void | 重定向当前请求 |
3.【Server】
Server对象是用于获取服务器的相关信息的对象。它常用方法如下:
属性名 | 返回值类型 | 说明 |
Execute | void | 执行指定的资源,并且在执行完之后再执行本页的代码 |
HtmlDecode | string | 消除对特殊字符串编码的影响 |
HtmlEncode | string | 对特殊字符串进行编码 |
MapPath | string | 获取指定相对路径在服务器上的物理路径 |
Transfer | void | 停止执行当前程序,执行指定的资源 |
UrlDecode | string | 对路径字符串进行解码 |
UrlEncode | string | 对路径字符串进行编码 |
4.【Session】
Session对象用来保存与特定用户相关的信息,Session中的数据保存在服务器端,在客户端需要的时候创建Session,在客户端不需要的时候销毁Session,使它不再占用服务器内存。
在asp.net中Session的默认生命周期是20分钟,也就是当我们在9:00的时候设置了一个Session,如果在9:20之前客户端没有任何请求,那么它的生命周期就到9:20分钟结束。但是一旦用户在9:19又向服务器发送了一个请求,那么这个Session现在的生命周期就是在当前时间的基础上再加上20分钟,也就是此时这个Session的生命周期是到9:39结束。
Session具有以下特点:
Session中的数据保存在服务器端;
Session中可以保存任意类型的数据;
Session默认的生命周期是20分钟,可以手动设置更长或更短的时间。
假设我们要设置一个Session用来保存用户名,这个Session的名字是“UserName”,值是“sa”,代码如下:
Session[“UserName”]=”sa”;
一个网站里用到 Session 的地方肯定不止一个,所以在设置和获取 Session 的时候通过 Session 的名在来操作,并且 Session 被设置成能存储任意类型的对象(即 Object 类型),所以获取 Session 的时候要根据设置的时候的实际类型进行响应的强制类型转换(当然如果在 Session 中存放像 int/byte/short 这样的数据类型,获取 Session 的值算是一种拆箱操作而不是强制类型转换),对于上面的 Session ,获取 Session 的值的代码如下:
string username=(string)Session[“UserName”];
对于上面的代码,有个问题需要注意:当没有设置相应的 Session 或者 Session 因为超过生命周期而被销毁时,上面的代码有可能抛出异常。我们可以先判断是否存在指定名称的 Session,如果不存在就不用获取了,仅当存在的情况下才获取 Session 的值,上面的代码可以改进如下:
string userName; if(Session["UserName"]!=null) { //当指定名称的Session存在时,获取指定Session的值 userName=(string)Session["UserName"]; }
5.【Cookie】
Cookie 对象和 Session 对象一样也是用来保存特定的用户相关的数据,不过 Session 不同的是 Cookie 保存在客户端而不是服务器上,每次客户端发出请求的时候都会把 Cookie 一起发送到服务器,服务器每次响应客户端请求的时候会重新把 Cookie 发送到客户端保存。
Cookie 保存数据有以下特点:
Cookie 中的数据保存在客户端;
Cookie 中只能保存字符串类型的数据,如果需要在Cookie中保存其它类型数据,需要将其转换成字符串类型后保存;
Cookie 也有其默认生命周期,也可以手动设置,最大可设置成50年之后过期。
同 Session 的情况一样,有可能在一个网站中使用到的 Cookie 不止一个,我们仍通过 Cookie 的名称来区分不同的 Cookie。
设置 Cookie 的过程就是在服务器的响应对象 Response 的 Cookie 集合中增加一个 Cookie ,Response 对象会把这个 Cookie 集合中的所有 Cookie 都发送客户端。代码如下(仍以保存用户名为例):
HttpCookie cookie = new HttpCookie("UserName", "sa"); Response.Cookies.Add(cookie);
获取 Cookie 就是从客户端的请求对象中找到对应名称的 Cookie,当然也有可能出现 Cookie 不存在的情况,所以在获取之前也需要检查指定名称的Cookie是否存在,如下:
string userName; if (Request.Cookies["UserName"] != null) { userName = Request.Cookies["UserName"].Value; }
6.【Application】
Application 和 Session 存储的数据类型和存储位置一样,都是存放 Object 类型的数据(也就是任意类型),并且存放在服务器上,不同的 Application 中的数据可以由网站中所有的用户来设置或者获取。并且 Application 中存放的数据没有时间限制,除非我们手动删除或者服务器重新启动,否则存放的数据都会丢失。
下面是 Session、Cookie 和 Application 的区别:
下面是 Session、Cookie 和 Application 的区别:
名称 | 使用范围 | 存储位置 | 存放数据类型 | 生命周期 |
Session | 特定用户 | 服务器 | Object,也就是任意类型 | 有,可以自行设置 |
Cookie | 特定用户 | 客户端 | String,也就值字符串 | 可以自行设置 |
Application | 所有用户 | 服务器 | Object,也就是任意类型 | 无 |
7.【<%%>表达式】
<%%>用来编写程序的代码部分。在其中可以声明变量和方法。如下:
在<%%>就是符合C#要求的代码。
<% string name = Request.Form["userName"].Trim(); string userName; if (Request.Cookies["UserName"] != null) { userName = Request.Cookies["UserName"].Value; } %>
8.【<%=%>表达式】
<%=%>是用来向输出流中变量的值。其用法如下:
<% int i = 6; %> <%=i %>
Response.Write()输出和<%=%>输出最后的效果是一样的。