본문 바로가기
Back-end/Spring MVC 개념

3. Servlet - 기본 사용 방법

by devraphy 2022. 2. 24.

0. 개요

- 이번 포스팅에서는 Servlet의 기본적인 사용법과 동작 원리에 대해서 알아보자.


1. 기본적인 Servlet 사용 및 등록방법 

a) @ServletComponentScan

- main() 메서드가 존재하는 클래스 또는 최상위 경로의 클래스에 부착하는 어노테이션이다.

- @ComponentScan과 동일하게 하위 경로에 존재하는 모든 클래스를 Scan 한다.

@ServletComponentScan // Servlet 자동등록
@SpringBootApplication
public class ServletApplication {

	public static void main(String[] args) {
		SpringApplication.run(ServletApplication.class, args);
	}

}

b) @WebServlet, HttpServlet, Service() 메서드

@WebServlet(name = "사용할 Servlet 객체명", urlPatterns = "매핑할 url주소")
public class HelloServlet extends HttpServlet{

   @Override // servlet이 호출되면 service 메소드가 호출된다.
   protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // 비즈니스 로직을 작성한다.
   }
}

- Servlet을 사용하려면 클래스에 @WebServlet을 부착해야 한다.

- 이는 ServletComponentScan의 대상이라는 것을 명시하는 것이다. 

 

- Servlet Container에 등록된 Servlet 객체가 호출되면 service 메서드가 자동으로 호출된다.

- Service() 메서드를 오버라이드하기 위해서는 반드시 HttpServlet을 상속받아야 한다. 

 

- Servlet 객체가 생성되는 클래스에서는 반드시 service 메서드를 오버라이드 하여 작성한다. 

- service 메서드에는 response의 결과물을 생성하는 비즈니스 로직을 실행하는 코드가 작성된다. 

 

- 일반적으로 Servlet 객체명은 클래스명과 동일하게 사용한다.

- 다만, 첫번째 글자를 소문자로 변경하여 등록한다.  ex) HelloServlet → helloServlet

c) HttpServletRequest, HttpServletResponse

- 위의 예시 코드에서 service 메서드의 매개변수를 확인해보자. 

- HttpServletRequest는 client로부터 전달받은 HTTP request 메시지의 내용을 객체로 만들어준다. 

- HttpServletResponse는 service() 메서드에서 수행한 비즈니스 로직의 결과물을 담을 객체를 만들어준다. 


2. Servlet의 동작원리 

1. SpringBoot를 실행하면 내장된 Tomcat 서버(WAS)가 실행된다.

2. Tomat 서버가 실행되면 ServletComponentScan이 동작하면서 Servlet Container에 Servlet객체를 등록한다.

3. client로부터 HTTP Request가 들어오면 WAS에서 이를 HttpServletRequest 객체로 만들어 Servlet객체에게 전달한다.

4. Servlet 객체는 Service() 메서드를 호출하고, 비즈니스 로직을 수행한다. 

5. Service() 메서드에서 수행한 비즈니스 로직의 결과물은 HttpServletResponse의 객체에 담아 client에게 전달한다. 

a) HttpServletRequest의 역할

- HTTP Request를 객체 형태의 데이터로 parsing 하는 작업을 수행한다. 

- 개발자는 request 객체를 가져다 편리하게 사용하면 된다. 

- 개발자는 parsing을 신경 쓰지 않아도 된다. 

b) HttpServletRequest의 부가기능

- Request 객체가 살아있는 동안, request 객체 내부의 임시저장소를 사용할 수 있다. 

- request 객체를 사용하여 다음과 같이 데이터를 저장 및 조회할 수 있다. 

@WebServlet(name = "객체명", urlPatterns = "url 주소")
public class HelloServlet extends HttpServlet{

   @Override
   protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      // 1. request 객체의 임시저장소에 데이터를 저장
      request.setAttribute(name, value);
      
      // 2. request 객체의 임시저장소에 있는 데이터를 조회 
      request.getAttribute(name);
   }
}

 

- Servlet이 제공하는 request, response 객체의 목적은 HTTP message 사용의 편리화다.

- 그러므로 반드시 기본적인 HTTP에 대한 이해도를 갖추기를 바란다. 

'Back-end > Spring MVC 개념' 카테고리의 다른 글

5. JSP의 등장  (0) 2022.02.28
4. Servlet - 요청/응답 처리방법  (0) 2022.02.25
2. Servlet의 등장  (0) 2022.02.23
1. Java 웹 기술의 역사  (0) 2022.02.22
0. Web 서비스의 구조  (0) 2022.02.21

댓글