System.Web Namespce
System.Web概述:
System.Web是.NET中web应用开发的一个基础类库,定义浏览器与服务器之间的所有操作方法,包括请求输入流(HttpRequest)、输出流(HttpResponse)和上下文管理类(HttpContext)等于HTTP请求相关的类。
只有添加了对System.Web命名空间的引用,开发人员才可以在程序中处理与HTTP请求相关的信息。引用命名空间的代码如下,其中“using”是加载命名空间的关键字,后面是命名空间的全称。
using System.Web;
客户端发送的HTTP信息集合:HttpRequest类
HttpRequest类管理着客户端发送的HTTP信息集合,包括Cookies、HTTP头信息和主体信息等。通过HttpRequest的Browse属性还可以获取客户端浏览器的一些基本信息。
HttpRequest还可以登陆到网络上其他服务器,然后结合网络操作的一些其他类,通过HTTP获取其他网站的信息。这一点在未来的Web服务应用中特别重要。
语法定义
HttpRequest类的定义特别简单,具体语法定义如下:
Public sealed class HttpRequest
使用HttpRequest类的构造函数语法如下:
public HttpRequest(string filename,string url,string querystring)
参数“filename”表示请求的文件详细路径
参数“url”表示当前请求的URL的名称
参数“querystring”表示请求的变量,指所请求URL中“?”后所有的变量
在实际的应用中,通常不需要创建自己的HttpRequest实例,因为其方法和属性由其他类(如Page和HttpContext)的Request属性提供。
方法详解
HttpRequest类主要用来获取HTTP请求的信息,所以要求的属性特别多,而方法主要是进行一些必需的转换,下面是HttpRequest类中常用的方法及其说明。
BinaryRead: 用二进制读取当前输入流
MapPath :虚拟路径到物理路径的映射
SaveAs :将Http请求保存在到磁盘
ValidateInput :对访问的数据进行验证
典型应用:
HttpRequest类并不需要专门实例化,而是采用Page和HttpContext等类的Request属性来实现其基本方法和属性。本例就是使用Page类的Request属性来完成HttpRequest类的实例。
Response.Write("参数的值为: " +Request.QueryString["name"]+"<br/>") ;获取页面传递参数并显示 Response.Write("当前URL为:" +Request.Url+"<br/>") ;//获取当前的URL Response.Write("客户端IP为:" +Request.UserHostAddress+“<br/>" ); //获取客户端的IP Response.Write("输入流的字节数位:" +Request.TotalBytes+ "<br/>"); //获取输入流的总字节数 Response.Write("服务器第一个KEY:" +Request.ServerVariables.AllKeys[0]+"<br/>"); //获取服务器变量集合中的第一个变量 Request.SaveAs(@"C:\test.txt",true); //页面传递过来的请求保存在文件中
个人总结:HttpRequest类是一个请求类,用户通过Http协议访问web服务期间包含很多的http请求信息,这个类可以所是这些信息的封装体,我们可以通过HttpRequest类访问那些请求信息,如Request.Url、Request.QueryString["name"]等。
服务器返回的Http信息:HttpReponse
HttpReponse类管理着服务器对Http请求的响应,并提供一些方法和属性操作这些返回数据。在实际应用中,一般不实例化HttpRepsonse类,而是通过Page、HttpContext等的Request属性获得其属性和方法,这与HttpRequest类相同。
语法定义:
HttpResponse类,其语法定义如下:
public sealed class HttpReponse
使用HttpResponse类的构造函数如下:
public HttpReponse(TextWriter writer)
参数writer表示输出内容的字符编辑器。
属性详解:
HttpResponse类包含很多非常重要的应用程序属性,如当前服务器的缓冲和缓冲的配置等。下面列出这些属性及其说明:
Buffer :是否缓冲输出,完成响应之后再发出
BufferOutput :是否缓冲输出,完成页面后再发送
Cache:网页的缓存策略
Charset :设置输出流的http字符集
ContentEncoding:流的内容编码格式
ContentType:控制流的HTTP MIME类型
Cookies :获取响应的Cookie集合
Expires :获取缓存过期的时间
方法详解:
HttpRepsonse类主要用来封装HTTP的响应信息,由于牵扯到缓冲的一些配置,所以在方法中添加了很多对缓存的处理。这在C#2.0中非常重要,因为缓存技术是提高Web性能的关键。下面对HttpResponse类中常用的方法及其说明:
典型应用:使用HttpResponse将网页内容导出到Word
利用HttpResponse的Write方法和BinaryWrite方法,使用HttpResponse可以轻松地实现网页的导出功能,包括导出到PDF、Word和Excel等。其中BinaryWrite方法一般导出的图像类型的文件,而Write方法主要用来导出普通字符串。本例的功能就是使用Write方法将文本框的内容导出到Word中,这种功能通常用在文本编辑器中。
Response.Clear(); //清空无关信息 Response.Buffer = true; //完成整个响应后再发送 Repsonse.Charset ="GB2312"; //设置输出流的字符集:中文 Response.AppendHeader("Content-Disposition","attachment;filename=Report.doc"); //追加头信息 Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");//设置输出流字符集 Response.ContentType = "application/ms-word"; //输出流的MIME类型 Response.Write(TextBox1.Text); Response.End(); //停止输出
应用程序状态:HttpApplicationState类
HttpApplicationState类管理所有会话共享的信息,即应用程序域级的信息,凡是访问次应用的会话都可以访问这些信息。可以说HttpApplicationState类是一个数据存储库,将信息存储在服务器的内存中。这就保证了数据的读取速度。HttpApplicationState类主要通过其内部对象“Application”来读取和保存数据,保存数据的类型为“Object”,在读取时必须进行正确的类型转换。
语法定义:
HttpApplicationState类,其语法定义如下:
public sealed class HttpApplicationState:NameObjectCollecionBase
"NameObjectCollectionBase"是应用程序状态的基类,表示键/值对的组合,所有值的类型都是Object。由于其继承接口ICollecion,所以可以通过索引方法访问这些集合数据。
HttpApplicationState类的使用通过其内部对象“Application”完成,示例如下:
Application["ApplicationName"] = "School";
属性详解:
由于HttpApplicationState存储的内容属于键/值对,所以其属性和大多数键/值对集合的成员相似,都具备Keys,Item和Count等属性。下面列出这些属性及其说明:
AllKeys :访问数据集合的所有键
Contents :获取数据集合的内容
Count : 获取数据集合中的数据总数
Item : 获取数据集合中某项
Keys : 获取键集合 方法详解:
既然需要在HttpApplicationState中存储数据,就必须具备添加、删除等数据的常用方法。
Add :添加数据到集合中
Clear : 清空集合中的数据
Get :通过索引获取集合中的数据
GetKey:通过键值获取数据
Lock :锁定集合,保持数据更新的同步
Remove :移除某变量
RemoveAll:移除所有的变量
RemoveAt :按索引移除集合中的某变量
Set :设置集合中某变量的值
UnLock :接触对集合的锁定
下面的代码演示如何使用HttpApplicationState类中的方法:
Application.Add("name","cgj"); //添加一对键值 Response.Write(Application.Get("name").ToString()); //返回键的值 Application.Add("age","12"); //再添加一对键值 Response.Write(Application.GetKey(0).ToString()); //返回第一个键的名称 Application.Lock(); //锁定应用程序状态,保持修改同步 Application.Set("name","chengj"); //修改键name的值 Application.UnLock(); //解锁 Application.RemoveAt(0); //移除第一个键值对
典型应用:用HttpApplicationState类保存数据库连接串
数据库连接串是一个应用程序级的变量。为了保证所有会话都可以访问,本例将其存放在HttpApplicationState类中。这并不是最好的解决方案,因为.NET支持字符串存放在配置文件中,达到全局调用的目的。
在应用程序开始的事件中“Application_Start”中,书写如下代码,主要用来添加连接字符串的键/值对:
if(Application["ConnString"]==null)
Application["connString"] ="Data sourse=SERVER;Initial Catalog=Mis;uid=sa;pwd=;";
在Default.aspx页的代码视图中,
If(Application["ConnString"]!=null)
Response.Write(Application["ConnString"].ToString());
企业级应用:
/// <summary>
/// 把对象放入到缓存中
/// </summary>
/// <typeparam name="T">WAFObject类型</typeparam>
/// <param name="t">WAFObject对象</param>
internal static void SetUserObject<T>(T t) where T : WAFObject
{
if (HttpContext.Current != null)
{
string guid = LoginUser.Guid;
if (HttpContext.Current.Application[guid] == null)
HttpContext.Current.Application.Add(guid, new SortedList<string, WAFObject>()); SortedList<string, WAFObject> list = HttpContext.Current.Application[guid] as SortedList<string, WAFObject>;
string key = typeof(T).FullName;
if (list.ContainsKey(key))
{
list[key] = t;
}
else
{
list.Add(key, t);
}
}
}
HttpCookie类
Cookie也用来保存数据,但只针对单一用户。其保存的也是键/值对的集合,与HttpApplicationState类最大的区别就是有效期。Application对象没有任何有效期,只有删除才算这个对象的过期,而Cookie在创建时,可以指定这对键/值的过期时间。Cookie一般用来保存登陆的用户名和密码,这样在下次登陆时,就不需要再次填写。这样提高了用户的工作效率,但存在一定的安全性问题。
语法定义
public sealed class HttpCookie
HttpCookie类的构造函数有两种:一种是不为键赋值,另一种是指定键/值对。函数代码分别如下:
public HttpCookie(string name)
public HttpCookie(string name,string value)
属性详解:
HttpCookie类包含访问内部键/值对的一些属性,如键的值、过期时间等。
Expires : Cookie的有效期
HasKes :判断Cookie是否具备子键
Item :按索引访问Cookie集合中的变量
Name:Cookie的名称
Path :与Cookie一同传输的虚拟路径
Secure :是否使用Http传输Cookie
Value : 指定Cookie的值
Values :Cookie的值集合
典型应用:用HttpCookie保存用户的登陆信息
HttpCookie的主要应用是保存当前登陆用户的一些常用信息,这些信息将保存在客户端的机器上。本例通过演示如何保存当前的登录名和密码。
Request.Cookies.Clear(); //清空所有Cookie HttpCookie myname = new HttpCookie("UserInfo"); //创建HttpCookie的实例 myname["name"] = TextBox1.Text; //保存变量 myname["pass"] = TextBox2.Text;/ myname.Expires = DateTime.Now.AddHours(1); //设置Cookie的过期时间 Repsonse.Cookies.Add(myname); //添加到web请求的Cookie集合中 注意:配置好HttpCookie后,需要将其添加到Web请求的Cookies集合中 在Page_Load事件中,获取保存的Cookie,代码如下 if(Request.Cookies["UserInfo"]!=null) { //获取用户名和密码 TextBox1.Text = Request.Cookies["UserInfo"]["name"].ToString(); TestBox2.Text = Request.Cookies["UserInfo"]["pass"].ToString(); }
URL的编码/解码:HttpUtility类
HttpUtility类主要提供对URL进行编码和解码的方法,这是出于对URL数据安全性的考虑,因为编码后的数据无法被轻易地识别,如果想读取URL的数据,必须再对其进行解码。这样也防止了Web客户端的脚本注入。HttpUtility类中全是编码和解码的方法,包括字符串的编码、字节数组的编码等。此类没有提供任何属性。
语法定义
HttpUtility类的语法定义如下:
public sealed class HttpUtility
“sealed”关键字表示此类是密封类,不能被继承。
通常调用HttpUtility类的对象并不是通过实例化类完成的,而是通过调用内部的“Sever”对象,使用其公开的方法和属性,但是Server并没有完全支持这些方法。
HttpUtility类的内部方法多是静态方法,这保证了无须实例化,就可以使用这些方法。如下所示:
HttpUtility.HtmlEncode(“This is test”);
方法详解
HttpUtiity类主要实现字符和URL等数据的编码和解码,具体的方法如下:
HtmlDecode:对字符串的解码
HtmlEncode:对字符串的编码
ParseQueryString :分解查询字符串
UrlDecode :对URL传输的字符串解码
UrlDecodeToBytes:对URL传输的数据解码成字节组
UrlEncode :对URL传输的字符串编码
UrlEncodeToBytes :对URL传输的数据编码成字节组
UrlEncodeUnicodeToBytes:将Unicode数据转换为字节数组
UrlPathEncode :对传输路径的编码
下面演示如何使用HttpUtlity类中的方法:
HttpUtiltiy.HtmlEncode("this is test");
HttpUtility.HtmlDecode("this");
HttpUtility.UrlEncode("the world");
HttpUtility.UrlDecode("the world");
HttpUtility.UrlEncodeUnicode("the world");
NameValueCollection myValue = HttpUtility.ParseQueryString("name=cgj&age=28");
典型应用:使用页面传递中文参数
在页面之间传递中文一直是比较麻烦的事情,主要原因有两个原因:一是安全性,二是经常会出现乱码。在使用Javascript时,可以通过函数“escape”解决这个问题。在C#中可以使用HttpUtility类轻松解决次问题,通常比较大得网站都采用这种模式。
实现页面之间的传递,Default.aspx页面:
string strurl ="Default2.aspx";
string name = HttpUtility.UrlEncode("刘千千");//编码
string type = HttpUtility.UrlEncode("计算机工程师");
Reponse.Redirect(strurl + "name=" +name+"&type=" +type); //导航
打开“Default2.aspx”页,在其“Page_Load”事件中书写获取传递参数的代码,如下所示:
Response.Write(Request.Query["name"]); //获取参数name
Response.write(Request.Query["type"]); //获取参数type
按F5运行程序,可以看到页面的URL已经不再显示值的内容了,而是显示一些杂乱的编码。这就保证了参数的安全性。
上传文件的管理:HttpPostedFile
HttpPostedFile类管理的是客户端上传的单个文件,而对所有文件的管理则交给了“HttpFileCollection”类,其实HttpPostedFile类就是HttpFileCollection类的个体。
通过HttpPostedFile类可以获取上传文件的一些属性,如大小、文件名等。还能利用此类提供的“SaveAs”方法保存文件。
语法定义:
HttpPostedFile类的语法定义如下:
public seald class HttpPostedFile
在实际的应用中,通常不需要通过new 来构造此类的实例,而是使用“FileUpload”控件的“PostedFile”属性获得。使用方法如下:
HttpPostedFile myfile = FileUpload1.PostedFile;
属性详解:
HttpPostedFile类的属性用来描述上传文件的一些基本信息。
ContentLength : 上传文件的长度
ContentType : 文件的MIME类型
FileName : 文件的路径名称
InputStream : 读取文件的Stream流
方法详解:
HtttPostedFile类主要用来获取上传文件的信息,目前只提供一个“SavaAs”方法,用来将上传的文件保存到服务器。
SaveAs的使用语法如下:
public void SaveAs(string filename)
参数“filename”表示目标路径和文件名。
下面的代码演示如何使用SaveAs方法:
myfile.SaveAs(@"c:\test.doc");
典型应用:根据上传文件的大小实现不同处理。
HttpPostedFile myfile = FileUpload1.PostedFile; //获取上传文件实例 //获取文件名 string filename = myfile.FileName.Substring(myfile.FileName.LastIndexOf(@"\")+1); if(myfile.ContentLength>1024000) //判断文件大小 ,大于1MB myfile.SaveAs(@"C:\BigFile\" + filename); //C盘下必须有文件夹“BigFile” else myfile.SaveAs(@"C:\SmallFile\" + filename); //C盘下必须有文件夹“SmallFile” Response.Write("保存成功");
应用程序的运行时服务:HttpRuntime
HttpRuntime类用来提供ASP.NET的运行时服务,主要针对的是当前运行的应用程序。通过此类提供的方法和属性,可以获得应用程序的一些基本信息。HttpRuntime类中最重要的是方法“ProcessRequest”,用来处理所有的Web后续操作。通过了解次方法,可以了解应用程序的运行过程。
封装HTTP请求的信息:HttpContext
HttpContext是Web应用中很重要要的一个类,之所以将其放在后面讲,是因为其属性是很多类的实例对象,“HttpResponse”、“HttpRequest”和"TraceContext"等。下面重点介绍HttpContext的属性,其封装了Http请求的所用信息。
HttpContext类管理着Http请求的所有属性,包括请求的输入流、输出流、当前请求的用户和缓存对象等。HttpContext类是web请求的上下文环境,每一次请求都伴随一个HttpContext对象,用来封装请求的相关信息。这些信息如果要分类,主要有响应类(Response)、请求类(Request)、会话类(Session)、缓存类(Cache)和跟踪类(Trace)等。当请求结束时,这个请求的HttpContext对象也就消失了。
语法定义
HttpContext类的语法定义如下:
public sealed class HttpContext:IServiceProvider
"sealed"关键字表示此类时封闭类,不能被继承。HttpContext类实现接口“IServiceProvider”,其用来检索服务对象。
在使用HttpContext类时,通常不需要初始化,对其属性和成员可以直接调用。HttpContext类的调用语法如下:
HttpRequest myreq = HttpContext.Current.Request;
属性详解
HttpContext类描述了当前请求中的所有属性,下面列出这些属性及其说明。
AllErrors : Http请求中发生的所有错误
Application:当前Http请求的Application对象
ApplicationInstance :为当前Http设置Application对象
Cache:当前http的Cache对象
Current:当前http的HttpContext对象
Error :当前请求的第一个错误
IsCustomErrorEnabled :是否启用自定义错误
IsDebuggingEnabled :是否处于调试模式
Items :Http请求的项集合
Profile :当前用户的配置文件
Request :当前请求的HttpRequest对象
Reponse:当前请求的HttpReponse对象
Server :用于处理请求的编码对象
Session:当前请求的Session对象
SkipAuthoriaztion:是否跳过授权检查
TimeStamp:当前请求的初始时间戳
Trace :当前响应的TraceContext对象
User :设置当前用户信息
方法详解
HttpContext类的方法主要获取一些配置信息,其中最重要的方法是“RewritePath” ,用来重定向URL。
下面对HttpContext类的常用的方法进行说明:
AddError :将错误信息添加到错误集合
ClearError :清空错误信息
GetAppConfig : 获取当前应用程序的配置信息。
GetConfig:获取当前请求的配置信息
GetGlobalResourseObject: 获取应用程序级资源。
GetLocalResourseObject :获取页面级资源。
GetSection :获取配置节信息
RewritePath :重写路径.
HTTP处理程序:IHttpHandler接口
IHttpHandler接口主要用来自定义HTTP处理程序。例如当用户访问某一页面时,程序员可以通过实现此接口的方法“ProcessRequest”,来重新处理是否让用户看到则一页。
自定义处理程序可以用符合CLS规范的任何语言编写。当编写完成自定义的处理程序后,用户的请求不再通过ASP.NET的页面来响应,而是通过IHttpHanlder接口实现的“ProcessRequest”方法来响应。
IHttpHandler的用途很广泛,例如比较流行的Blog注销技术和特殊扩展名的访问技术。这些技术都是通过实现IHttpHandler接口,来达到页面的处理功能。
语法定义:
IHttpHandler是一个接口,其定义如下
public interface IHttpHandler
接口一般用来封装一些固定的操作方法,但并不实现这些方法,所以继承此接口的类必须实现接口中定义的方法。IHttpHandler接口定义的内容如下,其中包括一个属性和一个方法。
#region IHttpHandler成员
bool IHttpHandler.IsReusable
{
get{ throw new Exception("The mothod or operation is not implemented."); }
}
void IHttpHandler.ProcessRequest(HttpContext context)
{
throw new Exception("the method or operation is not implemented");
}
#endregion
方法详解:
IHttpHnndler接口只有一个方法"ProcessRequest",主要用来处理Web请求。其语法定义如下:
void ProcessRequest(HttpContext context)
方法的参数"context"是当前HTTP请求的上下文,包括缓存、当前请求和响应等。
ProcessRequest方法是IHttpHandler接口的关键所在。在Web中常看到的Page类,就继承了IHttpHanlder接口,并实现了自己的ProcessRequest方法。通过了解此接口,也能更好地了解WebPage页面的运行原理。
典型应用:用IHttpHandler实现Blog的注销技术
所谓的Blog注销技术,其实就是当用户单击"注销"按钮时,页面URL显示的是注销界面,而实际上并没有这个注销页的存在,这就是利用IHttpHandler接口技术。
双击"注销"按钮,切换到其Click事件的代码视图,书写如下:
Response.Redirect("SigeOut.aspx"); 注意:网站中不存在"SigeOut.aspx"这个网页。
在网站的根目录下,添加一个类"SigeOutHandler",系统会询问是否将类保存在"App_Code"目录中,选择"是"。
设计“SigeOutHandler”类的代码如下,其中实现了接口“IHttpHandler”中的方法“ProcessRequest”。
using system; using System.Web; using System.Web.Security; public class SigeOutHandler : IHttpHandler { public SigeOutHandler(){} bool IHttpHandler.IsReusable//使用上下文缓存 { get{return true;} } void IHttpHandler.ProcessRequest(HttpContext context) { FormsAuthentication.SignOut(); //删除验证票据 HttpContext.Current.Response.Write("您已经成功注销"); //显示成功信息 } }
在Web.Config文件中的“system.web”节点下,添加用户自定义处理的配置,如下所示:
<httpHandler>
<add verb ="*" path ="SigeOut.aspx" type = "SigeOutHandler"/>
</httpHandler>
注意:本例中使用了登陆用户控件,需要在Web.Config中设置登陆模式为“Forms”。
注册一个用户登陆,然后单击“注销”按钮,此时网页显示的页面URL是“http://localhost/HttpHandleSample/SigeOut.aspx”,但实际上并不存在这个页面,所有的处理都是在“ProcessRequest”方法中实现的。
Http处理模块:IHttpModule接口
System.Web Namespce的更多相关文章
- 错误 1 类型“System.Web.Mvc.ModelClientValidationRule”同时存在于“c:\Progra
问题如图: 解决办法: step1: 首先关闭你应用程序方案,在你保存项目的文件夹下找到ProjectName.csproj ProjectName是你实际的应用程序名称. step2: 用文字编辑 ...
- 未能加载文件或程序集“System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。系统找不到指定的文件
ASP.NET 运行时错误:针对类型System.Web.Mvc.PreApplicationStartCode的应用程序邓启动初始化方法Start 引发了异常,显示下列错误消息: 未能加载文件或程序 ...
- Could not load type 'System.Web.Mvc.ViewPage<dynamic>' in asp.net mvc2 after publishing the website
在WebConfig里 找到 <pages></pages> <pages pageParserFilterType="System.Web.Mvc.ViewT ...
- System.Web.Http.Cors配置跨域访问的两种方式
System.Web.Http.Cors配置跨域访问的两种方式 使用System.Web.Http.Cors配置跨域访问,众多大神已经发布了很多文章,我就不在详细描述了,作为小白我只说一下自己的使用心 ...
- System.Web.HttpRequestValidationException: A potentially dangerous Request.F
ASP.NET .0验证请求 System.Web.HttpRequestValidationException: A potentially dangerous Request.F System.W ...
- MVC-命名空间“System.Web.Mvc”中不存在类型或命名空间名称“Html”(是否缺少程序集引用?)
如上截图,明明引用了“System.web.mvc”,可是还出这样的错误. 解决方法: 1.右键引用的“System.Web.Mvc” 2.<复制本地>一样选择<True> 3 ...
- 如何解决System.Web.HttpRequestValidationException的异常
在.net framework 4.0版本以下, 只需要在web.config中进行如下配置: <configuration> <system.web> & ...
- 未能加载文件或程序集“System.Web.DataVisualization...”
启动web项目发现未能加载文件或程序集“System.Web.DataVisualization...” 这是因为项目bin目录缺少“System.Web.DataVisualization.dll” ...
- Mvc 之System.Web.Optimization 压缩合并如何让*.min.js 脚本不再压缩
最近项目中用到了easy ui ,但是在配置BundleConfig 的时候出现了问题,easy ui的脚本jquery.easyui.min.js 压缩后出现各种脚本错误,总是莫名其妙的 i标量错误 ...
随机推荐
- 在wdcp环境下架设VSFTPD虚拟用户只上传功能服务器
检查系统是否已安装vsftp rpm -q vsftpd package vsftpd is not installed #说明系统没有安装vsftpd 如果生成虚拟用户数据文件的时候出现以下错误 u ...
- WebRTC学习笔记_Demo收集
1. WebRTC学习 1.1 WebRTC现状 本人最早接触WebRTC是在2011年底,那时Google已经在Android源代码中增加了webrtc源代码,放在/external/w ...
- Jquery简单动画的实现记录
<div style="background:#98bf21;height:100px;width:100px;"> //从元素当前所在位置,往下消失 $(docume ...
- HTML静态网页的格式与布局(position:(fixed、absolute、relative)、分层、float(left、right))
一.position:fixed 锁定位置(相对于浏览器的位置),例如有些网站的右下角的弹出窗口. 示例: 二.position:absolute 1.外层没有position:absolute(或r ...
- ##DAY4 事件的基本概念、触摸的基本概念、响应者链、手势
##DAY4 事件的基本概念.触摸的基本概念.响应者链.手势 #pragma mark ———————事件的基本概念 ——————————— 事件的基本概念: 1)事件是当用户的手指触击屏幕及在屏幕 ...
- JS中的内存泄漏
明天下午面试微店的前端开发职位,有点紧张~~ 刚刚正好看到js中的内存泄露,所以来整理一番. 给DOM对象添加的属性是对一个js对象的引用. var MyObject = {}; document.g ...
- codeforces 417D. Cunning Gena 状压dp
题目链接 D. Cunning Gena time limit per test 1 second memory limit per test 256 megabytes input standard ...
- python自学笔记(八)python语句
一.print语句 1.1 基本输出,自动分行 1.2 print的逗号,可以衔接前面的内容而不换行,在一行内 1.3 >>重定向,输出到文件 print >> 文件名,&qu ...
- ios 学习笔记(8) 控件 按钮(UIButton)的使用方法
在实际开发中,对于开发者来说,更多的还是使用“自定义”按钮.将“按钮”对象的类型设置成UIButtonTypeCustom.这样一来,按钮的所有元素都将由开发者来配置和自定义. 对于一个自定义按钮来说 ...
- 斯坦福 IOS讲义 课件总结 二
1,OC里面传参数个数不同,可以是两个完全不同的方法.如 - (void)addCard:(Card *)card atTop:(BOOL)atTop; - (void)addCard:(Card * ...