spring framework

스프링 프레임워크 #6 - 모델, 세션, 예외처리

letsDoDev 2023. 9. 18. 16:16

◎ 참고 서적  |  Mastering Spring 5 

 

[ 모델 속성 ]

모델에 오브젝트 넣는 방법 - 메소드 

// 방법1
@ModelAttribute
public List<State> populateStateList(){
	return stateService.findStates();
}

// 방법2
@ModelAttribute
public List<State> populateStateAndCountryList(){
	model.addAttribute(반환값이 있는 메소드);
	model.addAttribute(반환값이 있는 메소드);    
}

여기서 return 받는 값이 모델에 넣는다.
방법 2를 사용하면 여러 개의 오브젝트를 모델에 넣을 수 있다.


[ 세션 속성 ]

- 세션 저장 방법

@Controller
@SessionAttributes("pinNo")
public class LoginController{
	
    @RequestMapping(value="/login")
    public String login(ModelMap model){
    	model.put("pinNo",로그인하면서 넘어온 데이터)
        
        return "다음 뷰 url"
    }
}

1.Class 에 Session에 등록할 key 이름을 pinNo으로 지정

2.Login 메소드에서 로그인하면서 넘어온 데이터를 model에 넣을 때 세션 key 명으로 지정하면 자동으로 세션 대화 상태로
  저장됨

 

- 세션 불러오기

@Controller
public class LoginCheck{

	@RequestMapping(value="/loginCheck")
    public String loginCheck(ModelMap model){
    	String sessionValue = (String)model.get("pinNo");
   
		return "다음 뷰 url"
	}
}

 

- 세션 속성 제거 (★ 전체 세션 속성 과정 : 로그인 로그아웃 예제로)


// 세션 등록 컨트롤러와 메소드
@Controller
@SessionAttributes("pinNo")
public class LoginController{
	
    @RequestMapping(value="/login")
    public String login(ModelMap model){
    	model.put("pinNo",로그인하면서 넘어온 데이터)
        
        return "다음 뷰 url"
    }
}

// 세션 확인 컨트롤러와 메소드
@Controller
public class LoginCheck{

	@RequestMapping(value="/loginCheck")
    public String loginCheck(ModelMap model){
    	String sessionValue = (String)model.get("pinNo");
   
		return "다음 뷰 url"
	}
}

// 세션 제거 컨트롤러오 메소드
@Controller
public class LogOUT{

	    // 방법1
	@RequestMapping(value="/logOut", method=RequestMtehod.GET)
    public String logOut( 다른 인스턴스들 , WebRequest request, SessionStatus status){
   		status.setComplete();
        request.removeAttribute("pinNo", WebRequest.SCOPE_SESSION);
        
		return "다음 뷰 url"
	}
    
    
    // 방법2
    @RequestMapping(value="/logOut", method=RequestMtehod.GET)
    public String logOut( 다른 인스턴스들 , SessionAttributeStore store, SessionStatus status){
   		status.setComplete();
        store.cleanupAttribute(request, "pinNo");
        
		return "다음 뷰 url"

}

[ 예외처리 ]

(컨트롤러 전반)

- 예외 처리  컨트롤러

@ControllerAdvice
public Class ExceptionController{
	private Log logger = LogFactory.getLog(ExceptionController.class);
    @ExceptionHandler(value= Exception.class)
    public ModelAndView handlerException
    (HttpServletRequest request, Exception ex)
    {
    	logger.error("Request" + request.getRequestURL()
        + " Threw an Exception", ex);
        ModelAndView mav = new ModelAndView();
        mav.addObject("Exception", ex);
        mav.addObject("url", request.getRequestURL());
        mav.setViewName("common/spring-mvc-error");
        return mav;
        }
    }

- 예외 처리 뷰

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core %>
<%@page isErrorPAge="true"%>
<h1>Error Page</h1>
  URL : ${url}
 <BR/>
 Exception: ${exception.message}
 <c:forEach items="%{exception.stackTrace}"
  var="exceptionStackTrace">
  ${exceptionStackTrace}
  </c:forEach>