http://www.cnblogs.com/rush/archive/2011/12/31/2309203.html http://www.cnblogs.com/eng308/archive/2010/02/03/1662908.html