자바(Java)/JAVA 2EE

서블릿 클래스 작성

본클라쓰 2009. 9. 3. 11:37

 

서블릿 클래스를 작성하기 앞서 서블릿 클래스 관계를 알고 있어야 한다.

 

HTTP용 서블릿 클래스을 작성할 때는 HttpServlet 클래스를 상속받아 작성합니다. 서블릿 클래스는 다음과 같은 형식을 가집니다.

 

import javax.servlet.*;


public class HelloClass extends HttpServlet  {

   클래스 내용 

}

 

HttpServlet 클래스는 서블릿 클래스 중 HTTP 프로토콜에 사용하는 서블릿 클래스입니다.


서블릿은 초기화(init) → 서비스(service) → 소멸(Destroy) 의 단계를 거칩니다. 물론 이 단계는 컨테이너가 결정합니다. 개발자는 초기화할 때 수행해야 동작을 초기화 메소드에 작성하거나, 소멸할 때 수행해야 할 동작을 소멸 메소드에 작성할 수는 있어도 서블릿 클래스를 생성하거나 실행하는 것에 관여 할 수 없습니다.

 

HttpServlet 클래스는 초기화, 서비스, 소멸에 해당하는 메소드를 이미 구현해 놓은 클래스입니다. 따라서 HttpServlet 클래스를 상속하여 서블릿을 작성할 때는 서블릿의 라이플 사이클에 신경 쓸 필요가 없이 요청에 응답하는 doGet()메소드나 doPost()메소드만 구현하면 됩니다.

 

HTTP프로토콜에서는 요청 명령어는 기본적으로 7가지가 있으며 확장하면 9가지가 됩니다. 요청 명령어 중 가장 중요한 명령어는 GET명령어와 POST명령어입니다.  이 내용은 웹 프로그래밍>HTTP 프로토콜>HTTP/1.1 Mehod 카테고리에 가시면 확인 할 수 있습니다.


서블릿에서는 매핑을 통해 요청 명령어에 따른 사용할 메소드를 결정합니다. 즉, GET명령어는 doGet()메소드를 호출하고 POST명령어가 전달되면 doPost()메소드를 호출하여 결과를 클라이언트에게 반환합니다.


즉, 서버측 서블릿 클래스를 작성할 때는 서블릿 클래스를 생성한 후 doGet() 메소드와 doPost() 메소드를 구현하여 작성합니다. 보통 doPost() 메소드는 doGet() 메소드를 호출하는 역활을 하게 하며 응답의 결과는 모두 doGet() 메소드안에 작성하는 것이 일반적인 방법입니다.

 

 

 

 

서블릿 프로로그램 작성 예제

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.http.*;

 

public class Hello extends HttpServlet  {

    public void doPost(HttpServletRequest request, HttpServletResponse response)

        throws ServletException, IOException) {

        doGet(request, response);

    } 

 

    public void doGet(HttpServletRequest request, HttpServletResponse response)

        throws ServletException, IOException{

        response.setContentType("text/html");

        PrintWriter out = response.getWriter(); 

 

        out.println("<html>");

        out.println("<head>");

        out.println("<title>Hello</title>");

        out.println("<body>");

        out.println("Hello");

        out.println("</body>"); 

        out.println("</html>");

    } 

}

 

위의 예제에서 보듯이 서블릿을 작성할 때 doPost() 메소드를 가장 먼저 작성하며 doPost()메소드는 어떤 동작도 담고 있지 않고 바로 doGet()메소드를 호출합니다. 서블릿을 작성할 때 실질적인 내용은 doGet()메소드에 작성하는 것이 일반적인 방법입니다.

doGet() 메소드를 작성할 때 가장 먼저 해야 할 것은 문서의 ContentType 을 설정하는 것입니다.ContentType은 문서의 타입을 지정하는 것으로 MIME 타임을 지정하며 문서의 문자 encoding 방식도 지정합니다.

 

설정방법은 response.setContentType("MIME 타입") 메소드에 파라미터로 MIME 타입을 전달하는 것입니다. MIME 타입은 웹프로그래밍>HTTP프로토콜>MIME Type 카테고리에 가시면 확인 할 수 있습니다.

 

다음은 response.getWriter() 메소드로 PrintWriter 클래스 객체를 얻는 것입니다. PrintWriter 객체는 HTML 문서의 출력을 담당합니다. 기본적은 사용 방법은 다음과 같습니다.

 

PrintWriter out = response.getWriter();

 

out.println("<head>");

 

※ gif나 pdf 문서 같은 바이너리 형식일 경우에는 response.getOutputStream() 메소드를 통해 ServletOutputStream 객체를 사용하여 출력합니다.