학습하며 정리한 내용을 올리는 것이니, 참고용으로만 봐 주시길 바랍니다.
자바 스프링 프레임워크(renew ver.) - 신입 프로그래머를 위한 강좌

세션 & 쿠키

  1. 세션 생성
public String memLogin(Member member, HttpServletRequest request) {
    ...
    HttpSession session = request.getSession();
    session.setAttribute("member", mem);
    return "/member/loginOk";
}

public String memLogin(Member member, HttpSession session) {
    ...
    session.setAttribute("member", mem);
    return "/member/loginOk";
}

1.1 세션 회원정보 수정

public ModelAndView modifyForm(HttpServletRequest request) {
    HttpSession session = request.getSession();
    Member member = session.getAttribute("member");

    ModelAndView mav = new ModelAndView();
    mav.addObject("member", service.memberSearch(member));
    ...
  1. 세션 삭제
public String memLogout(Member member, HttpSession session) {
    ...
    session.invalidate();
    return "/member/logout ";
}

세션 주요 메소드

  • getId(): 세션 ID 반환
  • setAttribute(): 세션 객체에 속성을 저장
  • getAttribute(): 세션 객체에 저장된 속성을 반환
  • removeAttribute(): 세션 객체에 저장된 속성 제거
  • setMaxInactiveInterval(): 세션 객체의 유지 시간 설정
  • `get ~
  • invalidate(): 세션 객체의 모든 정보삭제
  1. 쿠키 생성
public String mallMain(Mall mall, HttpServletResponse) {
    Cookie genderCookie = new Cookie("gende", mall.getGender());

    if (mall.isCookieDel()) {
        genderCookie.setMaxAge(0);
        mall.setGender(null);
    } else {
        genderCookie.setMaxAge(60 * 60);
    }
    response.addCookie(genderCookie);
    return "/mall/main";
  1. 쿠키 사용
@public String mallIndex(Mall mall, @CookieValue(value="gende", required=false) Cookie genderCookie, HttpServletRequest request) {
    if (genderCookie != null)
        mall.setGender(genderCookie.getValue());
    return "/mall/index";
}
}

리다이렉트 & 인터셉터

리다이렉트

: reutrn "redirect:/page";
:

public ModelAndView removeForm(HttpServletRequest request) {
    ModelAndView mav = new ModelAndView();
    ...
    if (null == member) {
        mav.setViewName("redirect:/");
    } else {
        mav.addObject("member", member);
        mav.setViewName("/member/removeForm");
    }

    return mav;
}

인터셉터

: 리다이렉트를 사용해야 하는 경우가 많을 때 HandlerInterceptor를 이용할 수 있다.

--------------- ###########################
--------------- # ------ Request -------- #
--------------- ###########################
--------------------------- |
--------------- ###########################
--------------- #--- DispatcherServlet ---#
--------------- ###########################
--------------------------- |
#######################################################
#---------- HandlerInterceptor(인터페이스) ------------#
#-----------------------------------------------------#
# PreHandle()------PostHandler()-----afterCompletion()#
#######################################################
------ | -------------- ^ ----- | --------- ^
------ | -------------- | ----- | --------- |
--- ######################## -- | --------- |
--- #  Handler(Controller) # -- | --------- |
--- ######################## -- |  #####################
------------------------------- ㄴ># ------ View ----- #
---------------------------------- #####################
        
#######################################################
# ---------------------- Response ------------------- #
#######################################################
  • preHandle(): Controller가 작업하기 전 작업한다. 리다이렉트를 대체 가능하다. 주로 쓰인다.
  • postHandle(): Controller가 작업한 후 작업한다.
  • afterCompletion(): Controller 와 View가 작업한 후에 작업한다.

: 주로 HandlerInterceptor 인터페이스를 구현하기 보다는, 이들이 구현되어 있는 HandlerInterceptorAdapter 클래스를 상속받아 사용한다.

public class MemberLoginInterceptor extends HandlerInterceptorAdaptor {

    @Override
    public bollean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HpptSession session = request.getSession(false);
        if (session != null) {
            return true;
        }

        response.sendRedirect(request.getContextPath() + "/"); // main 페이지로 보낸다
        return false;
    }
}
// servlet-context.xml
// 스프링 설정파일

<interceptors>
    <interceptor>
        <mapping path="/member/modifyForm" /> // 
        <mapping path="/member/removeForm" /> // 이곳으로 요청이 들어왔을 때 
        <beans:bean class="com.bs.lec21.member.MemberLoginInterceptor" /> // 이 인터셉터가 동작을 해라
    </interceptor>
</interceptors>
<mapping path="/member/**" /> // 멤버 하위의 모든 경로에 대해 동작을 하는데
<exclude-mapping path="/member/joinForm" /> // 여기는 제외해라
<exclude-mapping path="/member/join" />
<exclude-mapping path="/member/login" />

'Backend > Spring' 카테고리의 다른 글

Spring - 데이터베이스  (0) 2021.02.14
Spring - MVC  (0) 2021.02.04
Spring - 스프링 컨테이너의 생성관련  (0) 2021.02.02
Spring - Bean과 의존객체 주입  (0) 2021.02.01
Spring - Dependency Injection  (0) 2021.01.31

+ Recent posts