ASP.NET学习笔记

ASP.NET学习笔记

1.ASP.NET需要学习的内容.
    一般处理程序HttpHandler
    模板引擎
    WebForm(aspx)
    ASP.net MVC

    需要的基础知识: C#,ADO.Net,HTML,JavaScript
    需要的工具: 浏览器Chrome。开发工具VS2010,.Net3.5。SQL Server2005.

2.一个网站打开流程
    请求、处理、响应.

3.一般处理程序
    VS2010新建/项目/Visual C#/Web/ASP.NET 空Web应用程序.
    解决方案/添加/新建项/Visual C#/Web/一般处理程序
    如果使用Chrome浏览器调试: 项目中新建一个HTML文件,右键点击浏览方式,选择Chrome浏览器。

    请求参数
    (1)浏览器中使用参数 http://localhost:47937/Handler1.ashx?name=test,或者使用表单提交参数.
    (2)一般处理程序中处理请求public void ProcessRequest(HttpContext context):
       得到请求参数: context.Request["name"]

4.关于表单
    表单中哪些标签的哪些值会被提交给服务器:
    只有input、textarea、select三种标签的value属性值才会提交给服务器.
    标签必须设定name属性,提交到服务器时才会以键值对的方式提交给服务器.
    对于RadioButton相同name的为一组,选中的RadioButton的value被提交到服务器.
    放到form标签内,只有放到form标签内的标签才会被提交到服务器.

5.Get与Post.
    GET(默认值)是通过URL传递表单值,POST传递的表单是隐藏到http报文中,URL看不到.
    GET传递的数据量是有限的,传递大数据量不能用GET,POST没有这个限制,但POST无法通过URL定位网页内容。
    GET方式URL数据格式: 服务端文件名后跟?,键值对之间用&分割,如果URL中有汉字和特殊符号,则需要对URL进行编码.

6.Http协议
    Http协议的几个概念:
    连接(Connection): 浏览器和服务器之间传输数据的同道.一般请求完毕就关闭,http不保持连接。不保持连接会降低处理速度,保持连接会降低服务器处理的客户端请求数,不保持连接服务器可

以处理更多请求。
    请求(Request): 浏览器向服务器发送的请求消息,包含请求的类型、请求的数据、浏览器的信息(语言、版本等).
    响应(Response): 服务器对浏览器请求返回的数据,包含是否成功、错误码等。

    Http协议报文:
    请求
    GET/HTTP/1.1 表示向服务器用GET方式请求页面,使用HTTP/1.1协议
    User-Agent   浏览器的版本信息
    Referer:     来源页面.
    响应:
    响应码: 200: OK, 404,没找到, 302 Found暂时转移,用于重定向,Response.Redirect会让浏览器再请求一次重定向的地址,重定向的请求是Get方式.
    Content-Type: text/html;charset=utf-8 表示返回数据的类型.
    服务器通过Content-Type告诉客户端响应的数据的类型,这样浏览器就根据返回数据的类型来进行不同的处理,如果是图片类型就显示,如果是文本类型就直接显示内容,如果是html类型就用浏

览器显示内容,常用Content-Type: text/HTML、image/GIF、image/JPEG、text/plain、text/javascript.

7.重定向(Redirect)
    Redirect是向浏览器返回302,通知浏览器重新访问新网址,浏览器街道命令后访问新网址。新网址为响应头Location指定的内容。
    重定向在浏览器看到的网址是有变化的.
    context.Response.Redirect("http://www...");

8.模板引擎Nvelocity
    有几种模板引擎: Nvelocity、StringTemplate、RazorEngine.
    Nvelocity的网站
     http://www.castleproject.org/download/
     http://sourceforge.net/projects/nvelocity/
    Nvelocity使用步骤: 编写HTML模板 -> 提供数据 -> 渲染成需要的HTML.

    (1)模板文件:/templates/login.html
    <html>
    <head>
        <title></title>
    </head>
    <body>
        <form action="Login.ashx">
            <input type="text" name="username" value="$username"/>
            <input type="text" name="password" value="$password"/>
        </form>
    </body>
    </html>

    (2)一般处理程序Login.ashx
    Nvelocity基本用法代码:
    public class Loginashx : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";

            VelocityEngine vltEngine = new VelocityEngine();
            vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER,"file");
            vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, System.Web.Hosting.HostingEnvironment.MapPath("~/templates")); //模板文件所在的文件夹
            vltEngine.AddProperty("file.resource.loader.cache", true);
            vltEngine.Init();

            VelocityContext vltContext = new VelocityContext();
            vltContext.Put("username", "test");  //设置参数,在模板中可以通过$username形式来引用
            vltContext.Put("password", "123");

            Template vltTemplate = vltEngine.GetTemplate("login.htm");
            System.IO.StringWriter vltWriter = new System.IO.StringWriter();
            vltTemplate.Merge(vltContext, vltWriter);
            string html = vltWriter.GetStringBuilder().ToString();

            context.Response.Write(html);

        }
    }

