Servlet

조한빈·2020년 10월 9일
4

Java_BackEnd

목록 보기
2/4

[ About Servlet..]

Servlet이란?

  • WebProgramming에서 Client의 요청을 처리
  • 그 결과를 다시 Client에게 전송하는 자바 프로그래밍 기술
  • Servlet 클래스의 구현 규칙을 따른다.
  • javax.servlet package에 정의된 인터페이스
  • 서블릿의 라이프 사이클 을 위한 세 가지 필수적인 메소드를 정의
    • init()
    • service()
    • destroy()

이 세 가지 메소드들은 모든 서블릿(SDK에서 정의되거나, 자체적으로 정의된)에 의해 구현되고, 특정 시간에 서버에 의해 호출됩니다.

* inin()

  • 서블릿 생명 주기 중 초기화 단계 에 호출된다.
  • javax.servlet.ServletConfig 인터페이스를 구현하는 오브젝트가 전달된다.
  • 이를 통해 서블릿이 웹 애플리케이션에서 초기화 매개변수(parameter)에 접근할 수 있도록 한다.

* service()

  • 초기화 이후 각각의 요청들 이 들어오면 호출된다.
  • 각각의 요청들은 별도로 나누어진 스레드에서 처리된다.
  • 웹 컨테이너는 모든 요청에 대해 서블릿의 service() 메소드를 요청한다.
  • service() 메소드는 요청의 종류를 판별하고 요청을 처리할 적절한 메소드로 전달합니다.

* destroy()

  • 서블릿 객체가 파괴되어야 할 때 호출된다.
  • 해당 서블릿이 가지고 있던 자원을 release 해줍니다.
  • 서블릿 객체의 생명 주기 에서 서블릿 클래스가 클래스 로더에 의해 컨테이너에 동적으로 로드된다
  • 각 요청은 자체적인 스레드에 있으며, 서블릿 객체는 동시에 여러개의 스레드를 제공할 수 있다
    • thread not safe
      : 코드가 다른 스레드에 의해 상태가 변경될 수 있음
  • 더이상 사용되지 않을 때에는, JVM에 의해 Garbage Collecting 되어야 합니다

Servlet이 해야하는 일

  • HTTP 요청(request)을 받아서 처리.
  • 요청에 대한 응답(response)

Servlet의 특징

  1. Client의 요청에 동적으로 작동
  2. Java Thread를 이용해 동작
  3. HTML 변경 시 재컴파일 필요
  4. Java 코드에 HTML이 들어가있음
  5. HTML을 사용해서 요청에 응답

Servlet 생성 방법

  1. @WebServlet
    • 해당 서블릿과 매핑될 url 지정
  2. HttpServlet 클래스 상속
@WebServlet("/Main.do")
public class MainServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//GET 방식으로 요청 받았을 떄 처리할 내용
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//POST 방식으로 요청 받았을 떄 처리할 내용
	}
}

[ Servlet 동작 방식 ]

  1. 사용자(클라이언트)가 URL을 클릭하면 HTTP Request를 Servlet Container로 전송합니다.
  2. HTTP Request를 전송받은 Servlet Container는 HttpServletRequest, HttpServletResponse 두 객체를 생성합니다.
  3. web.xml은 사용자가 요청한 URL을 분석하여 어느 서블릿에 대해 요청을 한 것인지 찾습니다.
  4. 해당 서블릿에서 service메소드를 호출한 후 클리아언트의 POST, GET여부에 따라 doGet() 또는 doPost()를 호출합니다.
  5. doGet() or doPost() 메소드는 동적 페이지를 생성한 후 HttpServletResponse객체에 응답을 보냅니다.
  6. 응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킵니다.

Servlet Container가 궁금하시다면 CLICK!!

4개의 댓글

comment-user-thumbnail
2022년 7월 27일

좋은 글 감사합니다!

답글 달기
comment-user-thumbnail
2022년 9월 9일

잘봤습니다 감사합니다.

답글 달기
comment-user-thumbnail
2023년 2월 17일

동작방식 그림으로 보니까 이해하기 정말 쉽네요!
잘 보고 갑니다!

답글 달기
comment-user-thumbnail
2023년 7월 24일

servlet inin은 오타인가요??

답글 달기