// 로그인 요청 처리 완료 후, "응답데이터"를 담고 응답페이지로 url재요청할 예정
1) Model객체를 이용하는 방법
포워딩할 응답뷰페이지로 전달하고자 하는 데이터를 맵형식으로 담아주기
-> request, session 스코프 두개를 가지고 있다.
- 기본 scope : request
- session scope : 클래스 위쪽에 @SessionAttribute를 추가한 후 작성하면 된다.
2) ModelAndView객체를 이용하는 방법
ModelAndView에서 Model은 데이터를 담을 수 있는 맵형태의 객체(위 Model과 동일)
View는 이동하고자 하는 페이지에 대한 정보를 담고있는 객체. 두개를 합쳐서 ModelAndView라고 한다.
Model은 내부에 데이터를 추가하고자 할 때 addAttribute()를 사용
ModelAndView는 데이터를 추가할 때 addObject()를 사용
view를 지정할 때 setViewName()을 사용
// 로그인
<a data-toggle="modal" data-target="#loginModal">로그인</a>
// 로그인 클릭시 모달창 띄워줌
@SessionAttributes({"loginUser"})
// Model안에 추가된 값이 key값과 일치하는 값이 있으면 해당 값을 session으로 이관
@Controller // Bean 객체로 등록!
//(Spring의 빈스캐너가 자동으로 빈객체로 만들어준다(servlet-context.xml안에 있는 태그))
public class MemberController {
private MemberService mService;
@RequestMapping(value="login.me", method=RequestMethod.POST)
public String loginMember(Member m, HttpSession session,
Model model, ModelAndView mv) {
// Model객체 사용시
// model.addAttribute("errorMsg", "오류발생!");
// ModelAndView객체 사용시
mv.addObject("errorMsg", "오류발생");
mv.setViewName("common/errorPage");
Member loginUser = mService.loginMember(m);
return mv;
}
}
// 로그아웃
<a href="${contextPath}/logout.me">로그아웃</a>
@SessionAttributes({"loginUser"})
@Controller
public class MemberController {
@GetMapping("/logout.me")
public String logoutMember(HttpSession session, SessionStatus status) {
session.invalidate(); // session 비우기
status.setComplete();
// @SessionAttributes와 model로 session scope에 이관된 데이터는 SessionStatus로 비워줘야 한다.
return "redirect:/"; //페이지 재요청
}
}