2

同じ質問に戻ってきましたが、今回はより文書化されています。多くのサーブレットと JSP を含む Web アプリケーションがあります。アプリケーションにはログイン オプションがあります。LogIn サーブレットで新しいセッションを開始し、セッションにいくつかの情報を配置した後、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"));
}

この後、サーブレット Adaugare.java に誘導するフォームができました。ここで私は同じことをします:

Adaugare.java コード:

HttpSession sess = request.getSession(false);

ここで問題が発生します。その後の編集: セッションが存在しないため、これは null を返します。次に、同じ Insert.jsp ファイルに転送すると、HttpSession sess = request.getSession(false); があっても、最初のセッションとは異なる新しいセッション ID を持つ新しいセッションが作成されます。したがって、明らかに out.println(sess.getAttribute("GLN")); null を返します。

これは長い話です。短いバージョン:

サーブレットから JSP に移動すると、セッションは問題ありませんが、JSP からサーブレットに移動すると、セッションがどこにも見つかりません。次に、JSP に転送すると、新しいセッションが作成されます。実際には、新しい Cookie を作成します。JSP と serlet から contextPath を出力すると、同じです。

しかし、ここで奇妙なことがあります。これは、mod_jk を使用して Apache でアプリケーションを実行したときに発生します。Tomcat からアプリを実行すると、正常に動作します.......

助けてください、私はこの問題で2週間立ち往生しています。

dan への回答: (コメントを待ちたいテキストで、自分の質問に返信するには 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 に答える