Tiny Bunny [Spring] Controller 요청 줄이기와 Model 객체 - 솜님의 블로그
솜님의 블로그
카테고리
작성일
2024. 10. 10. 14:31
작성자
겨울솜사탕

 

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(); 와 같은 역할이라고 볼 수 있다!