[Seasar-user:2930] S2Struts でActionクラスに定義されたsessionコンポーネントについて
Shigeru Matsumoto
matsumoto
2005年 11月 24日 (木) 23:38:58 JST
お世話になります。松本と申します。
S2Struts+S2DaoにてWebアプリを作っています。
Actionクラスやコンポーネントクラスのインスタンス管理について教えて下さい。
ActionクラスはSingleton(デフォルトのまま)で例えばユーザ毎(HttpSession毎)に
管理したいログインした際のログイン情報等のコンポーネントをinstance=sessionで
定義したとします(UserSessionとします)
<component name="UserSession" class="sample.UserSessionImpl" instance="session"/>
この時下記の様なActionを作ったとします。
public class LoginAction extends LookupDispatchAction {
private UserSession userSession;
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
userSession.setUser_uid(request.getParameter("userId"));
return mapping.findForward("success");
}
public UserSession getUserSession() {
return userSession;
}
public void setUserSession(UserSession userSession) {
this.userSession = userSession;
}
}
public class SampleAction extends LookupDispatchAction {
private UserSession userSession;
private Logic logic;
public SampleAction(Logic logic){
this.logic = logic;
}
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
log.debug("user_id = " + userSession.getUser_uid());
return mapping.findForward("success");
}
public UserSession getUserSession() {
return userSession;
}
public void setUserSession(UserSession userSession) {
this.userSession = userSession;
}
}
この時User1の人がログインしてuserSessionにIDをセットし
このアクションが呼ばれた際、最初の1回目はSampleActionのインスタンスが
作成されDIのsetUserSessionメソッドが呼ばれます。
次に別のUser2が同様の手順を行った場合
SampleActionのインスタンスは再利用されますがDIのメソッドは呼ばれないの
ですがuserSessionの値はこのUser2の値に変わっていました。
instance=sessionで管理されているUserSessionはいつどの段階で値がセット
されるのでしょうか?
解かりにくい説明ですいません。
よろしくお願い致します。
Seasar-user メーリングリストの案内