WebLogic的<session-param>配置元素实际上做了什么?

时间:2017-06-28 23:41:20

标签: tomcat weblogic sticky-session

我们正在将一些遗留应用程序从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}将Cookie保存在WebLogic下的“cookie”文件中,但不在Tomcat下。

所以我想知道

  1. 如果可能,如果可能在Tomcat中实现相同,无需编码 变化。
  2. 如果不可能,如何通过编码在Tomcat中实现相同 变化。换句话说,WebLogic正在做什么 使用此部署描述选项?
  3. 我已经尝试过对此进行研究,但没有找到有关该选项功能的任何信息,只提供了如何设置选项的信息,而没有关于您可能想要使用它的原因的信息。见WebLogic documentation

1 个答案:

答案 0 :(得分:0)

session-param帮助您自定义第一次调用

时应用程序服务器创建的会话对象

HttpSession session = request.getSession(true);

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

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

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

在weblogic集群中实现负载平衡
  1. IIS的Weblogic插件,APache
  2. 外部负载均衡器
  3. Weblogic HttpClusterServlet(软件负载均衡器)
  4. 全部解释here 解释了软件负载均衡器here