웹 개발 기초/자바 웹을 다루는 기술

FirstServlet을 이용한 실습

sungw00 2023. 2. 14. 14:22
728x90

사용자 정의 서블릿을 실제로 만들고 서블릿의 동작 과정을 실습해보자.

이클립스에서 서블릿을 만들고 실행하는 과정은 다음과 같다.

먼저 사용자 서블릿을 만들기 위해서는 아래 예시 코드와 같이 HttpServlet 클래스를 상속받아야 하고 3개의 생명주기 메서드, 즉 init(), doGet, destroy() 메서드를 오버라이딩하여 기능을 구현한다.

// 사용자 정의 서블릿 작성 예시 코드
public class FirstServlet extends HttpServlet {
    @Override
    public void init() {
        ...
    }
    
    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) {
        ...
    }
    
    @Override
    public void destroy() {
        ...
    }
}

실제로 실습해보자.

 

1. 먼저 이클립스의 프로젝트에서 서블릿을 사용하기 위해 톰캣의 servlet_api.jar 클래스 패스를 반드시 설정해야 한다.

이클립스 상단 메뉴의 File -> New -> Dynamic Web Project를 클릭하여 새 프로젝트를 생성한다.

Project name을 입력하고 Next 클릭

경로를 확인 후 Next 클릭

"Generate web.xml deployment descriptor" 에 체크해주고 Finish 클릭

Project Explorer에서 방금 생성한 프로젝트를 우클릭하여 Build Path -> "Configure Build Path..." 클릭

Libraries탭에서 Classpath 클릭 -> Add External JARs... 를 클릭

servlet-api.jar 클릭 후 Open

추가된 servlet-api.jar 클래스의 패스 설정 확인 후 Apply and Close 클릭하여 종료

 

2. 첫 번째 서블릿 만들기

실제로 브라우저의 요청을 처리하는 첫 번째 서블릿 생성하기

New -> Package 클릭하여 패키지 생성

패키지 명 입력 후 Finish 클릭

방금 생성한 패키지에서 New -> Class 를 클릭

클래스명 입력 후 Finish 클릭

 

생성된 FirstServlet.java 클래스 파일에 아래와 같이 입력한다.

package sec01.ex01;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FirstServlet extends HttpServlet {
	@Override
		public void init() throws ServletException {
		System.out.println("init 메서드 호출");
	}
	
	@Override
		protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("doGet 메서드 호출");
	}
	
	@Override
		public void destroy() {
		System.out.println("destroy 메서드 호출");
	}
}

이제 pro01 프로젝트를 톰캣에 추가하고 브라우저에서 요청 시 패키지 이름까지 포함된 서블릿 클래스 이름인 sec01.ex01.FirstServlet으로 요청해야 하는데 클래스 이름이 길어지면 입력하기도 불편하고 보안상에도 좋지 않으므로, 서블릿 클래스 이름에 대응되는 서블릿 매핑 이름으로 실제 서블릿을 요청해보자.

 

먼저 src -> main -> webapp -> WEB-INF -> web.xml 파일의 내용을 확인해보자.

위와 같이 작성한 적 없는 내용들이 적혀있는 것을 확인할 수 있다. <web-app> 태그의 하위 태그들을 지우고 다음과 같이 서블릿 매핑을 작성한다.

<servlet-name> 태그의 값 aaa가 <servlet>과 <servlet-mapping> 태그를 연결시켜 주는 역할을 하고, 웹 브라우저에서 <url-pattern> 태그의 /first로 요청할 경우 aaa 값을 가지는 <servlet> 태그를 찾아 실제 서블릿인 sec01.ex01.FirstServlet을 실행하는 것이다.

 

web.xml 파일을 저장 후 아래와 같이 톰캣 서버를 선택 후 추가하여 실행하고, 브라우저에서 서블릿 매핑 이름으로 요청해보자.

톰캣 서버 우클릭 후 Add and Remove... 클릭

pro01 프로젝트를 선택하여 Add > 클릭하여 추가

추가 완료 후 Finish 클릭하여 닫기

톰캣 서버 실행

브라우저에는 아무것도 표시되지 않는다. 

이클립스의 콘솔창에 위와 같이 메시지가 출력되었다면 정상적으로 메서드들이 호출된 것이다.

728x90