클라이언트의 요청이 들어오면 DispatcherServlet이 요청을 받는다. dispatcherServlet은 hardler에게 자신의 일을 위임한다. Handler는 요청에 맞는 컨트롤러를 찾고 컨트롤러 실행 결과를 반환한다. 이후 dispatcherServlet는 받은 결과와 함께 viewResolver에게 위임한다. veiw 정보를 찾아 view를 가지고 클라언트에게 응답한다.
✏️역할
해당 클래스가 웹 애플리케이션의 컨트롤러임을 나타낸다. MVC의 핵심 요소중 하나이며, 클라이언트의 요청을 처리하는 비즈니스 로직과 뷰를 결합하여 전체적인 웹 애플리케이션의 동작을 제어한다. 스프링 컨테이너는 @Controller 어노테이션이 지정된 클래스를 빈으로 등록한다.
요청을 해당 컨트롤러에 매핑하여 처리한다.
view를 반환하기 위해 사용한다. 사용자의 요청을 받아 처리한 후 지정된 뷰(템플릿엔진/jsp..)에 모델 객체를 넘겨주는 역할
💻 코드로 보기
@Controller
public class TestController {
public ModelAndView haha() {
return new ModelAndView("list","msg", "안녕!?");
}
}
method와 매핑하기 위해 사용하는 어노테이션이다. get이나 post 요청을 구분하지 않는다.
@RequestMapping은 Controller단에서 사용된다. DispatcherServlet이 Controller 파일을 찾고, 논리적 주소가 매핑된 Method를 찾기 위해서 @Controller와 @RequesetMapping을 작성해야한다.
⌨ 코드로 보기
<a href="gogo">컨트롤러 만나보자구!</a><br>
1) 코드
@RequestMapping(value="gogo",method=RequestMethod.GET) //get 요청처리 ,status=405 요청 다름
public ModelAndView hoho() {
return new ModelAndView("list","msg", "안녕!?");
}
이때 value는 contextPath 요청을 의미한다.
2) 코드
public ModelAndView haha() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("list");
modelAndView.addObject("msg", "안녕! jsp?");
return modelAndView;
}
반환타입 1.String : 응답할 Jsp 이름 반환 2. void : 컨트롤러가 호풀한 서비스에서 직접 응답한다. 요청 주소를 jsp이름으로 인식한다. 3. 기타 : 비동기 통신 데이터를 응답한다.
매개변수 1. HttpServletRequest 선언해서 사용 2. Model 선언 후 forward하여 해당 정보 저장 3. HttpSession을 선언해서 사용
요청 메소드 : GET, POST URL : 요청 주소
✨ Http Request Method (HTTP 요청 메서드)
HTTP는 요청 메서드를 정의한다. 주어진 리소스에 수행하길 원하는 행동, Server가 수행해야할 동작을 지정한다.
GET
server의 리소스를 조회하기 위해
CRUD에서 R(Read) -읽기
POST
server의 리소스를 생성하기 위해
CRUD에서 C(Create) -생성
PUT
server의 리소스를 수정하기 위해
CRUD에서 U(Update) -수정
PATCH
server의 리소스를 일부 수정하기 위해
CRUD에서 U(Updatae) -수정
DELETE
server의 리소스를 삭제하기 위해
CRUD에서 D(Delete) -삭제
✔@GetMapping
get방식으로 들어온 요청을 받을 수 있다.
같은 이름의 메서드를 호출해도 get방식으로 들어오는 메서드와 post 방식으로 들어오는 메서드는 다를 수 있다.
⌨ 해당
<a href="gogo">컨트롤러 만나보자구!</a><br>
@GetMapping("gogo") //get 요청 처리
public ModelAndView hehe() {
return new ModelAndView("list","msg", "안녕! 123");
}
💻 @ResponseBody
클라이언트 -----request-----> 서버 서버 --------response--------> 클라이언트
웹에서 화면전환(새로고침)없이 이뤄지는 동작들은 비동기 통신이라고 한다. 비동기 통신을 위해 클라이언트에서 서버로 요청을 보낼때, 본문에 데이터를 담아서 보내야한다. 서버 클라이언트로 응답을 보낼때에도 본문에 데이터를 담아서 보내야한다. 이때 데이터가 들어있는 본문이 body이다.
http요청의 미디어 타입과 파라미터의 타입을 먼저 확인한다.
@GetMapping("gogo")
@ResponseBody //일반 data를 그대로 전달
public String hihi() { //순수 String
String value = "일반 데이터 - String, Map, JSON등을 전달 가능";
return value;
}
@Responsebody 어노테이션을 사용하면 http요청 body를 자바 객체로 전달받을 수 있다. 템플릿 엔진과 관계없이 해당 return값이 그대로 내려간다.
spring boot 내부에서 viewResolve 대신 httpMessageConverter가 작동한다. - String 값이 들어오면 StringHttpMessageConverter가 사용된다. - 기본 객체가 들어오면 MappingJackson2HttpMessageConverter가 사용된다. (객체가 들어오면 기본적으로 json화 시킨다.)