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

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

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

  1. <%@ Page Language="C#" ContentType="text/html" ResponseEncoding="gb2312" %>
  2.  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4.  
  5. <script runat="server">
  6.  
  7. </script>
  8.  
  9. <html xmlns="http://www.w3.org/1999/xhtml">
  10. <head runat="server">
  11. <title></title>
  12. </head>
  13. <body>
  14. <table border="1" width="600px" bordercolordark="#2B72A2" bordercolorlight="#993333">
  15. <tr><td colspan="2" bgcolor="#80ffff">Request</td></tr>
  16. <tr><td>ApplicationPath</td><td><%=Request.ApplicationPath %></td></tr>
  17. <tr><td>ContentEncoding</td><td><%=Request.ContentEncoding %></td></tr>
  18. <tr><td>Cookies Count</td><td><%=Request.Cookies.Count %></td></tr>
  19. <tr><td>QueryString Count</td><td><%=Request.QueryString.Count %></td></tr>
  20. <tr><td>UrlReferrer</td><td><%=Request.UrlReferrer %></td></tr>
  21. <tr><td colspan="2" bgcolor="#80ffff">Response</td></tr>
  22. <tr><td>Charset</td><td><%=Response.Charset %></td></tr>
  23. <tr><td>ContentEncoding</td><td><%=Response.ContentEncoding %></td></tr>
  24. <tr><td>Cookies Count</td><td><%=Response.Cookies.Count %></td></tr>
  25. <tr><td>ContentType</td><td><%=Response.ContentType %></td></tr>
  26. <tr><td colspan="2" bgcolor="#80ffff">Server</td></tr>
  27. <tr><td>Server.MapPath(".")</td><td><%=Server.MapPath(".") %></td></tr>
  28. <tr><td>对特殊字符进行编码Server.HtmlEncode</td><td><%=Server.HtmlEncode("<h1>哈哈哈哈哈哈哈</h1>")%></td></tr>
  29. <tr><td>没有进行编码</td><td><h1>哈哈哈哈哈哈哈</h1></td></tr>
  30. <tr><td>对url路径进行编码Server.UrlEncode</td><td><%=Server.UrlEncode("<a href=\"www.baidu.com\">百度以下</a>")%></td></tr>
  31. <tr><td>没有进行编码</td><td><a href="http://www.baidu.com">百度以下</a></td></tr>
  32. </table>
  33. </body>
  34. </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的区别和用法:

  1. <%@ Page Language="C#" ContentType="text/html" ResponseEncoding="gb2312" %>
  2.  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4.  
  5. <script runat="server">
  6.  
  7. </script>
  8.  
  9. <html xmlns="http://www.w3.org/1999/xhtml">
  10. <head runat="server">
  11. <title></title>
  12. </head>
  13. <body>
  14. <%
  15. int applicationCount = 1;
  16. int sessionCount = 1;
  17. if (Application["ApplicationCount"] == null)
  18. {
  19. Application["ApplicationCount"] = 1;
  20. }
  21. else
  22. {
  23. applicationCount = (int)Application["ApplicationCount"] + 1;
  24. Application["ApplicationCount"] = applicationCount;
  25. }
  26. if (Session["SessionCount"] == null)
  27. {
  28. Session["SessionCount"] = 1;
  29. }
  30. else
  31. {
  32. sessionCount = (int)Session["SessionCount"] + 1;
  33. Session["SessionCount"] = sessionCount;
  34. }
  35. Response.Write("当前页面由Application记录到的被访问了" + applicationCount + "次<br/>");
  36. Response.Write("当前页面由Session记录到的被访问了" + sessionCount + "次<br/>");
  37. %>
  38. </body>
  39. </html>

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

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

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

