4.7 Accessing data through the ActionContext

4.7.1 CaveatEmptor: accessing the session

① ActionContext을 이용하여 session정보에 access (권장하지 않음)


public class Login extends ActionSupport implements UserDAOAware {

    User user;
    UserDAO userDAO;
    
    public String execute() throws Exception {
        user = userDAO.findByCredentials(user.getUsername(),
        user.getPassword());
        if (user == null) {
            return INPUT;
        } else {
            Map session = ActionContext.getContext().getSession();
            session.put("user", user);
            return SUCCESS;
        }
    }
    
    public String doDefault() throws Exception {
        return INPUT;
    }
    
    public User getUser() {
        return user;
    }
    
    public void setUserDAO(UserDAO dao) {
        this.userDAO = dao;
    }
}

② SessionAware 인터페이스 이용하여 session정보에 access (이 방법을 권장)


public class Login extends ActionSupport implements com.opensymphony.webwork.interceptor.SessionAware, UserDAOAware {
    Map session;
    User user;
    UserDAO userDAO;
    
    public void setSession(Map session) {
        this.session = session;
    }
    
    public String execute() throws Exception {
        user = userDAO.findByCredentials(user.getUsername(), user.getPassword());
        if (user == null) {
            return INPUT;
        } else {
            session.put("user", user);
            return SUCCESS;
        }
    }
    
    public String doDefault() throws Exception {
        return INPUT;
    }
    
    public User getUser() {
        return user;
    }
    
    public void setUserDAO(UserDAO dao) {
        this.userDAO = dao;
    }
}

4.7.2 Example: accessing the request and response

① ActionContext를 이용하여 access (권장하지 않음)


public String execute() throws Exception {

    user = userDAO.findByCredentials(user.getUsername(), user.getPassword());
    
    if (user == null) {
        return INPUT;
    } else {
        ActionContext ctx = ActionContext.getContext();
        HttpServletRequest req = ctx.get(ServletActionContext.HTTP_REQUEST);
        HttpSession session = req.getSession();
        session.setAttribute("user", user);
        return SUCCESS;
    }
}

② ServletActionContext를 이용하여 access (권장하지 않음)


public String execute() throws Exception {
    
    user = userDAO.findByCredentials(user.getUsername(), user.getPassword());
    
    if (user == null) {
        return INPUT;
    } else {
        HttpServletRequest req = ServletActionContext.getRequest();
        HttpSession session = req.getSession();
        session.setAttribute("user", user);
        return SUCCESS;
    }
}

③ ServletRequestAware 를 이용하여 access (이 방법을 권장)


public class Login extends ActionSupport implements ServletRequestAware, UserDAOAware {
    
    HttpServletRequest req;
    User user;
    UserDAO userDAO;
    
    public void setServletRequest(HttpServletRequest req) {
        this.req = req;
    }
    
    public String execute() throws Exception {
        
        user = userDAO.findByCredentials(user.getUsername(), user.getPassword());
    
        if (user == null) {
            return INPUT;
        } else {
            HttpSession session = req.getSession();
            session.setAttribute("user", user);
            return SUCCESS;
        }
    }
    
    public String doDefault() throws Exception {
        return INPUT;
    }
    
    public User getUser() {
        return user;
    }
    
    public void setUserDAO(UserDAO dao) {
        this.userDAO = dao;
    }
}

문서에 대하여

  • 이 문서의 내용은 Webwork In Action 교재를 스터디 하면서 정리한 내용 입니다.
  • 최초작성자 : 김정식
  • 최초작성일 : 2007년 9월 21일
  • 이 문서는 오라클클럽 자바 웹개발자 스터디 모임에서 작성하였습니다.
  • 이 문서를 다른 블로그나 홈페이지에 퍼가실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^\^