본문 바로가기
Spring/스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

서블릿 등록해서 사용하기

by hk27 2022. 1. 18.
서블릿을 등록해서 사용해보신 적 있나요?

 

안녕하세요. 

웹을 만들 때, 보통 서블릿을 직접 등록해서 사용하지는 않습니다.

오늘은 서블릿 클래스를 직접 만들어서 사용해보겠습니다. 

 

스프링 부트 환경에서 서블릿을 등록하고 사용할 것입니다. 스프링 부트는 톰캣 서버가 내장되어 있어서 편리하게 서블릿 코드를 실행할 수 있습니다.

 

@ServletComponentScan

스프링 부트에서 서블릿을 직접 등록해서 사용하려면 @ServletComponentScan 어노테이션을 추가해야 합니다.

기본 메인 클래스에 추가합니다.

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

 

서블릿 등록하기

실제 동작하는 서블릿 코드를 등록해봅시다. 

@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("HelloServlet.service");
        System.out.println("request = " + request);
        System.out.println("response = " + response);

        String username = request.getParameter("username");
        System.out.println("username = " + username);

        response.setContentType("text/plain");
        response.setCharacterEncoding("utf-8");
        response.getWriter().write("hello "+username);
    }
}

@WebServlet 어노테이션을 달면 WAS는 서블릿인 것을 인지하고, 등록합니다. 

서블릿의 name을 지정할 수도 있고, 지정하지 않으면 클래스의 이름이 name이 됩니다.

urlPatterns는 어떤 URL이 들어오면 이 서블릿이 수행될 것인지를 나타냅니다.

여기서 만든 HelloServlet은 /hello가 들어오면 수행될 것입니다.

 

서블릿 클래스는 HttpServlet을 상속받아서 service 메소드를 오버라이드 합니다.

HTTP 요청을 통해서 매핑된 URL이 호출되면 서블릿 컨테이너가 service 메소드를 수행합니다.

 

service 메소드에서는 HttpServletRequest 객체와 HttpServletResponse 객체를 사용할 수 있습니다.

위의 코드에서는 request 객체로 파라미터를 받아오고, response 객체로 데이터를 전송하였습니다.

 

서버를 띄우고 아래 웹 사이트에 들어가 보면 수행되는 것을 확인할 수 있습니다.

http://localhost:8080/hello?username=world

 

hello world가 잘 출력됩니다.

 

로그를 확인해봅시다.

HelloServlet.service
request = org.apache.catalina.connector.RequestFacade@632a358c
response = org.apache.catalina.connector.ResponseFacade@2a0b38e
username = world

request, response 객체가 잘 생성되었고, 파라미터가 잘 받아진 것을 확인할 수 있습니다. 

 

서블릿 컨테이너 동작 방식 설명

서블릿은 어떻게 등록되고 사용되는 것일까요?

 

내장 톰캣 서버 생성

먼저 스프링 부트가 내장 톰캣 서버를 생성합니다.

내장 톰캣 서버가 @WebServlet 어노테이션을 보고 서블릿 객체를 서블릿 컨테이너에 생성합니다.

 

웹 애플리케이션 서버의 요청 응답 구조

WAS는 웹 브라우저에서 요청이 오면, request, response 객체를 만듭니다. 

서블릿은 HTTP 요청 메시지를 파싱해서 request 객체에 담아줍니다.

이 request를 사용해 service 메소드에서 작업을 수행합니다. 

 

다음 글에서는 request를 조회해서 HTTP 요청 메시지 정보를 받는 방법을 알아보겠습니다.

 

인프런  '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술' 강의를 듣고 공부하며 정리한 자료입니다. 

잘못된 부분은 피드백 주시면 감사하겠습니다. 

글 읽어주셔서 감사합니다 :-)

 

참고자료

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술, 섹션 2. 서블릿 https://www.inflearn.com/course/스프링-mvc-1

 

 

 

 

댓글