以下是ViewState的一个例子:

  1. <%@ Page Language="C#" %>
  2.  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4.  
  5. <script runat="server">
  6. protected void btnSet_Click(object sender, EventArgs e)
  7. {
  8. ViewState["text"] = txtSource.Text;
  9. }
  10. protected void btnGet_Click(object sender, EventArgs e)
  11. {
  12. if (ViewState["text"] != null)
  13. {
  14. txtResult.Text = (string)ViewState["text"];
  15. }
  16. else
  17. {
  18. txtResult.Text = string.Empty;
  19. }
  20. }
  21. </script>
  22.  
  23. <html xmlns="http://www.w3.org/1999/xhtml">
  24. <head runat="server">
  25. <title></title>
  26. </head>
  27. <body>
  28. <form id="form1" runat="server">
  29. <div>
  30. <table border="0">
  31. <tr><td>要设置的值</td><td><asp:TextBox ID="txtSource" runat="server"></asp:TextBox></td></tr>
  32. <tr><td>获取到的值</td><td><asp:TextBox ID="txtResult" runat="server"></asp:TextBox></td></tr>
  33. <tr><td><asp:Button ID="btnSet" runat="server" OnClick="btnSet_Click" Text="设置" /></td>
  34. <td><asp:Button ID="btnGet" runat="server" OnClick="btnGet_Click" Text="获取" /></td>
  35. </tr>
  36. </table>
  37. </div>
  38. </form>
  39. </body>
  40. </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. 纯javascript 回到 顶部 实例

    很多网站都会采用瀑布式的加载模式,像qq空间加载好友动态,为了用户体验更好,很多网站会加上回到顶部的连接,但大多数网站都是一下子就回到了顶部,当然,这样有这样的好处,但是我是个比较喜欢很炫的东西的人, ...

  2. 教了几天C语言 C语言竞赛------家长们你们为什么这么急!!

    由于工大某些传统,暑假放一个月,想想有很多事情要做,而且回去也是热着,倒不如不回家了,在哈尔滨正好避暑,又能轻轻松松的吧事情做了,暑假还能有个好的休息,这样想着,最终决定不回去了.其实不回去的话,就会 ...

  3. php学习日志(1)-php介绍

    在学习Php之前,我们要搞懂php是什么.英文全称php: php hypertext preprocessor,即php超文本预处理器.php脚本在服务器上执行,故它是一种服务器编程语言. php文 ...

  4. 从Windows远程Ubuntu

    关键字:Windows,Ubuntu,Putty,WinSCP OS:Windows 7,Ubuntu. 1.下载Putty:http://www.putty.org/. 2.双击运行putty.ex ...

  5. C# - 自动属性

    使用自动属性时,只能通过属性访问数据,不能通过底层私有字段,因为我们不知道底层私有字段的名称,是编译期间定义的.所以也没法对字段赋值或取值进行校验或限制. 无法使用这种方式定义只读或只写属性.

  6. poj 1348 Computing (四个数的加减乘除四则运算)

    http://poj.org/problem?id=1348 Computing Time Limit: 1000MS   Memory Limit: 10000K Total Submissions ...

  7. Asp.net MVC 视图之公用代码

    一.公共模板 转自:http://www.cnblogs.com/kissdodog/archive/2013/01/07/2848881.html 1.@RenderBody() 在网站公用部分通过 ...

  8. 体验Openstack--感觉这个比HADOOP还要基础啊

    当然,这两者应该是可以整到一起的..这个和ESX是什么关系叫?? 今天闲时慢慢按文档整了一个大概出来.. http://www.linuxidc.com/Linux/2013-01/78253p3.h ...

  9. CF192div2-C - Purification

    题意: 从给定的图中找出某些点,这些点能够消除同一行和同一列的“怪物”.求使得最少的点的位置. 关键:要想消除整张的图的妖怪,必须选中n个点(对于n行n列来说)!!!!!!!!!!! 做法:对于每一行 ...

  10. http://blog.csdn.net/carolzhang8406/article/details/7196011

    http://blog.csdn.net/carolzhang8406/article/details/7196011