• Home
  • About
    • Jiwon Jeong photo

      Jiwon Jeong

      끊임없이 배우며 성장하는 엔지니어

    • Learn More
    • Email
    • Github
  • Posts
    • All Posts
    • All Tags
    • All Categories
  • Projects

Servlet

18 Apr 2021

Reading time ~2 minutes

자바 웹 어플리케이션 정의

  • WAS에 설치(deploy)되어 동작하는 어플리케이션 (웹 어플리케이션 : e.g) 쇼핑몰, 카페, 블로그…)
  • HTML, CSS, 이미지, 자바로 작성된 클래스(Servlet도 포함됨, package, 인터페이스 등), 각종 설정 파일 등이 포함

Servlet

  • 자바 웹 어플리케이션의 구성요소 중 동적인 처리를 하는 프로그램의 역할
  • WAS에서 동작하는 Java Class

Servlet Container (중요!!)

  • 컨테이너는 인스턴스의 생명주기를 관리하며, 생성된 인스턴스에게 추가적인 기능을 제공
  • Servlet을 실행해주는 WAS는 Servlet 컨테이너를 가지고 있음
  • WAS는 웹 브라우저로부터 서블릿 URL에 해당하는 요청을 받으면, 서블릿을 메모리에 올린 후 실행
    • WAS가 과자를 만드는 공장이라고 가정
    • Servlet은 고객이 요청한 과자 명세
    • Serlvet Container는 과자 명세를 보고 작업을 진행하는 로봇
  • 개발자가 서블릿 클래스를 작성했지만, 실제로 메모리에 올리고 실행하는 것은 WAS가 가지고 있는 Servlet 컨테이너임
  • Servlet컨테이너는 동일한 서블릿에 해당하는 요청을 받으면, 또 메모리에 올리지 않고 기존에 메모리에 올라간 서블릿을 실행하여 그 결과를 웹 브라우저에게 전달
  • 컨테이너는 보통 인스턴스의 생명주기를 관리하며, 생성된 인스턴스들에게 추가적인 기능을 제공하는 것

Servlet 생명주기

@WebServlet("/LifecycleServlet")
public class LifecycleServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
 
    public LifecycleServlet() {
        System.out.println("LifecycleServlet 생성!!");
    }

	public void init(ServletConfig config) throws ServletException {
		System.out.println("init test 호출!!");
	}

	
	public void destroy() {
		System.out.println("destroy 호출!!");
	}

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
       {
		System.out.println("service호출!!");		
	}
	
}
​
  1. localhost:8080/example/LifecycleServlet 요청
  2. Web.xml or Annotation에 localhost:8080/example/LifecycleServlet URL Mapping이 존재하는지 체크
  3. LifecycleServlet 서블릿 클래스가 메모리에 존재? => 없으면 생성자 호출하여 객체 생성
  4. init, service 메소드 호출
  5. 다시 새로고침 또는 다른브라우저에 요청하면 service 메소드만 호출됨

서버는서블릿 객체를 여러개 만들지 않는다!!

  1. 서블릿.java 클래스를 새로 수정한다면 기존거는 destroy되고 다시 생명주기가 반복됨

doGet, doPost

get, post 방식으로 서버에 요청시,

service 메소드가 호출

되면서

자신의 doGet, doPost 메소드가 호출

됨

  • HttpServlet의 doGet(request, response)메소드, doPost(request, response)메소드 오버라이딩

Request, Response 객체 이해

HttpServletRequest

  • http프로토콜의 request정보를 서블릿에게 전달하기 위한 목적으로 사용합니다.
  • 헤더정보, 파라미터, 쿠키, URI, URL 등의 정보를 읽어 들이는 메소드를 가지고 있습니다.
  • Body의 Stream을 읽어 들이는 메소드를 가지고 있습니다.

HttpServletResponse

  • WAS는 어떤 클라이언트가 요청을 보냈는지 알고 있고, 해당 클라이언트에게 응답을 보내기 위한 HttpServleResponse객체를 생성하여 서블릿에게 전달합니다.
  • 서블릿은 해당 객체를 이용하여 content type, 응답코드, 응답 메시지등을 전송합니다.


WebProgrammingservletjsptomcat Share Tweet +1