[스프링 웹 MVC] 서블릿 애플리케이션 개발

2022. 3. 16. 00:24JAVA/Spring Framework

728x90
반응형
SMALL

본격적인 스프링 MVC 동작 원리를 이해하기 위해 서블릿에 대해 알아보고자 합니다.

 

서블릿 (Servlet)이란 HttpServlet을 상속 받아 자바를 사용하여 웹 페이지를 동적으로 생성하는 서버 프로그램입니다.

 

 

Servlet 특징

  • 클라이언트의 Request에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트
  • HTML을 사용하여 Response
  • JAVA의 쓰레드를 이용하여 동작
  • MVC 패턴에서의 Controller로 이용됨
  • HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속
  • UDP보다 속도가 느림
  • HTML 변경 시 Servlet을 재컴파일해야 하는 단점

 

Servlet 생명주기

  • 요청이 오면, Servlet 클래스가 로딩되어 요청에 대한 Servlet 객체가 생성됩니다.
  • 서버는 init() 메소드를 호출해서 Servlet을  초기화 합니다.
  • service() 메소드를 호출해서 Servlet이 브라우저의 요청을 처리하도록 합니다.
  • service() 메소드는 특정 HTTP 요청(GET, POST 등)을 처리하는 메서드 (doGet(), doPost() 등)를 호출합니다.
  • 서버는 destroy() 메소드를 호출하여 Servlet을 제거합니다.

 

 

이제 서블릿 애플리케이션을 만들어 볼까요?!

 

 

File - New - Project... 경로를 통해 New Project 레이어를 열어줍니다.

 

Maven을 클릭하고 Create from archetype을 체크해주고,

maven-archetype-webapp 을 클릭하여 simple Java web application을 생성해주겠습니다.

 

이후에 프로젝트 명명은 적당한 것으로 해주세요!

 

 

그리고 pom.xml에 servlet 디펜던시를 추가해주도록 하겠습니다.

pom.xml

 

이 dependency는 아래 링크에서 복사해올 수 있습니다.

 

 

https://mvnrepository.com/

 

java servlet을 검색해서 최신 버전을 복사해서 pom.xml에 추가해줍니다.

 

 

 

 

 

우선 최종적인 프로젝트 구조가 이렇게 될 건데요!

src/main 아래에 "java"라는 이름의 디렉토리를 추가해주세요.

 

 

그리고 File - Project Structure - Modules 를 통해 java 디렉토리를 소스 폴더로 지정해줍니다.

 

 


서블릿을 실행시켜줄 서버가 필요한데, 톰캣을 설치해보도록 하겠습니다.

 

https://tomcat.apache.org/download-90.cgi

 

Apache Tomcat® - Apache Tomcat 9 Software Downloads

Welcome to the Apache Tomcat® 9.x software download page. This page provides download links for obtaining the latest version of Tomcat 9.0.x software, as well as links to the archives of older releases. Unsure which version you need? Specification version

tomcat.apache.org

 

 

그냥 zip 파일을 다운 받으셔도 되고, window 사용자라면 운영체제 버전에 맞는 압축 파일을 다운 받아서 

적당한 위치에 압축을 풀어주세요!

 

 


이제 톰캣을 설정해주겠습니다!

 

Add Configuration > + 버튼 > Tomcat Server > Local

 

그리고 아까 압축 풀어두었던 톰캣 경로를 지정해줍니다.

 


 

 

Deployment 탭에서 Artifact를 war exploded로 추가해주고,

서버 실행 시 url이 지저분해지는 것을 막기 위해 Application context를 / 로 지정해주겠습니다.

 

 

 

HelloServlet.java

package com.example;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class HelloServlet extends HttpServlet {

    @Override
    public void init() throws ServletException {
        System.out.println("init");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doGet");
        resp.getWriter().println("<html>");
        resp.getWriter().println("<head>");
        resp.getWriter().println("<body>");
        resp.getWriter().println("<h1>Hello Servlet</h1>");
        resp.getWriter().println("</body>");
        resp.getWriter().println("</head>");
        resp.getWriter().println("</html>");
    }

    @Override
    public void destroy() {
        System.out.println("destroy");
    }
}

 

web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  
  <servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>com.example.HelloServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>
</web-app>

 

 


 

 

이제 다 되었습니다!!!!!! 🤓

톰캣을 실행해 볼까요?

 

 

 

처음 실행되었을 때 init (/) 과 doGet (/hello)이 호출되었습니다.

 

/hello를 여러번 호출 시킨 뒤, 서버를 종료시켜볼게요.

 

 

서블릿 생명주기에 따라 한 번 생성되면 init은 다시 호출되지 않습니다.

doGet만 여러 번 호출된 것을 확인할 수 있습니다.

 

그리고 마지막에 서버가 종료되며 서블릿도 destroy 되네요 😎

728x90
반응형
LIST

'JAVA > Spring Framework' 카테고리의 다른 글