자바(Java)/JAVA 2EE

web.xml(배포서술자: Deployment Descriptor, 이하 DD)서블릿 매핑 방법

본클라쓰 2009. 8. 26. 16:18

 

서블릿은 웹 컨테이가 클라이언트의 요청을 받으면 해당 서블릿이 있나 검색을 한 후 서블릿 객체의 인스턴스가 있다면 수행하며, 인스턴스가 없다면 해당 서블릿을 찾아 컴파일 후 객체 인스턴스를 생성하여 수행합니다. 따라서 서블릿 객체를 작성하면 요청 URL에 해당 서블릿을 매핑 시켜주어야 합니다. 서블릿을 웹 컨터이너에 등록하는 방법은 웹 배포 서술파일인 web.xml 파일에 서블릿이 수행해야할 URL값과 서블릿을 등록하여 매핑시켜 해당 서블릿을 등록시킵니다.

 

 

아래의 서블릿을 웹 컨테이너에 등록시키겠습니다.

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

 

public class Hello extends HttpServlet {

 

    public void doGet(HttpServletRequest req, HttpServletResponse res) throws

        ServletException, IOException {


        res.setContentType("text/html;charset=euc-kr");

 

        try {
            PrintWriter out = res.getWriter();
            out.println("<html>");
            out.println("<head><title>Hello</title></head>");
            out.println("<body>");
            out.println("hahaha");
            out.println("</body>");
            out.println("</html>");
            out.close();

        } catch (Exception e) {
            getServletContext().log("Error in Hello",e);
        }
    }
}

 

위와 같은 서블릿으로 작성된 클래스를 웹 브라우저에서 요청할 때는 기본적으로 다음과 같은 주소로 접근합니다.

 

http://localhost:8080/webapp/servlet/패키지 포함 클래스명

 

ex) http://localhost:8080/webapp/servlet/Hello (위에 작성된 클래스를 확인할 때)

 

우선 서버의 web.xml 파일에 서블릿을 사용하기 위해 주석을 제거합니다. 톰캣 6.0 버전은 서블릿 사용을 기본적으로 막아놓고 있기 때문에 우선 서블릿 사용 방지 주석을 제거합니다. 제거해야 할 주석 부분은 다음과 같습니다.

 

<servlet-mapping>

    <servlet-name>invoker</servlet-name>

    <url-pattern>/servlet/*</url-pattern>

</servlet-mapping>

 

이 부분을 감싸고 있는 주석을 제거하면 서블릿 클래스명으로 접근이 가능합니다.

 

 

이제 서블릿을 웹 배포자에 등록시켜 URL과 해당 서블릿을 매핑 시키는 작업이 필요합니다. 매핑은 웹 애플리케이션 배포 서술자 파일에 등록시킵니다. 웹 애플리케이션 배포자는 /WEB-INF/ 디렉토리에 있는 web.xml 파일입니다.

 

<servlet>

    <servlet-name>매핑시킬 이름</servlet-name>

    <servlet-class>패키지 포함 클래스명</servlet-class>

</servlet>

 

<servlet-mapping>

    <servlet-name>매핑시킬 이름</servlet-name>

    <url-pattern>URL에서 접근할 때 이름('/'기호로 시작해야함)</url-pattern>

</servlet-mapping> 

 

 

위에 작성한 Hello 서블릿을 매핑 시킬 때는 다음과 같습니다. 

 

<servlet>

    <servlet-name>hello</servlet-name>

    <servlet-class>Hello</url-pattern> // 패키지를 포함한 클래스명

</servlet> 

 

<servlet-mapping>

    <servlet-name>hello</servlet-name>

    <url-pattern>/hello</url-pattern> 

</servlet-mapping> 

 

배포 서술자에는 서블릿과 JSP를 어떻게 실행하느냐에 관한 많은 정보들이 들어있다. 배포 서술자를 사용하면 조금 복잡해 지는데 왜 배포 서술자를 사용하는 것일까? 배포 서술자를 사용하여 얻는 이점은 아래와 같다.

  1. 테스트된 소스 코드에 대한 수정을 최소화
  2. 어플리케이션을 목적에 맞게 수정
  3. 코드 변경이나 컴파일을 다시 하지 않고도 서버 자원을 변경
  4. 접근 제어 목록(ACL, Access Control List), 보안역할(Security Role) 같은 보안 관련 업무를 쉽게 관리
  5. 프로그래머가 아닌 사람이 웹 어플리케이션을 배포하고 설정을 수정 가능하게 함

 

 

 

● 위에 코드를 실행시킨 결과화면 

 

 

  참고

servlet-api.jar(톰캣의 common/lib 디렉토리에 있음) 파일을 jdk lib 폴더에 복사