만약 Spring MVC에 Front Controller 패턴이 적용되어있지 않았다면?
아래의 코드처럼 단 4개의 API를 처리하기 위해 무려 3개의 클래스를 만들어야함
@WebServlet(urlPatterns = "/user/login")
public class UserLoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
// ...
}
}
@WebServlet(urlPatterns = "/user/logout")
public class UserLogoutServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
// ...
}
}
@WebServlet(urlPatterns = "/user/signup")
public class UserSingUpServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
// ...
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
// ...
}
}
Spring MVC는 효율적인 API 처리를 위해 Front Controller 패턴을 만들어냄
이제는 API 마다 파일을 만들 필요 X
메서드 이름도 내 마음대로 설정 가능 (단, 클래스 내의 중복메서드명 불가)
@Controller
@RequestMapping("/user")
public class UserController {
@GetMapping("/login")
public String login() {
// ...
}
@GetMapping("/logout")
public String logout() {
// ...
}
@GetMapping("/signup")
public String signup() {
// ... }
@PostMapping("/signup")
public String registerUser(SignupRequestDto requestDto) {
// ...
}
}
@Controller
public class HelloController {
@GetMapping("/api/hello")
@ResponseBody
public String hello() {
return "Hello World!";
}
}
@GetMapping("/api/get")
@ResponseBody
public String get() {
return "GET Method 요청";
}
@PostMapping("/api/post")
@ResponseBody
public String post() {
return "POST Method 요청";
}
@PutMapping("/api/put")
@ResponseBody
public String put() {
return "PUT Method 요청";
}
@DeleteMapping("/api/delete")
@ResponseBody
public String delete() {
return "DELETE Method 요청";
}
@Controller
@RequestMapping("/api")
public class HelloController {
@GetMapping("/hello")
@ResponseBody
public String hello() {
return "Hello World!";
}
@GetMapping("/get")
@ResponseBody
public String get() {
return "GET Method 요청";
}
@PostMapping("/post")
@ResponseBody
public String post() {
return "POST Method 요청";
}
@PutMapping("/put")
@ResponseBody
public String put() {
return "PUT Method 요청";
}
@DeleteMapping("/delete")
@ResponseBody
public String delete() {
return "DELETE Method 요청";
}
}