即使在将@WebListener注释添加到我的侦听器类之后,是否有必要在web.xml中创建<listener-class>标记条目?

时间:2015-09-16 05:36:30

标签: java servlets listener httpsession

即使将@WebListener注释添加到我的侦听器类,是否有必要在web.xml中创建侦听器类标记?

因为当我只使用@WebListener注释而不在web.xml中创建listener-class标记条目时,我的监听器类不会被执行。

当我同时使用web.xml中的listener-class标记条目和@WebListener作为我的监听器类时,只有我的监听器类被执行。

其他信息:java版本&#34; 1.7.0_79&#34;,Java(TM)SE运行时环境(版本1.7.0_79-b15

以下是web.xml中的listener-class标记条目:

&#13;
&#13;
<listener>
        <listener-class>  org.shan.jspservlets.CountUserListener </listener-class>
</listener>
&#13;
&#13;
&#13;

以下是我的听众课程:

&#13;
&#13;
package org.shan.jspservlets;

import javax.servlet.ServletContext;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

@WebListener
public class CountUserListener implements HttpSessionListener {
	ServletContext ctx = null;
	static int total = 0, current = 0;

	public void sessionCreated(HttpSessionEvent e) {
		total++;
		current++;

		ctx = e.getSession().getServletContext();
		ctx.setAttribute("totalusers", total);
		ctx.setAttribute("currentusers", current);

	}

	public void sessionDestroyed(HttpSessionEvent e) {
		current--;
		ctx.setAttribute("currentusers", current);
	}

}
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

在Servlet 3.0中引入了诸如@WebServlet@WebListener之类的注释,因此如果您使用的是具有servlet版本的servlet容器&lt; 3.0不会处理注释。

如果web-app元素告诉容器忽略它们,也不会处理注释:

<web-app metadata-complete="true" ...>

然后您的带注释的类必须位于WEB-INF/classesWEB-INF/lib中的jar中,否则注释也会被忽略。