[spring mvc] 서블릿 개념

JESS YANG·2021년 9월 15일
0

Spring MVC

목록 보기
1/1

서블릿이란?

"자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말하며, 흔히 '서블릿'이라 불린다." - 위키피디아

"클라이언트 요청을 처리하고 그 결과를 다시 클라이언트에게 전송하는 Servlet 클래스의 구현 규칙을 지킨 자바 프로그램" (클라이언트의 HTTP 요청에 대해 특정 기능을 수행, HTML문서를 생성등의 응답을 하는 인터넷 서버 프로그램)" - https://jusungpark.tistory.com/15 [정리정리정리]

특징

  • 한 요청을 처리 할때마다 스레드를 만들어서 처리
  • 플랫폼, OS 독립적
  • 보안성
  • 이식성

서블릿 컨테이너

서블릿 컨테이너는 서블릿의 생명주기를 관리하고, URL과 특정 서블릿을 맵핑하며 URL 요청이 올바른 접근 권한을 갖도록 보장한다.
이 외에도 다음과 같은 역할을 한다.

  • 세션관리
  • 네트워크 서비스 관리
  • MIME 기반 메시지 인코딩/디코딩
  • 멀티스레딩 관리

서블릿 생명주기

(출처 : https://milancode.tistory.com/19)

init() : 서블릿 컨테이너가 서블릿 인스턴스의 init() 메소드를 호출하여 초기화 한다. 최초 요청을 받았을 때 한번 초기화 하고 나면 그 다음 요청부터는 이 과정을 생략한다. 서블릿이 초기화 된 다음부터 클라이언트의 요청을 처리할 수 있다. 각 요청은 별도의 쓰레드로 처리하고 이때 서블릿 인스턴스의 service() 메소드를 호출한다.

service() : Http 요청을 받고 Client로 보낼 http 응답을 만든다. http method에 따라 doGet(), doPost() 등으로 처리를 위임한다.
destroy() : 서블릿 컨테이너 판단에 따라 해당 서블릿을 메모리에서 내려야 할 시점에 destroy()를 호출 한다.

서블릿 구현

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServlet extends HttpServlet{
	
	@Override
	public void init() throws ServletException {
		// TODO Auto-generated method stub
		System.out.println("init!");
	}
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("doGet!");
		resp.getWriter().write("Hello Servlet");
	}
	
	@Override
	public void destroy() {
		System.out.println("destroy!");
	}
}

서블릿 등록

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>ServletTestProj</display-name>
  <servlet>
  	<servlet-name>hello</servlet-name>
  	<servlet-class>HelloServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>hello</servlet-name>
  	<url-pattern>/hello</url-pattern>
  </servlet-mapping>
</web-app>

모든 서블릿을 web.xml에 등록해줘야 하는 단점이 있다.
spring에서는 front controller 역할을 하는 dispacher servlet을 제공해줘서 하나의 서블릿만 등록해주면 모든 요청을 핸들링 하여 요청에 맞는 Controller로 보내준다.

0개의 댓글