서블릿(Servlet)은 Java를 이용해 웹 요청을 처리하는 서버측 프로그램이다.
HTTP 요청을 받아 처리하고, 응답을 반환하는 역할을 한다.
javax.servlet 패키지를 사용하여 구현서블릿은 서블릿 컨테이너(Servlet Container, WAS)에서 실행된다.
service() 메서드가 호출되어 요청을 처리한다.서블릿은 다음과 같은 생명주기를 가진다.
서블릿 객체 생성 (init())
init() 메서드가 실행되며, 한 번만 호출됨서비스 실행 (service())
service() 메서드가 실행됨doGet(), doPost() 메서드 실행서블릿 종료 (destroy())
destroy() 메서드 실행import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/hello") // URL 매핑
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
response.getWriter().println("<h1>Hello, Servlet!</h1>");
}
}
@WebServlet("/hello") : 서블릿 URL 매핑 설정.
doGet() : GET 요청 처리.
서블릿 컨테이너(WAS, Web Application Server)는 다음과 같은 역할을 수행한다.
init(), service(), destroy() 실행)대표적인 서블릿 컨테이너로는 Tomcat, Jetty, WildFly 등이 있다.
@WebFilter("/*")
public class EncodingFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
}
}
/*)을 가로채어 UTF-8 인코딩을 설정@WebListener
public class AppListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("웹 애플리케이션 시작됨");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("웹 애플리케이션 종료됨");
}
}
Spring MVC는 DispatcherServlet을 기반으로 동작하며 서블릿과 밀접한 관련이 있다.
DispatcherServlet이 요청을 받아 컨트롤러로 전달Spring을 사용하면서 서블릿을 직접 구현할 일은 많지 않지만 기본 동작 원리를 이해하는 것이 중요하다. 서블릿 컨테이너의 역할과 함께 필터 & 리스너를 활용하면 더욱 강력한 웹 애플리케이션을 만들 수 있다.