Spring MVC에서 Controller 파헤치기
Controller 구현이란 클라이언트의 요청을 처리할 메서드를 구현하는 것이다.
클라이언트는 URL로 요청을 전송하고, 요청 URL을 어떤 메서드가 처리할 지 여부를 결정하는 것이 @RequestMapping이다.
@RequestMapping
처리할 요청 URL을 지정한다.
@Controller
public class ExController {
@RequestMapping("/index")
public ModelAndView homepage(){
...
}
}
@RequestParam
HTTP 요청 파라미터의 값을 메소드 파라미터에 넣어주는 annotation
가져올 요청 파라미터의 이름을 @RequestParam의 기본 값으로 지정해주면 된다.
@Controller
public class ExController {
@RequestMapping("/index")
public ModelAndView homepage(@RequestParam Map<String, Object> param){
...
}
}
@PathVariable
{변수}
형식의 경로변수를 사용할 수 있고, 경로 변수의 값을 파라미터로 전달받을 수 있다. 경로 변수는 한 개 이상 사용할 수 있다. 경로 변수를 파라미터 타입으로 변환할 수 없을 경우, 스프링 MVC는 웹 브라우저에 400에러 코드의 응답 결과를 전송한다.
! null이나 공백값이 들어가는 파라미터는 적용X,
! 값을 넘겨 받을때 '.'이 포함되어 있으면 그 뒤가 잘려서 들어옴
@Controller
public class ExController {
@RequestMapping(value="/index/{num}")
public ModelAndView homepage(@PathVariable String num, @RequestParam Map<String, Object> param){
...
}
}
HttpServletRequest
http 요청 메시지를 개발자가 편하게 파싱 할 수 있도록 도와주고 결과를 HttpServletRequest 객체에 감아서 제공한다.
HttpServletResponse
http 응답 코드를 지정해주고 헤더와 바디를 생성한다.
@RequestMapping(value="/index")
public ModelAndView homepage(@PathVariable String hosCd, @RequestParam Map<String, Object> param, HttpServletRequest request, HttpServletResponse response) {
...
}
ModelAndView
Controller 처리 결과 후 응답할 view와 view에 전달할 값을 저장한다.
ModelAndView mav= new ModelAndView();
mav.setViewName("뷰의 경로"); // 뷰의 이름
mav.addObject("변수이름", "데이터 값); // 데이터 보내기
Map
Map은 list나 array처럼 순차적으로(sequential) 해당 요소 값을 구하지 않고, key를 통 해 value를 얻는다.
put method:
ModelAndView mav= new ModelAndView();
mav.setViewName("뷰의 경로"); // 뷰의 이름
mav.addObject("변수이름", "데이터 값); // 데이터 보내기
egovMap Class
전자정부프레임워크에서 제공하는 제네릭 타입이다. (java의 Map 클래스와 동일)
mybatis 맵핑 .xml 파일에 resultClass로 사용할 수 있다.
resultClass란 어떠한 DB에서 조회한 결과를 가져올 때, 결과값의 포맷을 가진 클래스라고 생각하면 된다.
그래서 SQL문을 통해 column명으로 참조를 하게 되는데, egovMap을 사용하면 단순한 Map과는 다르게 camelcase의 규칙에 따른 이름으로 객체를 참조할 수 있다.
ex) 컬럼명이 user_id라면 userId로
EgovMap egovMap = new EgovMap();
너무 유용하고 최고!!