오봉이와 함께하는 개발 블로그

스프링 MVC 1 - 기본 프로젝트 Hello 서블릿 본문

BE/Servlet

스프링 MVC 1 - 기본 프로젝트 Hello 서블릿

오봉봉이 2022. 8. 9. 23:14
728x90

프로젝트 생성

  • start.spring.io
    • Spring Boot : 최신
    • Gradle
    • Java 11
    • Group : hello
    • Artifact : servlet
    • Name : servlet
    • Package name : hello.servlet
    • Packaging : War
    • Dependencies
      • Spring Web
      • Lombok

Hello 서블릿

서블릿과 스프링은 상관없지만, 내장 톰캣 등 환경 설정을 위해 스프링 부트를 통해 실행하자.

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

  • 먼저 서블릿 자동 등록을 위해 스프링 부트 시작 애플리케이션 클래스에 어노테이션을 추가한다.
@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("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
    • name : 서블릿 이름
    • urlPattern : URL 매핑

요청을 통해 매핑된 URL(http://localhost:8080/hello)이 호출되면 서블릿 컨테이너는
protected void service(HttpServletRequest request, HttpServletResponse response) 을 실행한다.

http://localhost:8080/hello?username=world을 실행해보자.

웹 브라우저에는 hello world가 나오고 콘솔 결과는 다음과 같다.

HelloServlet.service
request = org.apache.catalina.connector.RequestFacade@10859c04
response = org.apache.catalina.connector.ResponseFacade@3dbfbee0
username = world

HTTP 요청 메시지 로그로 확인하기.

운영서버에 모든 요청 정보를 남기면 성능저하가 발생할 수 있기 때문에 개발 단계에서만 적용하자.

application.propertieslogging.level.org.apache.coyote.http11=debug을 추가하자.

서버를 종료후 다시 실행하여 아까와 같은 URL을 통해 다시 HTTP를 요청하면 다음과 같이 로그가 뜬다.

Host: localhost:8080
Connection: keep-alive
Cache-Control: max-age=0
sec-ch-ua: ".Not/A)Brand";v="99", "Google Chrome";v="103", "Chromium";v="103"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "macOS"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.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.9
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,ja;q=0.6
Cookie: egovLatestServerTime=1648689603645; egovExpireSessionTime=1648725603645; Idea-2b7f509a=90db7928-e8ec-4571-b5cd-927069c66a8d; JSESSIONID=24BB879E031946ECFEE44B8B06E0F84E

]

서블릿 컨테이너 동작 방식

  1. 스프링 부트를 실행하면 내장 톰캣 서버가 같이 실행된다.
  2. 톰캣 서버는 내부에 서블릿 컨테이너 기능을 가지고 있다.
  3. 서블릿 컨테이너를 통해 모든 서블릿을 생성한다.


4. URL을 입력하면 웹 브라우저가 HTTP 요청 메시지를 생성해서 서버에 요청한다.


5. HTTP 요청 메시지를 기반으로 request, response 객체를 만들어서 helloServlet을 실행한다.
6. helloServlet이 종료될 때 response 객체에 HTTP 응답 메시지를 생성해서 웹 브라우저로 넘겨준다.

welcome 페이지 추가

공부할 내용을 편리하게 참고할 수 있게 welcome 페이지를 만들자.

<!-- main/webapp/index.html -->
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body> <ul>
    <li><a href="basic.html">서블릿 basic</a></li> </ul>
</body>
</html>
<!-- main/webapp/basic.html -->
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <ul>
        <li>hello 서블릿</li>
            <ul>
                <li><a href="/hello?username=servlet">hello 서블릿 호출</a></li>
            </ul>
        <li>HttpServletRequest</li>
            <ul>
                <li><a href="/request-header">기본 사용법, Header 조회</a></li>
                <li>HTTP 요청 메시지 바디 조회</li>
                <ul>
                    <li><a href="/request-param?username=hello&age=20">GET - 쿼리 파라미터</a></li>
                    <li><a href="/basic/hello-form.html">POST - HTML Form</a></li>
                    <li>HTTP API - MessageBody -> Postman 테스트</li>
                </ul>
            </ul>
        <li>HttpServletResponse</li>
            <ul>
                <li><a href="/response-header">기본 사용법, Header 조회</a></li> <li>HTTP 응답 메시지 바디 조회</li>
                <ul>
                    <li><a href="/response-html">HTML 응답</a></li>
                    <li><a href="/response-json">HTTP API JSON 응답</a></li>
                </ul>
            </ul>
    </ul>
</body>
</html>
출처 : 인프런 김영한 지식 공유자님 강의 - 스프링 MVC 1편 백엔드 웹 개발 핵심 기술
728x90
Comments