9.Nvelocity输出对象的属性.
    当处理程序中使用VelocityEngine.Put(key,value)设置属性参数后,可以在模板中使用$key形式来使用数据。
    给模板设置的属性如果有属性,则还可以进一步获取: $data.Person.Name.
    如果对象有一个字符串索引器,则还可以"$data.索引器值"的方式通过索引器获取值。
    Dictiorary<string,string> dict = new Dictiorary<string,string>()
    dict["tom"] = "北京"
    dict["jack"] = "上海"
    dict["gym"] = "广州"
    vltContext.Put("ps", dict);
    模板中使用$ps.tom访问.
    Nvelocity中解析jQuery代码$.ajax()中的$.的时候把$理解成了Nvelocity的$特殊符号,应对方法是用jquery代替$.

    把DataTable传递给NVelocity的时候要传递DataTable.Rows
    为减少每次解析模板的时间,建议启用NVelocity缓存

10.Nvelocity高级:
    1.foreach语句
    #foreach($element in $list)
      this is $element
    #end
    2.条件语句
    #if(condition)
    #elseif(condition)
    #else
    #end
    3.包含另一个文件
    #include
      #include("foot.htm"),文件内容会包含进来,不会解析其中的NVelocity元素.
    #parse也可以包含另一个文件,但是会解析其中的NVelocity元素,被包含的文件继承父模板中的参数。可以实现"网站头体一致、左侧菜单"等效果。

11.封装Nvelocity的处理.
    Nvelocity封装,用匿名类传模板解析的参数.
    var news = new {Title="",Author="",Msg=""};
    vltContext.Put("data", news);

12.数据库连接字符串
    Web.config:
<configuration>
  <connectionStrings>
    <add name="test" connectionString="Data Source=.;Initial Catalog=test;User Id=userid;Password=password;"/>
  </connectionStrings>
</configuration>

13.通过URL传递状态
    两个页面之间传递数据最好、后续麻烦最少、最简单的方法就是通过URL传递.
    增删改查页面
    优点:简单、直接,明确知道发给谁,数据不会乱。缺点:如果多个页面或者不确定页面之间要传那么就需要每次跳转都带着,不保密。

    可以通过表单的隐藏字段传递状态,但一般不建议这么做。

14.Cookie
    因http是无连接的(请求响应之后即断开),所以不能保持状态。Cookie是为多次请求响应之间传递状态和数据而设计的。
    Cookie保存在浏览器端的电脑中,是以键值对的形式存放。Cookie可以被清除。
    Cookie是和站点相关的,浏览器会在每次向服务器请求的时候除了发送表单参数外,还会将和站点相关的所有Cookie都提交给服务器,是强制性的。然后在服务器端读取、修改。
    服务器返回数据除了普通的html数据外,还会返回修改的Cookie,浏览器把拿到的Cookie值更新到本地浏览器的Cookie就可以了.
    如果不设定Expires那么生命周期则是关闭浏览器则终止,否则最多到Expires的时候终止.
    Cookie的缺点是不能存储过多信息,不能存储机密信息.
    Cookie无法跨不同的浏览器。

    服务器端控制Cookie:
    设置值: context.Response.SetCookie(new HttpCookie("UserName",username));
    读取值: username = context.Request.Cookies["UserName"].Value;

    Cookie有效期:
    HttpCookie cookie1 = new HttpCookie("Age", "30");
    cookie1.Expires = DateTime.Now.AddHours(2);
    context.Response.SetCookie(cookie1);

15.Session原理
    由于用Cookie机制来保持状态(例如登录状态),Cookie保存在客户端,存在安全性问题,需要一种服务器端的Cookie机制即Session机制。
    自己实现服务器端的Cookie机制: Cookie不能存储机密数据。如果想存储数据,可以保存一个Guid到Cookie中,然后在服务器中建立一个以Guid为Key、复杂数据为Value全局静态Dictionary,放

到Application中。这个Guid就相当于用户的一个令牌。
    ASP.NET已经内置了Session机制,原理和自己实现服务器端的Cookie机制类似,普通的HttpHandler要能够操作Session.要实现IRequiresSessionState接口。
    Cookie是存在客户端,Session是存在服务器端,目的是一样的: 保存和当前客户端相关的数据(当前网站的任何一个页面都能取到Session、Cookie).
    Session有自动销毁机制,如果一段时间内浏览器没有和服务器发生任何的交互,则Session会定时销毁,这也是为什么一段时间不操作,系统就会自动退出。
    Session实现登录。
    Session的实质: 由于Web是无状态的,Session实质是借助Cookie来实现的,客户端浏览器在发出请求后,web服务器会给客户端浏览器一个唯一标识的Cookie,客户端浏览器下次再请求时,会带

上这个唯一标识的Cookie.如果在浏览器把Cookie清除,这个Session就没有了。所以实质是借助Cookie来实现Session.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值