http://www.cnblogs.com/allin/archive/2010/05/11/1732200.htmlhttp://www.blogjava.net/zhangchao/archive/2009/04/15/265644.html