1

我们正在将一些遗留应用程序从 WebLogic 移植到 Tomcat。在 Web Logic 中,这些应用程序的 weblogic.xml 部署描述符中有以下内容:

<!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 6.0//EN" "http://www.bea.com/servers/wls600/dtd/weblogic-web-jar.dtd"> 
<weblogic-web-app> 
  <session-descriptor> 
...
        <session-param> 
                <param-name> 
                        CookieName 
                </param-name> 
                <param-value> 
                        jsessionid 
                </param-value> 
        </session-param> 
...
   </session-descriptor> 
</weblogic-web-app>

不知何故,包含此元素允许应用程序通过响应将 cookie 发送回浏览器,从而启用粘性会话,这正是我们试图实现的。应用程序 servlet 中没有任何代码可以对 cookie 进行任何操作来实现这一点。我应该提一下,我们使用传统的外部负载平衡器来进行平衡,而不是任何容器选项。

现在我们转移到 Tomcat,我们希望保持相同的功能,希望通过类似的声明方式,而不需要更改代码。但是,似乎没有类似的描述符可以在 Tomcat 中执行此操作。

当我们在两种环境中测试应用程序时,我们发现

curl -c cookie {url}在 WebLogic 下的文件“cookie”中保存一个 cookie,但不在 Tomcat 下。

所以我想知道

  1. 如果可能的话,如何在不更改编码的情况下在 Tomcat 中实现相同的目标。
  2. 如果不可能,如何通过代码更改在 Tomcat 中实现相同的功能。换句话说,WebLogic 在这个部署描述选项的幕后做了什么?

我已经尝试对此进行研究,但没有找到任何关于该选项的作用的信息,只有关于如何设置该选项的信息,没有关于您可能想要使用它的原因的信息。请参阅WebLogic 文档

4

1 回答 1

0

session-param 帮助您自定义应用程序服务器在第一次调用时创建的会话对象

HttpSession session = request.getSession(true);

HttpSessions 位于内存中(主要是)缓存对象,由应用程序服务器通过唯一 id 标识。id 在所谓的会话 cookie 中的请求之间来回传输。对 request.getSession() 的后续请求将尝试从请求中检索 cookie、读取 id 并检索相应的 Session 对象。

在此背景下,Weblogic 允许您通过 weblogic.xml 中的 session-param 标记参数化 Session 和 Session cookie 的几个参数。示例是 cookie-name、cookie-domain、cookiemaxage 等,所有这些都记录在您问题中提供的资源中。

粘性会话和负载平衡与会话描述符中的 cookie 配置无关。您可以使用在 weblogic 集群中实现负载平衡

  1. 用于 IIS、APache 的 Weblogic 插件
  2. 外部负载均衡器
  3. Weblogic HttpClusterServlet(软件负载均衡器)

一切都在这里解释 软件负载均衡器在这里解释

于 2017-06-29T07:09:52.520 回答