본문 바로가기

study/jsp, servlet ...

Servlet

스프링 이해를 위해 공부한 내용이라 다소 미흡함.

 

자바 웹 어플리케이션은 WAS에 설치되어 동작하는 자바 어플리케이션이다.

자바 웹 어플리케이션은 반드시 WEB-INF 폴더가 있어야 한다. 여기에는 web.xml 파일이 있다.

web.xml은 배포 기술자다. 서블릿 3.0 미만에선 필수고, 3.0 이상에선 필수가 아니다.

 

WEB-INF 폴더 밑에는 lib 폴더가 있고, 여기엔 각종 jar 파일들이 있다.

 

Servlet은 자바 웹 어플리케이션의 구성요소 중 동적인 처리를 하는 프로그램의 역할을 한다.

  • 서블릿은 WAS에서 동작하는 자바의 class다.
  • 서블릿은 HttpServlet 클래스를 상속받는다.

요즘은 서블릿을 직접 작성하지 않고 프레임워크를 사용하지만, 프레임워크 또한 서블릿을 사용하므로 공부해야 한다.

 

서블릿 3.0 미만에선 서블릿을 web.xml 파일에 등록한다. 클라이언트에게 요청이 들어오면 url 패턴과 서블릿 매핑을 통해 요청에 맞는 서블릿을 찾고 그것을 실행시킨다.

서블릿 3.0 이상에선 자바 어노테이션을 사용해 등록한다.

 

WAS는 서블릿 요청을 받으면 해당 서블릿이 메모리에 있는지 (위와 같은 방법으로)확인한다. 존재하지 않으면 해당 서블릿 객체를 생성해 메모리에 올린다.

 

만약 처음 요청이면 메모리에 서블릿 객체를 올린다.
1. 객체 생성 -> 생성자 호출
2. init() 메소드 호출
3. service() 메소드 호출

 

처음 요청이 아니면 있는 객체의 메소드를 호출한다.
1. service() 메소드 호출

 

서블릿은 HttpServlet 클래스를 상속받아 만들어지는데 HttpServlet은 다음의 메소드를 갖고 있다.

  • init() - Load Resources
  • service(request, response) - 템플릿 메소드 패턴으로 구현되어 있다. 
    • 클라이언트의 요청이 GET 방식일 경우에는 자신이 가지고 있는 doGet(request, response)메소드를 호출한다.
    • 클라이언트의 요청이 POST 방식일 경우에는 자신이 가지고 있는 doPost(request, response)메소드를 호출한다.
    • 같은 주소여도 요청 방식에 따라 다른 메소드가 호출된다.
    • 그래서 서블릿을 구현할 때, service() 메소드를 재정의하지 않아도, 이미 상위 클래스에 템플릿 메소드 패턴으로 구현되어 있기 때문에 doGet(), doPost() 메소드가 있으면 응답결과를 보낼 수 있다.
  • destroy() - WAS가 종료되거나, 웹 어플리케이션(서블릿)이 새롭게 갱신될 경우 실행된다.

 

WAS는 웹 브라우저로부터 Servlet 요청을 받으면,

  • 요청할 때 가지고 있는 정보를 HttpServletRequest객체를 생성해 저장한다.
  • 웹 브라우저에게 응답을 보낼 때 사용하기 위하여 HttpServletResponse객체를 생성한다
  • 생성된 HttpServletRequest, HttpServletResponse 객체를 요청 정보에 있는 path와 매핑된 서블릿에게 전달한다.

HttpServletRequest

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

HttpServletResponse

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

'study > jsp, servlet ...' 카테고리의 다른 글

표현 언어 - EL(Expession Language)  (0) 2021.03.16
scope  (0) 2021.03.09
redirect, forward + servlet, jsp  (0) 2021.03.07
JSP  (0) 2021.03.02
WAS  (0) 2021.02.24