지난 포스트에서 dispather-servlet.xml 파일을 통해 컨트롤러와 URL을 매핑해주었다.
이렇게 요청과 매핑된 컨트롤러는 해당 요청을 처리할 수 있어야 한다.
따라서 모든 컨트롤러는 공통적으로 HTTP요청을 처리하고 응답할 수 있는 handleRequest 메서드가 필요하다!
이 handleRequest는 컨트롤러 인터페이스에 있는데, 이제 이 메서드를 구현해주면 된다!

Controller 인터페이스의 handleRequest 메서드를 오버라이드해서 살펴보면 request와 response를 매개변수로 받고 ModelAndView라는 것을 반환하도록 되어있다.
여기서 ModelAndView는 그릇이라고 생각하면 좋다.
Dispatcher는 스프링이 대신 해주므로 Dispatcher될 것들을 ModelAndView에 담아서 보내는 것이다.
따라서 우리는 이 ModelAndView에 어떤 것을 담을지, 담아서 어디로 보내야 하는지(jsp 이름)를 적어주면 된다.
적는 방법은 다음과 같다.
// 컨트롤러
public class IndexController implements Controller{
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
throws Exception {
ModelAndView mav = new ModelAndView();
mav.addObject("text", "hello, Spring MVC ~");
mav.setViewName("index.jsp");
// 처음 ModelAndView객체 생성시 오버라이딩된 생성자로 설정가능
// ModelAndView mav = new ModelAndView("index.jsp");
return mav;
}
}
<!-- index.jsp (View) -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>스프링 연습</title>
</head>
<body>
<h1>Hi~~ ${text }</h1>
</body>
</html>
위와 같이 적어주면 ModelAndView 객체에 text라는 이름으로 "hello, Spring MVC ~"라는 내용이 담기게 되고, 이 객체는 index.jsp로 보내지게 된다.
하지만 이 상태에서 컨트롤러를 실행하게 되면 404가 뜨면서 에러가 발생하는데 이는 반환된 주소가 컨트롤러의 위치가 표시되기 때문인데 (주소창에 /index 가 있어야 하지만 /IndexContoller.java 가 표시되어있음)
일단은 잘 되었는지 확인하기 위해 브라우저의 주소창에 (프로젝트이름)/index로 바꿔서 실행해본다.

아주 잘 된다 ^^
🔥 한줄평
Controller인터페이스의 handleRequest 메서드에 대해 알아보았다!