본문 바로가기

Web[웹]/Spring Framework

[Spring] Controller 객체 구현 : MVC 프로젝트 (2)

 

Controller 객체 구현 (1)

 

이전챕터에서 했던 예제를 이어서 진행해보자.

 

▶이전챕터: https://opentogether.tistory.com/91

 

그 중에 @RequestMapping 에 대해서 알아보자.

 

<!-- memJoin.html -->
...
<form action="/test/memJoin" method="post">
    ID : <input type="text" name="memId"><br />
    PW : <input type="password" name="memPw"><br />
    MAIL : <input type="text" name="memMail"><br />
    PHONE : <input type="text" name="memPhone1" size="5"> -
		    <input type="text" name="memPhone2" size="5"> -
		    <input type="text" name="memPhone3" size="5"><br />
    <input type="submit" value="Join">
    <input type="reset" value="Cancel">
</form>
...
<!-- login.html -->
...
<form action="/test/memLogin" method="post">
    ID : <input type="text" name="memId"><br>
    PW : <input type="password" name="memPw"><br>
    <input type="submit" value="Login">
</form>
...
/* MemberController.java */
...
@Controller
public class MemberController {

	MemberService service;
	
	@RequestMapping(value="/memJoin", method=RequestMethod.POST)
	public String memJoin(Model model, HttpServletRequest request) {
		String memId = request.getParameter("memId");
		String memPw = request.getParameter("memPw");
		String memMail = request.getParameter("memMail");
		String memPhone1 = request.getParameter("memPhone1");
		String memPhone2 = request.getParameter("memPhone2");
		String memPhone3 = request.getParameter("memPhone3");
		
		service.memberRegister(memId, memPw, memMail, memPhone1, memPhone2, memPhone3);
		
		model.addAttribute("memId", memId);
		model.addAttribute("memPw", memPw);
		model.addAttribute("memMail", memMail);
		model.addAttribute("memPhone", memPhone1 + " - " + memPhone2 + " - " + memPhone3);
		
		return "memJoinOk";
	}
	
	@RequestMapping(value="/memLogin", method=RequestMethod.POST)
	public String memLogin(Model model, HttpServletRequest request) {
		
		String memId = request.getParameter("memId");
		String memPw = request.getParameter("memPw");
		
		Member member = service.memberSearch(memId, memPw);
		
		try {
			model.addAttribute("memId", member.getMemId());
			model.addAttribute("memPw", member.getMemPw());
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		
		return "memLoginOk";
	}
	
}

 

 

1. 데이터 전송방식에 따른 method 속성 설정

 

위의 'memJoin.html' 에서 <form  ... method="post"> 로 되어있는데, 이는 post방식으로 요청하는 것이기에 'MemberController.java' 에서 반드시 @RequestMapping( ... method=RequestMethod.POST) 를 명시해주어야한다. 허나,  GET 방식의 경우에는 @RequestMapping( ... method=RequestMethod.GET) 이라고 명시 해주어도 되지만, 따로 넣지 않아도, 디폴트로 GET 방식을 통해 받아온다. 이때 @RequestMapping의 속성으로 value 값만 남게 되는데, 이 경우에는 @RequestMapping(value="/memLogin") 을 @RequestMapping("/memLogin") 로도 표현이 가능하다.

 

 

 

 

2. form의 action 속성에서 경로 추가 시, @RequestMapping의 value경로 설정

 

경로가 추가 되었을때 각 @RequestMapping value에 경로를 모두 추가 해주어야 됐지만, 각  클래스 위에다가 @RequestMapping을 한번 만 써서, 중복 데이터를 예방할 수 있다.

 

 

 

3. HTTP 전송 정보 얻기

 

기존에 짜여진 코드에는 HttpServletRequest 객체를 통해서 HTTP 전송 정보를 얻었다.

 

 

 

이번에는 @RequestParam 어노테이션을 이용해서 HTTP 전송 정보를 간략한 코드로 얻어보면 다음과 같이 코드를 생략해줄 수 있다.

 

 

 

커맨드 객체를 이용한 HTTP 전송정보를 얻을 수도 있다.

 

 

 


 

Controller 객체 구현 (2)

 

1. @ModelAttribute

컨트롤러에 @ModelAttribute을 이용하면 커맨드 객체의 이름을 변경할 수 있고, 이렇게 변경된 이름은 뷰에서 커맨드 객체를 참조할 때 사용된다.

 

 

그리고 @ModelAttribute가 어떠한 메서드 위에 있을 경우엔, 어떠한 URL을 맵핑해서 어떠한 메서드가 쓰여지던 간에, @ModelAttribute를 위에 명시한 메서드는 다른 메서드가 호출될 때, 같이 호출이 된다.

 

 

 

2. ModelAndView

컨트롤러에서 뷰에 데이터를 전달하기 위해 사용되는 객체로 Model과 ModelAndView가 있다. 두 객체의 차이점은 Model은 뷰에 데이터만을 전달하기 위한 객체이고, ModelAndView는 데이터와 뷰의 이름을 함께 전달하는 객체이다.