- - PR -
JSP、サーブレットのセッションについて(Struts使用)
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-01-12 21:24
はじめまして。
Javaを始めて1ヶ月弱のたまこと申します。 現在、WEBで人事情報を管理する簡単なプログラムを作っています。 ログイン画面でユーザIDとPasswordを入力すると、フレームを使った画面に遷移します。 Strutsを使用していますので、アクションクラスでセッションの設定(ユーザID)をし、 次の画面のアクションクラスでセッション情報(ユーザID)の取得をするように作成しています。 しかし、デバッグをしてみると、次の画面のアクションクラスでユーザIDが取得できません。 なぜ取得できないか、全く見当がつきません・・・。 処理の流れは以下のような感じです。 ------------------------------------------------------------------- Login.jsp(ログイン画面) ↓ PostDataForm(ActionFormBean set、get、Validateチェックなど) ↓ PostDataAction(ActionClass セッションの確保) ↓success main.jsp(次画面のframeset frame分割だけしてます。 2つのframeの一方が、LoginDataForm.doに遷移するよう設定してます。) ↓ LoginDataForm(ActionFormBean 特に何もしてません) ↓ LoginDataAction(ActionClass セッション情報を取得) ↓ logind.jsp(セッション情報で取得したユーザIDを表示) --------------------------------------------------------------- PostDataActionのソース(一部省略)です。 public final class PostDataAction extends Action { public ActionForward execute (ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res){ ServletContext context = getServlet().getServletContext(); PostDataForm postDataForm = (PostDataForm)form; //ユーザ情報の保持 UserData currentUser = UserDataFactory.getInstance(req); if (!currentUser.isAuthenticated()) { currentUser.setUserId(postDataForm.getUserID()); try { UserAuthenticator.checkLogin(currentUser, postDataForm.getUserPass()); } catch (AuthenticationException ae) { // 失敗した場合 } if (!currentUser.isAuthenticated()) { // ログイン失敗 } // 以降、成功した場合の処理 } //session確保 HttpSession session = req.getSession(true); req.setAttribute("userData", currentUser); List messages = (List)context.getAttribute("PKG.messages"); if (messages == null) { messages = new LinkedList(); context.setAttribute("PKG.messages",messages); session.setAttribute("user",messages); } messages.add(0, form); List unmodifiable = Collections.unmodifiableList(messages); return (mapping.findForward("success")); } } --------------------------------------------------------------------- LoginDataActionのソース(一部省略)です。 public final class LoginDataAction extends Action { public ActionForward execute (ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res){ HttpSession ses = req.getSession(false); String userData = (String)ses.getAttribute("userData"); ↑↑↑userDataがnullになってしまう↑↑↑ ses.setAttribute("userData", userData); //ユーザ情報の保持 UserData currentUser = UserDataFactory.getInstance(req); req.setAttribute("userData", currentUser); return (mapping.findForward("success")); } } ---------------------------------------------------------------------- 環境は以下の通りです。 サーバ環境:SuseLinux、j2sdk-1.4.2_05、Tomcat5.0、struts1.2.4 開発環境:WindowsXP、eclipse 以上、些細なことでも構いませんので、お知恵をお貸しください。 よろしくお願いします。 | ||||||||
|
投稿日時: 2005-01-12 21:37
永井です。
落ち着きましょう。setしている箇所は
となっています。 requestにセットしたキーでsessionから取り出そうとしても何も出てきません。 #あと、本当に受け渡ししたいのはUserDataオブジェクトなのかStringオブジェクトなのかも落ち着いて考えましょう [ メッセージ編集済み 編集者: 永井和彦 編集日時 2005-01-12 21:40 ] | ||||||||
|
投稿日時: 2005-01-14 01:45
>永井様
お返事をくださり、どうもありがとうございました。 お陰様で解決するに至りました。 お恥ずかしながら、ソースの30%が本のコピー、 60%が先輩のソースのコピーで、 何も理解せずに上辺だけを見ていた結果のミスでした。 その後、ソースへコメントを付加しつつ、処理の流れを追ってみると、 段々と何をしているのかが見えてきました。 やはり一字一句追って理解していかないとダメですね。。 本当に助かりました。どうもありがとうございました。 今後またお世話になることがあると思いますが、 どうぞよろしくお願いします。 |
1