asp.net基础
这篇主要讲述以下基础知识:
- 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基础的更多相关文章
- (转)asp.net基础-HttpModule
HttpModule是向实现类提供模块初始化和处置事件.当一个HTTP请求到达HttpModule时,整个ASP.NET Framework系统还并没有对这个HTTP请求做任何处理,也就是说此时对于H ...
- ASP.NET基础之HttpHandler学习
ASP.NET基础之HttpHandler学习 经过前两篇[ASP.NET基础之HttpModule学习]和[ASP.NET基础之HttpContext学习]文章的学习我们对ASP.NET的基础内容有 ...
- ASP.NET基础之HttpModule学习
最近学习WCF知识时看到有关IIS版本的知识,发现对HttpContext,HttpModule,HttpHandler的内容都不是很了解,这三个也是ASP.NET相对基础的内容,晚上特地花点时间针对 ...
- ASP.NET基础知识汇总之WebConfig自定义节点详细介绍
之前介绍过Webconfig的具体知识ASP.NET基础知识汇总之WebConfig各节点介绍.今天准备封装一个ConfigHelper类,涉及到了自定义节点的东东,平时虽然一直用,但也没有系统的总结 ...
- [随记][asp.net基础]Page_Load和OnLoad
标题:[随记][asp.net基础]Page_Load和OnLoad 一.前言 东西好久不用.不想,就会忘,所以没办法,只好记下来. 二.正文 aspx页面加载的时候会自动执行Page_Load,也会 ...
- (转)ASP.NET基础之HttpHandler学习
原文地址:http://www.cnblogs.com/wujy/archive/2013/08/18/3266009.html 经过前两篇[ASP.NET基础之HttpModule学习]和[ASP. ...
- 【ASP.NET 基础】表单和控件
1.HTML表单的提交方式 对于一个普通HTML表单来说,它有两个重要的属性:action 和 method.action属性指明当前表单提交之后由哪个程序来处理,这个处理程序可以是任何动态网页或者 ...
- 【ASP.NET 基础】ASP.NET内置对象
准确地说,asp.net 并没有内置对象这一说,jsp 里确实把 request.response 这些当作 jsp 的内置对象,这里只不过是借用了一下 jsp 的说法而已.在 Web 中处于中心的是 ...
- ASP.NET基础笔记
MSDN: ...
随机推荐
- mysql用户管理,权限管理
mysql权限 相关操作: 授予的权限分为四组: 列权限:和表中的一个具体列相关,例如:使用update 语句更新test表中name 列的值 表权限:和一个具体的表的所有数据相关,例如:使用 sel ...
- Win7 钩子 超时 失效
这段时间在程序中,使用了全局钩子,但是在测试时发现,会偶尔失效. 在网上搜索到了这两篇文章: VC底层钩子程序在Win7/Vista下无效 Hooking problem in Windows 7 这 ...
- 转.....IOC 和DI
引述:IoC(控制反转:Inverse of Control)是Spring容器的内核,AOP.声明式事务等功能在此基础上开花结果.但是IoC这个重要的概念却比较晦涩隐讳,不容易让人望文生义,这不能不 ...
- LINQ实战
转载:http://www.cnblogs.com/yubinfeng/p/4567064.html 原作者:尼古拉斯~yu 文章部分内容在原文的基础上有删改. 我相信在net进阶的这个阶段,很 ...
- JVM里面hashtable和hashmap实现原理
JVM里面hashtable和hashmap实现原理 文章分类:Java编程 转载 在hashtable和hashmap是java里面常见的容器类, 是Java.uitl包下面的类, 那么Hash ...
- Citect:How do I translate Citect error messages?
http://www.opcsupport.com/link/portal/4164/4590/ArticleFolder/51/Citect To decode the error messag ...
- C#如何控制方法的执行时间,超时则强制退出方法执行
转自:http://outofmemory.cn/code-snippet/1762/C-how-control-method-zhixingshijian-chaoshi-ze-force-quit ...
- Python/Numpy大数据编程经验
Python/Numpy大数据编程经验 1.边处理边保存数据,不要处理完了一次性保存.不然程序跑了几小时甚至几天后挂了,就啥也没有了.即使部分结果不能实用,也可以分析程序流程的问题或者数据的特点. ...
- Vector 的清空
前两天比赛有一道题,有用到了vector的清空,用的是swap,我一开始还不太清楚,所以去查了下资料,转载一篇关于vector的清空的. vector <int> vecInt; ; i& ...
- android 开发adb server is out of date 解决方案
查看到底是哪个端口给占用了 输入红色部分命令 C:\Users\xxxxxx>netstat -ano | findstr "5037" TCP 127.0.0.1:5 ...