首页 > 代码库 > webform的学习(2)

webform的学习(2)

               突然回想一下,两周之后放假回家,三周之后重返学习,四周之后就要真正的面对社会,就这样有好多的舍不得在脑海中回旋,但是又是兴奋的想快点拥有自己的小生活,似乎太多的人在说程序的道路甚是艰难,我不知道我的选择是否是对的,但是我只有一件事情我认为我没有错,那就是无论什么时间带着兴趣去做自己喜欢做的事情就是对的,我不知道自己学习的怎么样,还没有接触真正的项目,但是我感觉好想知道自己和其他人的差别在哪里?每天可以说是在学习着,但是我感觉每天都在退步着,一步步的在向MVC的方向走去,但是好想知道在.net方向学习好的那些友友做程序的技术,然后向他们看齐,有个方向,今天仍然学习的webform,昨天已经详细的总结了webform的认识,但是最后没有保存好就没有啦,所以今天再重新的补充一些有关webform知识,

        一.WebForm的对象

        1.Request对象以及方法

         Request.UrlReferrer请求的来源,可以根据这个判断从百度搜的哪个关键词、防下载盗链、防图片盗链,可以伪造(比如迅雷)。 (使用全局一般处理程序);
           Request.UserHostAddress获得访问者的IP地址;
          Request.MapPath(virtulPath)将虚拟路径转换为磁盘上的物理路径,Request.MapPath("./a/b.aspx")就会得到D:\2014\WebSites\WebSite4\a\b.aspx。

        2.Request对象以及方法(响应缓存的输出)     

        Response.Buffer、Response.BufferOutput:经过Reflector反编译,发现两个属性是一样的,Buffer内部就是调用的BufferOutput。这个属性用来控制是否采用响应缓存,默认是true。
        Response.Flush()将缓冲区中的数据发送给浏览器。这在需要将Write出来的内容立即输出到浏览器的场合非常适用。案例:大批量数据的导入,显示正在导入第*条数据,用Thread.Sleep模拟耗时。
        Response.Clear()清空缓存区中的数据,这样在缓存区中的没有发送到浏览器端的数据被清空,不会被发送到浏览器。
        Response.ContentEncoding输出流的编码。
        Response.ContentType 输出流的内容类型,比如是html(text/html)还是普通文本(text/plain)还是JPEG图片(image/JPEG)。
        Response.OutputStream 输出流,在输出图片、Excel文件等非文本内容的时候要使用它
        Response.End()  终止响应,将之前缓存中的数据发给浏览器,End()之后的代码不会被继续继承执行,End方法里调用了Flush()方法。在终止一些非法请求的时候,比如盗链等可以用End()立即终止请求。

        3.Server对象以及方法

        技术分享

              
         Server是上下文对象context的一个属性,是HttpServerUtility类的一个对象;
         Server.HtmlDecode()、Server.HtmlEncode() Server.UrlEncode()、 Server.UrlDecode()是对HttpUtility类中相应方法的一个代理调用。推荐总是使用HttpUtility,因为有的地方很难拿到Server对象,而且Server的存在是为以前ASP程序员习惯而留的。别把HtmlEncode、UrlEncode混了,UrlEncode是处理超链接中的中文问题, HtmlEncode是处理html代码的。还是推荐用HttpUtility.HtmlEncode;
         Server.Transfer(path) 内部重定向请求,Server.Transfer(“Default.aspx”)将用户的请求重定向给Default.aspx处理,是服务器内部的接管(不能重定向到外部网站),浏览器是意识不到这个接管的,不是像Response.Redirect那样经历“通知浏览器‘请重新访问url这个网址’和浏览器接到命令访问新网址的过程”,是一次http请求,因此浏览器地址栏不会变化。因为是内部接管,所以在被重定向到的页面中是可以访问到Request、Cookies等这些来源页面接受的参数的,就像这些参数是传递给他的,而Redirect则不行,因为是让浏览器去访问的。注意Transfer是内部接管,因此不能像Redirect那样重定向到外部网站。(常考)Response.Redirect就可以重定向到外部网站。不能内部重定向到ashx,否则会报错“执行子请求出错”.
         Server.MapPath把相对路径转换为绝对的物理路径。
         其中的一些方法的实例:
