*도움이 되셨다면 광고 한번 클릭 부탁드립니다! 제게 큰 힘이됩니다!
|
@RequestMapping(value="/memberlogin",method=RequestMethod.POST)
public String memberLogin(Model model,HttpServletRequest request){
String memId = request.getParameter('Id');
String memPw = request.getParameter("Pw');
}
스프링에서 HttpServletRequest를 통해서 HTTP 전송 정보를 얻는 방법은 위와 같다.
하지만 이 방법은 속성값을 끄집어내기 위한 보일러 플레이트코드(코딩에서의 Boiler plate 는 꼭 필요한 간단한 기능인데, 반복적인 코드를 필요로 하며, 이것이 중복되어 많은 양의 코드를 양산하는 것을 이야기한다.
)가 생길 수 밖에 없는 단점이 있다.
그래서 스프링에서는 @RequestParam 어노테이션을 제공하여 메서드의 인수 부분에 HTTP로 들어오는 데이터를 바인딩
하여 보일러플레이트 코드를 어느정도 줄일수 있게 하였다.
@RequestMapping(value="/memberlogin",method=RequestMethod.POST)
public String memberLogin(Model model,HttpServletRequest request){
@RequestParam("Id") String memId,
@RequestParam("pw") String memPw,
Member member = service.memberSearch(memId,memPw);
}
하지만 이경우에는 파라미터 수들이 많아지면 하나하나 명시해서 처리해야되서 매우 귀찮아 진다.
예를들어 현재는 "ID" , "PW" 만 있지만 사실 게시판을 만들때는 페이징처리하는 param 및 작성자 등등 많은것들이
param값으로 넘어오는데 모든것을 일일이 적어서 파라미터로 받게하면 코드가 길어지며 가독성은 현저히 떨어 질것이다.
그래서 스프링은 커맨드 객체(Command Object)를 지원하고있는데 http 요청
파라미터의 이름을 이용한 setter 메소드
를 작성한 클래스를 만들고, 이 클래스의 객체(커맨드 객체)를 메소드의 파라미터 값으로 넣어주면 속성값들을 자동으
로 커맨드 객체에 바인딩하여 처리할수있게 만들었다.
예를 들어 아래와 같이
listok.jsp가 있다고 가정할때 여기서 form을 전송하자 .
<form name="listform" action="/adm/bbs/selectlist.do" method="post" >
<input type="hidden" name="Id" value="dizzy">
<input type="hidden" name="Pw" value="1234">
<input type="submit" value="전송">
</form>
그러면 컨트롤러에서 url RequestMapping을 하여 form문이 전달되며 input data Id,Pw 가
자동적으로 BoardMasterVO Id, Pw 값에 매핑되어서
vo.getId , vo.getPw 를 사용하여 가져올수있다.
이때 주의 할점은 반드시 input 데이터와 VO 변수값이 일치하여야
인식하고 자동 바인딩된다.
public class BoardMasterVO {
/** 검색시작일 */
private String Id = "";
/** 검색조건 */
private String Pw = "";
@RequestMapping("/adm/bbs/selectlist.do")
public String listboard(@Modelattiribute("searchVO") BoardMasterVO bvo,ModelMap model){
BoardMasterVO vo = service.get_list(bvo);
model.addAttribute("result",vo);
//JSP
return "/adm/bbs/listregist"
}