我带着同样的问题回来了,但这次有更多的记录。我有一个包含许多 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