javax.faces.application.ViewExpiredException:在负载测试期间

javax.faces.application.ViewExpiredException:在负载测试期间,java,jsf,jsf-1.2,viewexpiredexception,Java,Jsf,Jsf 1.2,Viewexpiredexception,我们正在为我们的应用程序使用SUN JSF 1.2、WebSphere 7.0,我们仅在负载测试期间获得ViewExpiredException 我已经浏览了下面的链接 已经跟踪了大部分内容 设置上下文参数 com.sun.faces.enableRestoreView11兼容性 真的 通过在所有JSP页面顶部添加以下代码,指示浏览器不缓存动态JSF页面 res.setHeader("Cache-Control", "no-cache, no-store, must-revalid

我们正在为我们的应用程序使用SUN JSF 1.2、WebSphere 7.0,我们仅在负载测试期间获得ViewExpiredException

我已经浏览了下面的链接

已经跟踪了大部分内容

  • 设置上下文参数

    com.sun.faces.enableRestoreView11兼容性 真的

  • 通过在所有JSP页面顶部添加以下代码,指示浏览器不缓存动态JSF页面

        res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); 
        res.setHeader("Pragma", "no-cache");
        res.setDateHeader("Expires", -1); 
    
  • 当我们手动浏览应用程序时,不会出现异常。我想不出这个问题


    敬请告知。

    视图存储在会话中。会话中存储的默认最大视图量为15,可由
    com.sun.faces.numberOfViewsInSession
    上下文参数配置

    设想这样一种情况:终端用户在同一会话中打开一个随机的JSF页面,其中至少有16个不同的浏览器选项卡/窗口中有一个表单(实际上是一个视图)。在第一个打开的选项卡/窗口中提交表单将抛出
    viewexpiredeexception
    。也许在负载测试期间也会发生同样的情况。负载测试最好创建不同的会话


    正如您自己找到的答案中所述,唯一的解决方法是将JSF状态保存方法设置为
    client
    ,而不是
    server
    。禁用浏览器缓存只会防止在最终用户从浏览器缓存获得的页面上发生
    ViewExpiredException
    (例如,通过按back按钮等)。

    但是,作为一种性能调整,与客户端保存相比,它提到的大多数链接的服务器端保存是好的。所以我也不得不考虑。我没有说客户端保存状态比服务器端状态保存快。我只说过,对特定的
    ViewExpiredException
    的唯一修复方法是使用客户端状态保存。是否使用它取决于你。对不起!出于混淆,我不想说您告诉过客户端状态保存比服务器端状态保存快。我只是想提个建议。谢谢