ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Controller 이해하기
    spring/스프링 입문 주차 2024. 1. 17. 19:28
    로그인 페이지 GET /user/login login 페이지
    로그아웃 처리 GET /user/logout "/" 으로 redirect
    회원 가입 페이지 GET /user/signup signup 페이지
    회원 가입 처리 POST /user/signup "/" 으로 redirect


    만약에 우리가 Servlet객체를 만들어서 위 API를 만들어야 한다면, 이렇게 코드를 짤 수 있다.

     

    (1) Servlet Code

    @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) {
    		// ... 
    	}
    
    }

     

    (2) Controller Code
    - 다행히 Spring MVC는 효율적인 API 처리를 위해 Front Controller 패턴을 만들어냈다.
    - 이제는 API 마다 파일을 만들 필요가 없다.
     - 보통 하나의 Controller 에 모든 API를 넣지는 않는다.
     - 유사한 성격의 API 를 하나의 Controller 로 관리한다.
    - 메서드 이름도 내 마음대로 설정 가능하다. (단, 클래스 내의 중복 메서드명 불가)

    @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!";
        }
    }

    - @Controller는 해당 클래스가 Controller의 역할을 수행할 수 있도록 등록해줄 수 있다.

     


     

     

    @GET, @POST, @PUT, @DELETE : 각각의 HTTP Method에 매핑되는 애너테이션이다.


    - @GET

    @GetMapping("/api/get")
    @ResponseBody
    public String get() {
        return "GET Method 요청";
    }

     

    - @POST

    @PostMapping("/api/post")
    @ResponseBody
    public String post() {
        return "POST Method 요청";
    }


    - @PUT

    @PutMapping("/api/put")
    @ResponseBody
    public String put() {
        return "PUT Method 요청";
    }


    - @DELETE

    @DeleteMapping("/api/delete")
    @ResponseBody
    public String delete() {
        return "DELETE Method 요청";
    }

     

     

    @RequestMapping은 중복되는 URL를 단축시켜줄 수 있다.

    @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 요청";
        }
    }

     

Designed by Tistory.