Controller 요청 줄이기
만약
my.do
mypage.do
mypagePage.do
이런 요청들이 있다면.. 이름도 비슷하여 헷갈린다.
이때 오버로딩을 통해 메서드명 줄이기가 가능하다!
@RequestMapping(value="/login.do", method=RequestMethod.GET)
public String login() {
return "login";
}
@RequestMapping(value="/login.do", method=RequestMethod.POST)
public String login(HttpSession session, MemberDAO memberDAO, MemberDTO memberDTO) {
// 커맨드 객체
memberDTO = memberDAO.selectOne(memberDTO);
String viewName="redirect:login.do";
if(memberDTO != null) {
session.setAttribute("userID", memberDTO.getMid());
viewName = "redirect:main.do";
}
return viewName;
}
@RequestMapping("/logout.do")
public String logout(HttpSession session) {
session.removeAttribute("userID");
return "redirect:login.do";
}
이때 @RequestMapping을 보게 되면,
method=RequestMethod가 GET과 POST로 구분되어 있다.
GET으로 요청하면 : 해당 페이지를 이동시켜 달라는 의미
POST로 요청하면 : 해당 페이지의 내용을 UPDATE 해달라는 의미
따라서 똑같은 요청명을 쓸 수 있다!
- GET 요청이 보안에 취약해서 페이지 이동에 많이 쓰임. (주로 R)
- POST 요청은 GET 요청보다는 상대적으로 보안이 좋아서 실제 CUD 할 때 많이 쓰인다.
>> 하지만 login의 경우 id, pw가 있기 때문에 R 요청이지만 POST를 쓴다.
== 모든 R이 GET이거나, CUD가 POST 인 건 아니다!
데이터를 보낼 때 사용하는 방식
Session을 사용할 때도 있고, Model을 사용할 때도 있다.
대부분 Model을 사용한다. (이유 : 만약 게시글을 Session에 담아다니면 무겁고, 글을 계속 들고 다녀야 함)
예시로 로그인의 경우 데이터를 브라우저마다 들고 다녀야 하니까 Session을 사용한다.
return
- return "login"
- return "redirect:login.do"
둘 다 log인인데, 위의 로그인은 포워드/아래는 리다이렉트 방식으로 보인다.
"login"의 경우 로그인에 뭔가 작은 광고라도 하나 들어간다면 포워드 방식을 사용해야 한다.
🍀redirect 차이점
redirect가 없으면
- VR가 개입
- VR가 포워드가 디폴트
- 보낼 데이터가 있음
- 페이지로 이동 (===V로 이동 ★)
redirect : 가 있으면
- VR 개입 xxx
- 리다이렉트임
- 보낼 데이터 없음
- .do (==C로 이동 ★)
Model에 넣은 데이터를 JSP에서 어떻게 확인하는지 의문이 생기게 되는데,
모든 커맨드 객체를 가져다가 쓸 수 있다!!
왜냐하면 모든 jsp 파일이 컴파일되면 결국에는 java가 된다.
자바는 JVM이라는 메모리 위에 얹어져 있기 때문에 다 컨테이너에 있다!
그래서 자유롭게 view에서 꺼내서 쓸 수 있게 된다.
model.addAttribute("datas", datas);
기존에 데이터를 전달하던 session.setAttribute(); 와 같은 역할이라고 볼 수 있다!
'Spring' 카테고리의 다른 글
[Spring] Service와 ServiceImpl (3) | 2024.10.10 |
---|---|
[Spring] 게시판 로직 Spring으로 구현하기 (0) | 2024.10.10 |
[Spring] @Controller 어노테이션과 컨트롤러 통합 (0) | 2024.10.10 |
[Spring] ViewResolver 사용과 Spring 흐름 정리 (0) | 2024.10.08 |
[Spring] Spring에서 사용하는 ViewResolver (0) | 2024.10.08 |