본문 바로가기
Backend/Spring | SpringBoot

[Servlet] Hello 서블릿

by 2245 2023. 8. 17.

목차

     

    서론

    첫 서블릿을 만들어봅시다. 

    서블릿을 실행하기 위해서는

    1. 톰캣과 같은 WAS를 직접 설치
    2. WAS에 서블릿 코드를 클래스 파일로 빌드한 후 업로드
    3. 톰캣 서버 실행

    과정을 거쳐야 합니다. 이 과정은 너무 번거롭고 불필요합니다.

    스프링 부트는 톰캣 서버를 내장하고 있으므로 톰캣 서버의 설치없이 서블릿 코드를 실행할 수 있습니다. 따라서 현재 예제에서는 스프링 부트를 사용하여 구현합니다. 

     

     

    스프링 부트 서블릿 환경 구성

    @ServletComponentScan

    스프링 부트는 서블릿을 직접 등록해서 사용할 수 있도록 @ServletComponentScan 어노테이션을 지원합니다.

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

     

    서블릿 등록하기

    처음으로 실제 동작하는 서블릿 코드를 작성해봅시다.

    hello.servlet.basic.HelloServlet

    @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("reqeust = " + request);
            System.out.println("response = " + response);
    
        	//요청
            String username = request.getParameter("username");
            System.out.println("useranme = " + username);
    
        	//응답
            response.setContentType("text/plain");   //헤더
            response.setCharacterEncoding("utf-8");  //헤더
            response.getWriter().write("hello " + username);  //바디
        }
    }
    • @WebServlet
      • name은 서블릿의 이름을 나타냅니다.
      • urlPatterns는 URL 매핑을 의미합니다. HTTP 요청을 통해 매핑된 URL이 호출되면 서블릿 컨테이너는 다음 메서드를 실행합니다.

    protected void service(HttpServletRequest request, HttpServletResponse response)

     

    실행

    http://localhost:8080/hello?username=주희

    출력 

    HelloServlet.service
    reqeust = org.apache.catalina.connector.RequestFacade@2619651b
    response = org.apache.catalina.connector.ResponseFacade@5166a599
    useranme = 주희

     

     

     

    서블릿 컨테이너 동작 방식

    1. 내장 톰캣 서버 생성
    2. 톰캣 서버는 서블릿 컨테이너를 가지고 있습니다. 
    3. 서블릿 컨테이너를 통해 서블릿을 생성하고 관리합니다. 

     

     

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

    WAS가 request와 response 객체를 만들어줍니다. 

     

    참고
    HTTP 응답의 Content-Length 헤더는 WAS가 자동으로 생성해줍니다. 

     

     

    HTTP 요청, HTTP 응답 메시지

     

     

    참고) HTTP 요청을 메시지 로그로 확인하기

    다음 설정을 추가합니다.

    application.properties

    logging.level.org.apache.coyote.http11=debug

     

    서버를 다시 시작한 후, 요청을 보내면 서버가 받은 HTTP 요청 메시지를 출력하는 것을 확인할 수 있습니다.

    Host: localhost:8080
    Connection: keep-alive
    Cache-Control: max-age=0
    sec-ch-ua: "Not/A)Brand";v="99", "Google Chrome";v="115", "Chromium";v="115"
    sec-ch-ua-mobile: ?0
    sec-ch-ua-platform: "Windows"
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
    Sec-Fetch-Site: none
    Sec-Fetch-Mode: navigate
    Sec-Fetch-User: ?1
    Sec-Fetch-Dest: document
    Accept-Encoding: gzip, deflate, br
    Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
    
    ]
    HelloServlet.service
    reqeust = org.apache.catalina.connector.RequestFacade@625623c0
    response = org.apache.catalina.connector.ResponseFacade@12ce4ca8
    useranme = 주희

     

    참고
    운영 서버에 이렇게 모든 요청 정보를 다 남기면 성능 저하가 발생할 수 있으므로, 개발 단계에서만 적용합시다. 

     

     

     

    다음 글에서 Servlet이 제공하는 HttpServletRequest와 HttpServletResponse에 대해 알아보도록 하겠습니다.

    https://wngml56.tistory.com/236

     

    HttpServletRequest, HttpServletResponse, Http 요청/응답 데이터

    서론 Servlet이 제공하는 HttpServletRequest와 HttpServletResonse에 대해 알아봅시다. 본론 HttpServletRequest HttpServletRequest의 역할 HTTP 요청 메시지는 텍스트 형태로 되어 있습니다. 이를 개발자가 직접 파싱해

    wngml56.tistory.com

     

     


    출처

    https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard

     

    스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

    웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원

    www.inflearn.com