JSP/Servlet | 서블릿(Servlet) | 서블릿의 기본 코드

그럼 서블릿의 기본을 살펴 보겠다. 서블릿이라는 것은 기본적으로 “Java 클래스"이다. 뭐, 당연하다고 한다면 당연하겠지만, “Java 클래스를 쓸 수 있어서 좋을"뿐이다. 뭔가 특별한 것이 아니다.

그럼 서블릿 클래스는 어떻게 작성되는지 보도록 하겠다. 기본 코드는 아래와 같다.

import javax.servlet.http.*;
 
@SuppressWarnings("serial")
public class 클래스명 extends HttpServlet {
     
    public void doGet(HttpServletRequest request, 
            HttpServletResponse response)
            throws IOException {
 
        ……여기에 GET 처리를 쓴다……
 
    }
 
    public void doPost(HttpServletRequest request, 
            HttpServletResponse response)
            throws IOException {
 
        ……여기에 POST 처리를 쓴다……
 
    }
}

이것이 서블릿의 기본 코드의 구조이다. 그럼 포인트를 정리하겠다.

  1. 클래스는 HttpServlet을 상속받는다.
    서블릿의 기본이 되는 것은 javax.servlet.http 패키지에 준비되어 있는 HttpServlet 클래스이다. 서블릿은 이 클래스를 상속하여 만든다.

  2. 기본은 ‘doGet’과 ‘doPost’ 메소드
    클래스에 거의 필수 항목으로 제공되는 것은 ‘doGet’과 ‘doPost’메소드이다. 이들은 각각 HTTP 메소드인 GET/POST에 액세스할 때 실행된다. 이 중에 하나(또는 양쪽)가 반드시 준비될 것이다. 어느 메소드도 IOException이 발생할 수 있으므로 throws IOException해 둔다.

  3. HttpServletRequest에서 요청 정보를 관리
    이러한 메소드는 두 가지 중요한 객체가 인수로 전달된다. 하나는 ‘HttpServletRequest’이다. 이것은 요청 정보(클라이언트가 서블릿에 액세스하여 왔을 때 정보)를 관리하는 객체이다. 요청에 대한 다양한 정보는 이 객체의 메소드를 호출하여 얻을 수 있다.

  4. HttpServletResponse에서 응답을 관리
    또 다른 객체가 “HttpServletResponse"이다. 이것은 응답 정보(서블릿에서 클라이언트에 반환하는 정보)를 관리하는 객체이다. 클라이언트에 출력 등도 이 HttpServletResponse에서 PrintWriter를 꺼내어 써서 내보낸다.

Servlet 3.0의 어노테이션

이 밖에 Servlet 3.0을 사용하는 경우에는 이 서블릿의 공개 주소에 대해 어노테이션으로 지정할 수 있다. 이 클래스의 선언 부분(@SuppressWarnings이 있는 곳)에 작성한다.

@WebServlet(공개 주소)

이런 느낌이다. 예를 들어 http://OO/sample와 같은 주소로 공개한다면 @WebServlet("/sample")라고 작성해 두면 된다. 이것으로 서블릿은 지정한 주소로 자동으로 공개된다.

(2.5의 경우는 어노테이션은 사용할 수 없다. 별도의 설정 파일을 지정해야 한다. 이에 대해서는 계속 설명하겠다.)

web.xml에 서블릿 정보를 등록하기

Servlet 3.0을 사용하고 있다면, 이것으로 서블릿 작성은 끝이다. 이 후에는 배포할 뿐이다. 하지만, GAE처럼 아직 3.0을 지원하지 않는 환경에서는 서블릿 본체 소스 코드 외에 “서블릿 정보를 기술한 설정 파일"을 준비하지 않으면 안된다.

그것은 “web.xml"라는 파일이다. 일반적으로 Web 어플리케이션의 “WEB-INF” 폴더(외부에서 액세스되지 않는 특수 폴더이다)에서 준비한다. GAE 프로젝트는 기본적으로 자동으로 생성되어 있을 것이다.

이 web.xml에는 Web 응용 프로그램에 대한 다양한 설정 정보가 포함된다. 서블릿은 “서블릿의 이름”, “사용하는 클래스”, “공개 주소"와 같은 정보를 여기에 기술해야 한다.

아래에는 서블릿 관련 정보의 기본형을 정리해 두었다.

web.xml의 기본형

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
       http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">

   <servlet>
       <servlet-name>서블릿 이름</servlet-name>
       <servlet-class>서블릿 클래스</servlet-class>
   </servlet>

   <servlet-mapping>
       <servlet-name>서블릿 이름</servlet-name>
       <url-pattern>공개하는 주소</url-pattern>
   </servlet-mapping>

   ……그 외에 태그 계속……

</web-app>

web.xml에 <web-app>라는 루트 태그 안에 설정 태그를 작성한다. 서블릿 정보는 다음의 2개의 태그로 제공된다.

<servlet> 태그

서블릿의 등록을 위한 것이다. 이 중에는 다음과 같은 두 개의 태그가 준비되어 있다. 서블릿 클래스는 단순히 클래스 이름뿐 아니라 패키지도 포함하여 작성한다.

  • <servlet-name> 서블릿의 이름을 등록한다.
  • <servlet-class> 사용하는 서블릿 클래스를 작성한다.

<servlet-mapping> 태그

서블릿 URL 매핑(어떤 주소로 공개하는지)을 설정하기 위한 것이다. 이 안에 이하 두개의 태그가 준비되어 있다. 이것으로 서블릿을 지정된 주소로 게시할 수 있다.

  • <sservlet-name> 서블릿 이름을 지정한다.
  • <surl-pattern> 공개하는 주소를 설명한다.

이 태그에 의해 생성된 서블릿 클래스가 지정된 주소로 공개된다. 몇번이나 설명을 했지만, 이는 “Servlet 3.0 이전"의 경우에 필요하다. 3.0 이상은 어노테이션으로 지정하면 필요없는 설정이다.

덧붙여서, web.xml에는 이 밖에 <welcome-file-list>라는 태그도 있다. 이것은 URL 경로(파일 이름)를 지정하지 않고 액세스했을 때, 디렉토리 안에 어떤 파일을 표시할지를 지정한다. 이것은 없어도 별도로 Web 응용 프로그램에 영향을 주지 않는다.