Controller 와 Servlet

송수용·2022년 6월 3일
1

웹 개발의 봄, Spring

목록 보기
21/25

Controller 와 Servlet 차이

Servlet을 사용할 경우

(1) Servlet Code

(1) Servlet Code

```java
@WebServlet(urlPatterns = "/api/search")
public class ItemSearchServlet extends HttpServlet {
	@Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
      String query = request.getParameter("query");
			
			// ...

      response.setContentType("application/json");
      response.setCharacterEncoding("UTF-8");
      PrintWriter out = response.getWriter();
      String itemDtoListJson = objectMapper.writeValueAsString(itemDtoList);
      out.print(itemDtoListJson);
      out.flush();
	}
}
```

```java
@WebServlet(urlPatterns = "/user/login")
public class UserLoginServlet extends HttpServlet {
	@Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response) {
		// ... 
	}
}
```

```java
@WebServlet(urlPatterns = "/user/logout")
public class UserLogoutServlet extends HttpServlet {
	@Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response) {
		// ... 
	}
}
```

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

}
```

Controller를 사용할 경우

    1. HTTP request, response 처리를 위해 매번 작성해 줘야하는 중복코드들 생략 가능
(2) Controller Code

```java
@Controller
public class ItemSearchController {
	@GetMapping("/api/search")
  @ResponseBody
  public List<ItemDto> getItems(@RequestParam String query) throws IOException {
			
			// ...

			return itemDtoList;
  }
}
```
    1. API 이름마다 파일을 만들 필요 없음

      [예제]

      (2) Controller Code

    • API 마다 파일을 만들 필요 없음

      • 보통 하나의 Contoller 에 모든 API 를 넣지는 않음
      • 유사한 성격의 API 를 하나의 Controller 로 관리
    • 함수 이름도 내 마음대로 설정 가능~!!! (단, 클래스 내의 중복함수명 불가)

      @Controller
      public class UserController {
      	@GetMapping("/user/login")
      	public String login() {
      	    // ...
      	}
      
        @GetMapping("/user/logout")
        public String logout() {
            // ...
        }
      
      	@GetMapping("/user/signup")
      	public String signup() { 
      		// ... 
      	}
      	
      	@PostMapping("/user/signup")
        public String registerUser(SignupRequestDto requestDto) {
      		// ... 
      	}
      }
profile
#공부중 #협업 #소통중시 #백엔드개발자 #능동적 #워커홀릭 #스파르타코딩 #항해99 #미니튜터 #Nudge #ENTJ #브레인스토밍 #아이디어뱅크

0개의 댓글