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는 데이터와 뷰의 이름을 함께 전달하는 객체이다.
'Web[웹] > Spring Framework' 카테고리의 다른 글
[Spring] 컨트롤러에서 뷰를 분기하는 리다이렉트 & 인터셉트 (0) | 2019.12.05 |
---|---|
[Spring] 클라이언트와 서버간 연결을 유지하는 세션 & 쿠키 (0) | 2019.12.04 |
[Spring] Service & Dao 객체 구현 : MVC 프로젝트 (1) (0) | 2019.11.28 |
[Spring] MVC 웹 프로그래밍 설계 모델 (With. STS) (0) | 2019.11.22 |
[Spring] 어노테이션을 이용한 스프링 설정 (0) | 2019.11.21 |