http://blog.csdn.net/hb308102796/article/details/6445227 http://www.cnblogs.com/martin1009/archive/2012/05/30/2526401.html