使用WTP中的run on server来调试web程序时,按照默认的配置,会把该程序放在根目录,即context为"/",启动的时候会加载两次,如果有ServletContextListener的话,里面的东西就会运行两次;如果修改配置,通过Project->Property->Web Project Settings,把Context Root改为web project名的话,运行的时候就不会把ServletContextListener加载两次,不过除了正常加载指定的web程序外,还会试图加载一个不存在的context,导致抛出ClassNotFoundException异常,不过不影响使用,后来发现这是WTP的bug,不过描述的好像跟我遇到的情形不太一样。
http://dev.eclipse.org/newslists/news.eclipse.webtools/msg09647.html
https://bugs.eclipse.org/bugs/show_bug.cgi?id=125364