2

我带着同样的问题回来了,但这次有更多的记录。我有一个包含许多 servlet 和 JSP 的 Web 应用程序。该应用程序有一个登录选项。在 LogIn servlet 中,我开始一个新会话,在会话中放置一些信息后,我转到一个 JSP。

LogIn.java 相关代码:

HttpSession sess = request.getSession(true);
sess.setAttribute("GLN", user);
rd.forward(request, response);

转发后,我得到一个名为 Insert.jsp 的 Jsp 页面,我在其中获取会话属性。

Insert.jsp相关代码:

HttpSession sess = request.getSession(false);
if (sess != null){
out.println(sess.getAttribute("GLN"));
}

在此之后,我有一个将我引导到 servlet Adaugare.java 的表单。在这里我做同样的事情:

Adaugare.java 代码:

HttpSession sess = request.getSession(false);

问题来了。稍后编辑:这将返回 null,因为不存在会话。然后我转发到同一个 Insert.jsp 文件,即使我有 HttpSession sess = request.getSession(false);,也会创建一个与第一个不同的具有新会话 ID 的新会话。所以很明显 out.println(sess.getAttribute("GLN")); 返回空值。

这是一个很长的故事。简短版本:

当我从 servlet 转到 jsp 时,会话正常,当我从 jsp 转到 servlet 时,会话无处可寻。然后当我转发到 JSP 时会创建一个新会话。实际上,它会创建一个新的 cookie。如果我从 JSP 和 serlet 打印 contextPath,它是一样的。

但这是奇怪的事情。当我使用 mod_jk 在 apache 上运行应用程序时会发生这种情况。当我从 tomcat 运行应用程序时,它工作正常......

请帮忙,我在这个问题上被困了 2 周。

对丹的回答:(文本需要评论,需要等待 7 小时才能回复我自己的问题)我删除了所有评论的行。希望没关系。我不是负责服务器的人,但有人告诉我这不是多个工人。

worker.list=jk-status
worker.jk-status.type=status
worker.jk-status.read_only=true

worker.list=jk-manager
worker.jk-manager.type=status

worker.list=balancer
worker.balancer.type=lb

worker.balancer.error_escalation_time=0

worker.balancer.max_reply_timeouts=10

worker.balancer.balance_workers=node1
worker.node1.reference=worker.template
worker.node1.host=localhost
worker.node1.port=8109

worker.node1.activation=A

worker.balancer.balance_workers=node2
worker.node2.reference=worker.template
worker.node2.host=localhost
worker.node2.port=8209

worker.node2.activation=A

worker.template.type=ajp13

worker.template.socket_connect_timeout=5000

worker.template.socket_keepalive=true

worker.template.ping_mode=A

worker.template.ping_timeout=10000

worker.template.connection_pool_minsize=0

worker.template.connection_pool_timeout=600

worker.template.reply_timeout=300000

worker.template.recovery_options=3
4

1 回答 1

1

如果请求在多个工作人员之间平衡,则应将会话粘性标志设置为 true。有关详细信息,请参阅:http: //tomcat.apache.org/connectors-doc/reference/workers.html 。你应该试试:

worker.balancer.sticky_session=True
于 2012-10-08T11:31:13.133 回答