私はWinXP、Eclipse Indigo、およびGoogle WebプラグインでWebアプリケーションを作成しています。サーブレットのsendRedirect()がセッション属性を無効にします
私はユーザーからの価値(電子メールなど)を受け取り、それを処理するサーブレットSignIn.java
に渡し、電子メール値をセッションに保存します。 SignIn
コードはここで、非常に簡単ですそのdoGet
はほとんど何をするかです:
String email = req.getParameter("email"); //getting the parameter from html form
...
...
HttpSession session = req.getSession(); //create a new session
session.setAttribute("email", email);
これまでのところは良い、私は値がこの時点でnull
ていないことを確認しました。問題が発生したので、もう少し処理する必要のある別のサーブレット(ShowOnline.java
)にリダイレクトします。私は
resp.sendRedirect(resp.encodeRedirectURL("/ShowOnlineServlet"));
ShowOnline
null
セッション値を取得書くとき、私は
getServletConfig().getServletContext().getRequestDispatcher("/ShowOnlineServlet");
すべてがOKで書くとき
(同じメールが、私は第二の前に、今null
で保存された属性)、電子メール属性前からはnull
!
何が起こっていますか? sendRedirect()
はブラウザに新しい要求を送信するだけで、セッションスコープには影響しません。私はクッキーをチェックしていて、それはうまくいきます(私のwebappが最初に作成した唯一のセッションなので、前回と同じセッションです。さらにセジゾンIDも気にしてチェックしました。 。
なぜsendRedirect()
とforward()
の間に違いがありますか?簡単な解決策は、forward()
を使用することですが、私はちょうど手放す前に、これの一番下に行きたいと思います。何が起こったのかを理解することが重要です。私はこのような基本コンセプトで何が起こっているのか分からないという考えが好きではないかと私は確信していません(私の初心者なので私のwebapp全体は非常にシンプルで基本的です)。
意見やアイデアは大歓迎です!
私はそれが前方の代わりのsendRedirectを使用して、現時点では可能かもしれないと思いますが、私は私のセッション属性が明らかな理由もなくヌル行くだろう恐れなしのsendRedirectを使用したいと思い、後に考えます。 –
@home:OPはセッションIDが前後で同じであることを確認しました。 – BalusC
リダイレクトを送信せず、ブラウザから/ ShowOnlineServletに手動で移動するとどうなりますか? –