【问题标题】:Tomcat 8 creates a new session on startupTomcat 8 在启动时创建一个新会话
【发布时间】:2016-06-01 18:22:26
【问题描述】:

我今天刚刚注意到,每次 Tomcat(8) 启动时,它都会创建一个新的HttpSession(没有任何HttpServletRequest)。

我刚刚添加了一个像这样的 SessionListener:

public class SessionListener implements HttpSessionListener {
    public SessionListener() {}

    public void sessionCreated(HttpSessionEvent sessionEvent) {
        HttpSession session = sessionEvent.getSession();
        ServletContext context = session.getServletContext();

        try {
            if(session.isNew()){
                System.out.println("a new Session is created");
            }
        } catch (Exception e) {}
    }

    public void sessionDestroyed(HttpSessionEvent sessionEvent) {}
}

我今天唯一改变的是context.xml中的这个:

<Context>
    <Resource name="jdbc/test"
              auth="Container"
              type="javax.sql.DataSource"
              factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"           
              maxActive="-1"
              minIdle="-1"
              maxWait="10000"
              initialSize="10"
              username="XYZ" 
              password="XYZ" 
              driverClassName="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/test"/>
</Context>

但最后一个不可能是在容器启动时创建会话的原因,对吧?

【问题讨论】:

  • 因此您是从 Eclipse 之类的 IDE 内部启动 Tomcat?
  • 除了实际问题:maxWaitmaxActive 在 Tomcat 8 中一直是 deprecated。它们分别是 maxWaitMillismaxTotal。服务器应记录有关这些已弃用功能的警告。
  • @BalusC,是的,我从 Eclipse 内部盯着它。我的意思是启动 TOMCAT 不运行项目。
  • @Tiny,感谢您的提示。

标签: jsf tomcat tomcat8 httpsession


【解决方案1】:

当您从 Eclipse 等 IDE 中运行服务器时,就会发生这种情况。 IDE 的服务器插件(例如 Eclipse Tomcat 插件)可能会在启动过程后通过向/ 发送 GET 请求来执行自检(因此 IDE 服务器插件可以将服务器标记为“已启动”)。显然,您在 / 上(隐式)创建了一个新会话。

忽略它。这不会在生产过程中发生。

【讨论】:

  • 天啊,你怎么知道的?你是个很棒的人。谢谢,是的,我有 / 作为我的项目的路径,我现在更改它以进行测试,并且没有创建新会话。谢谢你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-25
  • 1970-01-01
相关资源
最近更新 更多