서블릿(Servlet)


1. 애플릿(Applet)

  • 웹 브라우저에서 실행되는 자바 응용프로그램으로 서버에서 클라이언트 쪽으로 실행 파일을 내려받아서 실행되는 방식
  • 현재는 HTML5, CSS3, JavaScript 등의 기술들의 발전으로 애플릿을 사용하고 있지 않음

 

2. 서블릿

  • Server Side Applet으로 자바 언어로 구현되는 서버 프로그램
  • 서블릿은 웹 브라우저로부터 요청을 받아 처리하고 결과를 다시 웹 브라우저로 전송하는 역할
  • 일반적인 자바 클래스와 다르게 javax.servlet.http.HttpServlet 클래스를 상속해야 함
  • HttpServlet 클래스는 서블릿이 웹상에서 HTTP 프로토콜을 이용해 서비스를 처리하기 위해 반드시 상속해야 하는 클래스
public class 클래스명 extends HttpServlet {
  ...
}

 

3.서블릿 메소드

3.1. doGet()

  • 클라이언트에서 GET 방식으로 요청이 전송될 경우 호출되는 메소드
    • 데이터를 요청할 때, url(Query String)에 포함해서 보내는 방식
    • head에 데이터를 포함
    • 보안적으로 취약하며, 길이의 제한이 있음
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
  // GET 요청에 응답할 로직을 구현
}

3.2. doPost()

  • 클라이언트에서 POST 방식으로 요청이 전송될 경우 호출되는 메소드
    • 데이터를 요청할 때, body에 포함해서 보내는 방식
    • 데이터가 url에 보이지 않기 때문에 보안에 취약하지 않
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
  // POST 요청에 응답할 로직을 구현
}

 

4. 요청 객체와 응답 객체

4.1. HttpServletRequest

  • 클라이언트(웹 브라우저)에서 서버에 보내는 요청 정보를 제공하는 객체
  • javax.servlet.ServletRequest를 상속
  • 주요 메소드

4.2 HttpServletResponse

  • 서버가 클라이언트(웹 브라우저)로 보내는 응답 정보를 처리하는 객체이다.
  • javax.servlet.ServletResponse를 상속한다.
  • 주요 메소드

 

5. 서블릿 동작 구조

  • 클라이언트가 웹 브라우저를 통해 요청을 보냄
  • 해당 요청이 서블릿에 대한 요청이면 서블릿 컨테이너에게 처리를 넘김
  • 서블릿에서 요청에 대한 실행이 완료된 후에는 서블릿 컨테이너가 실행 결과를 웹서버에 전달
  • 웹서버는 서비스를 요청한 클라이언트에 응답
  • 컨테이너의 서블릿에 대한 설정은 배표 서술자(web.xml)에 작성
  • 정적인 요소는 Web Server에서 처리하고 동적인 요소는 WAS에서 처리하는 것이 일반

 

6. 서블릿 생명주기

  • 첫 번째 요청일 경우, 서블릿 객체를 생성하고 init() 메소드를 호출
    • 이후 요청에 대해서는 서블릿 객체 생성, init()메소드는 호출하지 않음
  • 다음에 service() 메소드가 클라이언트 요청 방식에 따라 doGet() 또는 doPost() 메소드를 호출
  • 최종적으로 서블릿이 서비스되지 않았을 때 destroy() 메소드를 호출
    • destroy() 메소드는 보통 서버가 종료되었을 때, 서블릿의 내용이 변경되어 재 컴파일 될 때 호출

 

7. 배포 서술자 (Deployment Descriptor)

  • 배포 서술자(Deployment Descriptor)는 애플리케이션에 대한 전체 설정 정보를 가지고 있는 파일
  • 배포 서술자의 정보를 가지고 웹 컨테이너가 서블릿 구동
  • 웹 애플리케이션 폴더의 WEB-INF 폴더에 web.xml 파일이 배포 서술자
  • 설정 정보
    • Servlet 정의, Servlet 초기화 파라미터
    • Session 설정 파라미터
    • Servlet/JSP 매핑, MIME type 매핑
    • 보안 설정
    • Welcome file list 설정
    • 에러 페이지 리스트, 리소스, 환경 변수

 

8. 서블릿 매핑

  • 사용자의 요청을 서블릿에게 전달하기 위해서는 서블릿을 등록하고 매핑해야 함
  • 서블릿을 등록하고 매핑하는 방법은 web.xml과 @annotation을 이용하는 방법이 있음
<servlet>
   <servlet-name>서블릿 이름</servlet-name>
   <servlet-class>서블릿 클래스</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>서블릿 이름</servlet-name>
    <url-pattern>접근 URL 패턴</url-pattern>
</servlet-mapping>
@WebServlet("접근 URL 패턴")
public class 서블릿이름 extends HttpServlet{
  // servlet code
}

+ Recent posts