(Java) 서블릿(Servlet)이란
제로코딩
·2022. 6. 29. 00:11
✋ 서블릿(Servlet)이란
서블릿이란 동적 웹 페이지를 만들 때 사용되는 자바 기반의 웹 응용 프로그래밍 기술입니다. 즉, 자바를 사용하여 웹을 만드는 기술입니다.
웹을 구성할때는 클라이언트에서 요청을 하고 서버에서 응답을 해주어야하는데 이 역할을 대신해주는 자바 프로그램입니다. 서블릿은 웹 요청 및 응답을 대신해서 다루어줍니다.
예로 들면, 사용자가 정보를 서버에 보내게 되면, 서버는 정보를 확인하고 그에 맞는 응답 페이지를 띄우거나 전송합니다.
위 그림에서 web.xml을 기반으로 들어온 URL이 어느 서블릿에 해당하는지 매핑 분석을 시도합니다. 그 후 찾은 서블릿을 기반으로 서블릿에서 서비스를 호출한 후, 서비스에서는 doGet(), doPost()를 호출합니다. 해당 메서드에서 동적 페이지 생성 후 객체에 응답을 보냅니다.
서블릿은 웹 서버안에 웹 컨테이너에서 실행됩니다.
⚡️ 서블릿(Servlet) 특징
1.클라이언트의 요청에 의해 동적으로 작동됨
2.MVC패턴의 Controller역할 수행
⚡️ 서블릿 컨테이너
서블릿 Class의 규칙에 맞게 서블릿을 관리해주는 컨테이너
서블릿 컨테이너는 클라이언트의 요청을 받고 응답할 수 있게, 웹 서버와 통신을 합니다. (Ex. Tomcat)
📌 서블릿 컨테이너의 기능
1. 웹 서버와 통신 지원
서블릿과 웹 서버간의 통신을 도와줍니다. 웹 서버와 소켓을 만들어서 통신을 하는데 소켓을 만들고 특정 포트를 리스닝하고, 스트림 생성 및 요청을 받는 역할을 대신해줍니다. 이로 인해 개발자는 더욱 더 비즈니스 로직에 집중할 수 있게 됩니다.
2. 생명주기 관리
서블릿 컨테이너는 서블릿 클래스를 로딩해서 인스턴스화하고, 초기화 메서드를 호출하고, 요청이 들어오면 서블릿 메서드와 매핑을 하는 역할을 합니다. 그 후 서블릿이 제 기능을 다하는 순간 Garbage Collection(GC)를 통해 메모리상에서 서블릿을 제거합니다.
3. 멀티쓰레드 관리
서블릿 컨테이너는 요청이 들어올 때마다 매번 쓰레드를 새로 생성합니다. 따라서 동시에 여러 HTTP 메서드 요청이 들어올 시 동시에 작업이 가능합니다. 작업이 다 완료된 후, 쓰레드는 자동으로 소멸됩니다. 즉, 자동으로 쓰레드 생성 및 종료를 담당합니다.
4. 선언적인 보안관리
보안 관련 기능을 제공합니다. 보안이슈가 생겨 수정할 일이 생길 때 자바 소스를 직접 수정하여 컴파일 하지 않아도 됩니다.
📌 Servlet 생명 주기
클라이언트 요청이 들어오면 서블릿 컨테이너는 서블릿 인스턴스가 메모리에 존재하는지 확인합니다. 없을 시, init()메소드를 통해 쓰레드를 생성합니다. 그 후, Service()를 통해 요청과 응답을 처리해주고 destroy()메소드를 실행하여 HttpServletRequest, HttpServletResponse 객체를 소멸시킵니다.
📌 Servlet 코드
public class myServlet extends HttpServlet {
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("init method 호출!");
}
@Override
public void destroy() {
System.out.println("destroy 호출");
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
System.out.println("doGet 호출!");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
System.out.println("doPost 호출!");
}
}
init()
서블릿이 처음 요청될 때 초기화해주는 메소드.
service()
클라이언트 요청을 받고 응답을 줄 때 필요한 메소드.
destroy()
사용되지 않는 서블릿 클래스는 destroy()를 통해 제거.
'Web > Java' 카테고리의 다른 글
JDK 설치 및 Java 환경변수 설정 (0) | 2022.07.05 |
---|---|
Intellij IDEA (인텔리제이) 단축키 모음 (0) | 2022.06.29 |
스프링 POJO(Plain Old Java Object) (0) | 2022.06.29 |
Spring Framework (스프링, 스프링부트 차이에 대해) (0) | 2022.06.29 |