jsf - Tomcat 8 在启动时创建一个新 session

标签 jsf tomcat tomcat8 httpsession

我今天才注意到,每次 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>

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

最佳答案

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

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

关于jsf - Tomcat 8 在启动时创建一个新 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35517831/

相关文章:

java - 通过 tomcat 部署 Drools 失败

jsf - 无法获取 com.sun.faces.flow.FlowDiscoveryCDIExtension。使用 javax.faces.flow.builder.FlowDefinition 描述的流不可用

ajax - Primefaces Ajax 调用 Javascript

java - 如何在tomcat上配置安全假端口?

tomcat - 如何找到tomcat网络应用程序的网址?

java - 为什么Tomcat内存没有增加

jsf - JSF 的 MyFaces 与 Sun 引用实现

JSF:为什么在请求范围内的 POST REDIRECT GET 下提交表单期间,在应用请求值阶段调用渲染中的空测试

jsp lang参数在struts 1.1中自动存入cookie

tomcat - Liferay session 扩展 (/c/portal/extend_session) - HTTP 403 禁止访问