首页 > 解决方案 > GlassFish 正在为每个请求创建一个新的 JSESSIONID

问题描述

我有一个由命名 bean 支持的简单页面。该页面也使用primefaces,但我没有在该页面中做任何ajax。这些应用程序托管在 Glassfish 5.1 上。

@Named("cardsView")
@RequestScoped
public class CardsViewBean implements Serializable {
   ...
}

这是 xhtml 页面。如您所见,我将 bean 传递给主 xhtml,不确定这是最佳实践还是问题的根源。

<ui:composition template="/fragment/master.xhtml"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:p="http://primefaces.org/ui"
    xmlns:c="http://java.sun.com/jsp/jstl/core"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
    xmlns:ipc="http://java.sun.com/jsf/composite/component">

    <ui:param name="bean" value="${cardView}" />

    <ui:define name="content">
    .....
    </ui:define>

</ui:composition>

据我了解,请求范围的 bean 只为请求而存在。

但是,当我查看浏览器检查器时,我可以看到每次点击页面时都会创建一个新的 JSESSIONID。所以我认为显然有一些东西我配置错误,但我不知道在哪里看。

标签: jsfglassfishjsessionid

解决方案


实际上,每页有 2 个请求。初始请求和回发请求。首先,客户端发出获取页面的请求。它本身就是完整的请求。请求:http ://example.com/index 响应:html 页面。用户点击提交按钮或另一个按钮或链接后,浏览器再次请求另一个页面。请求:http ://example.com/login 响应:另一个页面。换句话说,Jsf 或任何 Ui 框架通过各种技术和方法为我们保存 2 个请求之间的信息,请参阅这个关于 Initial request and postback request 和Jsf生命周期primeFaces lifeCycle 展示案例的问题
最后一点:会话在 jservlet 中超时,您可以使用 web.xml 对其进行配置,如果此时间过去,您的会话将过期并为您提供另一个会话快乐编码!


推荐阅读