我有一个非常简单的Servlet和一个非常简单的HttpSessionListener:
@WebServlet("/HelloWorld") public class HelloWorld extends HttpServlet { private static final long serialVersionUID = 1L; @Override public void init(ServletConfig config) throws ServletException { super.init(config); getServletContext().setAttribute("applicationHits", new AtomicInteger(0)); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("get"); ((AtomicInteger) request.getServletContext().getAttribute("applicationHits")).incrementAndGet(); ((AtomicInteger) request.getSession(true).getAttribute("sessionHits")).incrementAndGet(); request.setAttribute("requestHits", 0); getServletContext().getRequestDispatcher("/view/HelloWorld.jsp").forward(request, response); } } @WebListener public class SessionListener implements HttpSessionListener { public SessionListener() { } public void sessionCreated(HttpSessionEvent arg0) { System.out.println("session listener"); arg0.getSession().setAttribute("sessionHits", new AtomicInteger(0)); } public void sessionDestroyed(HttpSessionEvent arg0) { } }
我的HttpSessionListener.sessionCreated()方法从未被调用(没有日志输出),最终NullPointerException我在调用getSession()的那一行上得到一个
HttpSessionListener.sessionCreated()
NullPointerException
((AtomicInteger) request.getSession(true).getAttribute("sessionHits")).incrementAndGet(); request.setAttribute("requestHits", 0);
我尝试拨打电话时也getSession()没有true问题,但存在相同的问题。
getSession()
true
我不明白- @WebListener注释不足以调用我的侦听器吗?Eclipse甚至在下方将其显示为侦听器Deployment Descriptor/Listeners。
@WebListener
Deployment Descriptor/Listeners
原来这是愚蠢的Eclipse问题之一…
Project-> Clean …,然后重新启动Tomcat。