Skip to content

지찬우 5주차 학습 정리

지찬우 edited this page Aug 5, 2024 · 1 revision

Java Servlet과 JSP, 그리고 Tomcat

프로젝트 환경

  • JDK 17
  • Gradle 8.5

프로젝트 설정

의존성 추가

dependencies {
    ...
    compileOnly 'jakarta.servlet:jakarta.servlet-api:6.1.0'
}

Tomcat

환경 변수

  • $CATALINA_HOME: 톰캣의 특정 인스턴스 디렉토리
  • $CATALINA_BASE: 따로 설정하지 않으면 $CATALINA_HOME와 동일

웹 애플리케이션은 $CATALINA_HOME/webapps에 배포

용어

  • Document root: JSP 파일, HTML 파일, Java 클래스 및 이미지와 같은 모든 애플리케이션 리소스가 있는 웹 애플리케이션의 최상위 디렉토리
  • Context path: 서버 주소와 관련된 위치를 나타내며 웹 애플리케이션의 이름을 나타냄
  • WAR: web archive의 약어로, 웹 애플리케이션 디렉토리 계층 구조를 ZIP 형식으로 패키징하는 파일의 확장자
    • WAR 파일을 배포한 후 Tomcat은 파일 압축을 풀어 webapps 디렉토리의 모든 프로젝트 파일을 프로젝트 이름을 딴 새로운 디렉토리에 저장

Tomcat 설정

Apache Tomcat 다운로드 - https://tomcat.apache.org/

실행

#CATALINA_HOME/bin/startup에 있는 시작 스크립트 실행만으로 Tomcat 서버 시작

Windows는 startup.bat, Unix 기반 OS는 startup.sh

디렉토리 권한 설정

Tomcat 설치 디렉토리에 read/write 권한 확인하기

테스트 설치

startup.sh를 실행하고 http://localhost:8080으로 접속하였을 때 Tomcat 랜딩 페이지가 보인다면 성공!

Servlet 생명주기

init()

init() 메서드는 한 번만 호출

servlet 인스턴스가 존재하지 않으면 웹 컨테이너는 아래의 단계를 수행

  1. servlet 클래스 로드
  2. servlet 클래스의 인스턴스 생성
  3. init() 메서드를 호출해 초기화

init() 메서드가 ServletException을 던지거나 웹 서버에 설정한 시간 이내에 반환하지 않으면 서블릿 컨테이너는 서블릿을 서비스에 배치할 수 없다.

void init(ServletConfig config) throws ServletException;

service()

init() 메서드가 성공적으로 완료된 후에만 호출

컨테이너는 HTTP 요청을 처리하기 위해 service() 메서드를 호출하고 HTTP 메서드(GET, POST, PUT, DELETE 등)를 확인해 doGet(), doPost(), doPut(), doDelete() 등의 메서드를 적절히 호출

void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;

destroy()

서블릿 서비스를 중단하기 위해 서블릿 컨테이너에 의해 호출

서블릿의 서비스 메서드 내 모든 스레드가 종료되거나 timeout된 후에만 호출. 컨테이너가 destroy()를 호출한 후에는 서블릿에서 service() 메서드를 다시 호출하지 않음

void destroy();

배포하기

  1. ./gradlew build 커맨드로 war 파일 빌드
  2. 빌드된 war 파일을 $CATALINA_HOME/webapps로 이동
  3. 컨텍스트 루트를 xxx-1.0-SNAPSHOT에서 /로 변경
    1. $CATALINA_HOME/conf/server.xml의 HOST 태그 아래에 추가

      <Context path="/" docBase="xxx-1.0-SNAPSHOT"></Context>
    2. 재시작


references

https://www.baeldung.com/intro-to-servlets

https://www.baeldung.com/tomcat-deploy-war

👼 개인 활동을 기록합시다.

개인 활동 페이지

🧑‍🧑‍🧒‍🧒 그룹 활동을 기록합시다.

그룹 활동 페이지

🎤 미니 세미나

미니 세미나

🤔 기술 블로그 활동

기술 블로그 활동

📚 도서를 추천해주세요

추천 도서 목록

🎸 기타

기타 유용한 학습 링크

Clone this wiki locally