Response.Write("<script>alert(‘登陆成功‘)</script>");Page.RegisterClientScriptBlock(Guid.NewGuid().ToString(), "<script>docment.write(‘登陆成功‘)</script>"); //可以使用此方法来弹出提示框,由于Response.Write方法的输出是在最开始的位置,所以并不好Page.RegisterStartupScript(Guid.NewGuid().ToString(), "<script>docment.write(‘登陆成功‘)</script>");  //也可以使用此方法来弹出提示框,但是这两种方法现在都已经被否决Response.Redirect("123.ashx");//这里的方法是临时重定向,发送的请求代码是302Response.RedirectPermanent("123.ashx");//这里的方法是永久重定向,发送的请求代码是301string url = Request.UserHostAddress; Response.Clear(); Response.Write(url);  //获取客户端地址string rawurl = Request.RawUrl; Response.Write(rawurl); //获取请求的相对地址string useragent = Request.UserAgent; Response.Write(useragent);//获取浏览器版本string hostaddress = Request.UserHostAddress; Response.Write(hostaddress);//获取客户端地址string hostname = Request.UserHostName; Response.Write(hostname); //获取客户端名字

                  二.状态保持方式

                 1.ViewStateASP.NET 的 .aspx页面特有,页面级的;就是在页面上的一个隐藏域中保存客户端单独使用的数据的一种方式;服务器端控件的值都自动保存在ViewState中;
         2.Cookie:HTTP协议下的一种方式,通过该方式,服务器或脚本能够在客户机上维护状态信息;就是在客户端保存客户端单独使用的数据的一种方式;就像你的病历本一样,医院直接给你带回家;
         3.Session:现在指的是进程内Session,在服务器端保存客户端单独使用的数据的一种方式;
         4.Application:服务器端保存共享数据的一种方式;
                今天简单的学习了cookie的使用方法,下面就到简单的使用在一个小程序中,我就直接使用昨天的登录界面修改,可以看下的前台类和后台类在不添加cookie时间和现在的区别,下面具来看下登录界面的程序:
          技术分享
public partial class fmLogin : System.Web.UI.Page{    UsermessBll bll = new UsermessBll();    protected void Page_Load(object sender, EventArgs e)    {        if (Request.Cookies["context"] != null)        //判断是否存在cookie,如果存在,直接跳转用户详情页,否则重新登录即可        {            Response.Redirect("UserMess.aspx");        }        else        {            if (Request.HttpMethod == "POST")          //登录时间判断是get方式请求还是post方式请求            {                string context = this.txtname.Value;                string pwd = this.txtpwd.Value;                string checkbox = Request.Form["checkbox"];                if (bll.GetLogin(context, pwd))            //bll层的返回值是一个bool类型,当不为空时间调用方法                {                    if (!string.IsNullOrEmpty(checkbox))          //这里是判断checkbox中是否被选中,选中时间会存在value值                    {                        HttpCookie cookie = new HttpCookie("cookietext", context); //创建cookie,它是键值对的形式存在                        cookie.Expires = DateTime.Now.AddDays(7);          //给他一个时间7天,可以是7小时或者7分钟                        Response.Cookies.Add(cookie);                    //添加cookie,记得使用的是Response对象,而不是Request                        Response.Redirect("UserMess.aspx");                    }                }                else                {                    Response.Write("<script>alert(‘登陆失败‘)</script>");                }            }        }    }}

         下面就来看下UserMess页面,获取cookie:

         技术分享

public partial class UserMess : System.Web.UI.Page{    protected void Page_Load(object sender, EventArgs e)    {        HttpCookie cookie = Request.Cookies["cookietext"]; //获取cookie        if (cookie != null)        //当存在cookie时间        {            this.span.InnerHtml = "<a href=http://www.mamicode.com/‘‘>" + cookie.Value + "</a>&nbsp&nbsp&nbsp<a href=http://www.mamicode.com/‘DelCookie.aspx‘>退出";//创建了一个退出的连接        }    }}

                  看下DelCookie页面,删除一个cookie:

public partial class DelCookie : System.Web.UI.Page{    protected void Page_Load(object sender, EventArgs e)    {        HttpCookie cookie = Request.Cookies["cookietext"];   //获取cookie        if (cookie != null)        {            cookie.Expires = DateTime.Now.AddDays(-1);  //这里是让cookie过期,即不存在cookie,即退出            //Request.Cookies.Clear();             //这里是使用clear方法清除cookie            Request.Cookies.Add(cookie);            Response.RedirectPermanent("fmLogin.aspx");        }    }}

                在这里只是实现了aspx.cs类的程序和aspx类的程序,如果测试的话可以看昨天的bll层的代码和dal层以及SQLHelper类的程序(http://www.cnblogs.com/dyxd/p/4251686.html),嘿嘿,今天就写到这里啦,每天告诉自己,要继续努力,加油!!!

webform的学习(2)