2012-01-16 17 views
-1

私は2つのサーブレットを持っています。最初のサーブレットでは、私は、データベースからのuserIdを取得していますし、このセッション変数に格納します。2つのサーブレット間のセッション変数へのアクセス

String uId = function.getLogin(username, password); //method getting the id 

HttpSession session = request.getSession(); 
session.setAttribute("userId", uId); // here I'm setting the session variable with the id 

今私は、セッション変数からそのユーザーIDを取得する2番目のサーブレットが、java.langでの。 NullPointerExceptionがスローされています。

HttpSession session = request.getSession(true); 
String uId = session.getAttribute("userId").toString(); 
int userId = Integer.parseInt(uId); //this is the code that I'm using in the second servlet, and throwing the NullPointerException 

私は何か間違っていますか?あなたの助けをありがとう

+0

キャストの前に 'uId'の値を確認/印刷できますか? – Viruzzo

+0

サーブレットは同じwebappにありますか? 2つのサーブレットを呼び出すために同じブラウザを使用していますか? 2回の通話の間にどれくらい時間がかかりますか?なぜそれは整数のように見えるので、あなたはどこでもIntegerをuserIdに使用しないのですか? –

+0

このクライアント用にまだ新しいセッションがない場合にのみ、新しいセッションが作成されます。 –

答えて

0

属性を設定する際には、応答が書き込まれていないことを確認する必要があります。さらにそれ以降、レスポンスが書き込まれます(例外はありません)。

2

NPEの回線番号を示す例外をチェックする必要があります。あなたのコードに関して:

HttpSession session = request.getSession(true); 

リクエストはnullでもかまいません。これは非常にありそうもありません。

String uId = session.getAttribute("userId").toString(); 

セッションはnullでもかまいません。これは、クライアントがセッションクッキーを返送していないか、複数のフロントエンドがあり、セッションを記録した別のフロントエンドがある可能性があることを意味します。問題の内容を把握するためには、より多くの情報が必要になります。

session.getAttribute("userId")がnullを返すこともあります。私はこれが最も可能性が高いと言いたい。多分、それはsession.setAttribute("userId", uId);が呼ばれた別のセッションです。またはfunction.getLogin(username, password);への最初の呼び出しでnullが返されたので、セッションでnullを設定しましたか?

// this is the code that [... is] throwing the NullPointerException 
int userId = Integer.parseInt(uId); 

間違っています。 Java 1.6のコードを読むと、parseIntは決してNPEを投げません。その方法の最初の行は次のとおりです。

if (s == null) { 
    throw new NumberFormatException("null"); 
} 

私はあなたのセッションに何か問題があると思います。デバッガを使用して、何が正しく設定されていないか把握することをお勧めします。 Printfデバッグも役に立ちます。

関連する問題