[Spring MVC] Controller Interface, Forward Controller, Handler Mapping 자바 소스로 구현해보기
https://www.programmingstory.com/2024/01/forward-redirect.html
이전 포스팅에서 Forward 방식과 Redirect 방식의 차이점에 대해 다루어보았다.
오늘은 Forward 방식을 구현한 Forward Controller와 Controller Interface를 구현해보겠다.
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ForwardController implements Controller {
private String url;
public ForwardController(String url) {
this.url= url;
}
@Override
public String handle(HttpServletRequest request, HttpServletResponse response) throws Exception {
return url;
}
}
위가 Forward 방식을 구현한 간단한 Controller이다.
다양한 방식의 Controller가 있을 수 있기 때문에 Controller라는 Interface를 하나 더 만드는 것이 좋다.
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public interface Controller {
String handle(HttpServletRequest request, HttpServletResponse response) throws Exception;
}
이런 식으로 구현을 할 수 있다.
또 MVC에서는 HandlerMapping을 통해 Controller를 찾아주는데 위 소스도 아래와 같이 구현해볼 수 있다.
즉, 원하는 HandlerMap과 Controller를 Map<> 자료구조로 받아 놓고 HandlerMap을 Key값으로 하여 매핑되어 있는 Controller를 반환해주는 형식이다. 아래 소스에서는 /user/register로 URL이 GET 요청으로 들어오면 ForwardController가 해당 url로 forward 시켜주는 소스이다.
import java.util.HashMap;
import java.util.Map;
public class RequestMappingHandlerMapping{
private Map<HandlerMap, Controller> handlerMappings = new HashMap<>();
void init() {
handlerMappings.put(new HandlerMap("/user/register", RequestMethod.GET), new ForwardController("/user/register"));
}
public Controller findHandler(HandlerMap handlerMap) {
return handlerMappings.get(handlerMap);
}
}