Java 未调用HttpSessionListener.sessionCreated()
我有一个非常简单的Servlet和一个非常简单的HttpSessionListener:Java 未调用HttpSessionListener.sessionCreated(),java,servlets,httpsession,Java,Servlets,Httpsession,我有一个非常简单的Servlet和一个非常简单的HttpSessionListener: @WebServlet("/HelloWorld") public class HelloWorld extends HttpServlet { private static final long serialVersionUID = 1L; @Override public void init(ServletConfig config) throws ServletExcept
@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);
}
}
我的HttpSessionListener.sessionCreated()
方法从未被调用(没有日志输出),我最终在调用getSession()的行上得到一个NullPointerException
我尝试调用getSession()
,但也没有true
,但问题相同
我不明白-难道
@WebListener
注释不足以调用我的侦听器吗?Eclipse甚至将其显示为部署描述符/侦听器下的侦听器,结果发现这是Eclipse的愚蠢问题之一
项目->清洁。。。重新启动Tomcat就成功了。原来这是一个愚蠢的Eclipse问题
项目->清洁。。。重新启动Tomcat就成功了。如果您没有使用@WebListener,请确保您的侦听器在web.xml中被引用
<web-app>...
<listener>
<listener-class>com.yoursite.YourSessionListener</listener-class>
</listener>
。。。
com.yoursite.YourSessionListener
如果您没有使用@WebListener,请确保您的侦听器在web.xml中被引用
<web-app>...
<listener>
<listener-class>com.yoursite.YourSessionListener</listener-class>
</listener>
。。。
com.yoursite.YourSessionListener
好吧,我在这里试着深入一点。这个问题(
sessionCreated(..)
未被调用)即使与[any]IDE没有任何关联也可能发生。老实说,我认为,清理项目(以及类似项目)与解决问题(即cookies)是一致的,它与清理项目本身无关
我遇到了同样的问题,并解决了大约一个小时左右
这里的重要线索和实际问题是,您的浏览器可能存储了在同一应用程序的上一次运行时从服务器接收到的Cookies
,并且这些Cookies不会超时、终止或销毁,因此,不会使用.getSession(true)创建会话
因为每次发出请求时,都会发送cookie
如果在应用程序运行期间,您将打开开发工具(或除Chrome以外的浏览器中的相应实用程序)并清除Cookie,然后重新尝试访问创建会话的URL servlet,您将看到容器将在创建新会话时调用sessionCreated方法。,我会试着深入一点。这个问题(
sessionCreated(..)
未被调用)即使与[any]IDE没有任何关联也可能发生。老实说,我认为,清理项目(以及类似项目)与解决问题(即cookies)是一致的,它与清理项目本身无关
我遇到了同样的问题,并解决了大约一个小时左右
这里的重要线索和实际问题是,您的浏览器可能存储了在同一应用程序的上一次运行时从服务器接收到的Cookies
,并且这些Cookies不会超时、终止或销毁,因此,不会使用.getSession(true)创建会话
因为每次发出请求时,都会发送cookie
如果在应用程序运行期间,您将打开开发工具(或除Chrome之外的其他浏览器中的相应实用程序)并清除cookie,然后重新尝试访问创建会话的URL servlet,您将看到容器将调用
sessionCreated
方法,将创建新会话。我已经测试了您的解决方案,您是对的。当我试图从匿名模式打开时,调用了sessioncreated方法。谢谢。我已经测试了你的解决方案,你是对的。当我试图从匿名模式打开时,调用了sessioncreated方法。谢谢
<web-app>...
<listener>
<listener-class>com.yoursite.YourSessionListener</listener-class>
</listener>