Study/Java

[Java] Servlet(서블릿) 이란?

개발개발개발 2022. 3. 1. 16:11

사용자 요구에 맞춰 동적으로 반응하는 페이지을 만들기 위해 만들어진 것이 서블릿이다.

서블릿은 JSP 표준이 나오기 전, 만들어진 표준으로 java로 웹 어플리케이션을 개발할 수 있도록 하기 위해 만들어졌다. 

서블릿을 이용하면 자바 클래스를 이용해서 웹 어플리케이션을 개발하게 된다. 

서블릿은 웹의 요청과 응답의 흐름을 메서드 호출을 통해 체계적으로 다룰 수 있게 해준다. 

 

오늘 다룰 내용과 연관하여 내가 업무에서 쓰는 개발 환경은 다음과 같다.  엄청 레거시한 코드와 개발 환경

Java 1.8

Servlet 3.0(web.xml을 통한 매핑) 

tomcat 8.0

MVC2 구조

Spring 사용 안함

 

 

 

 

1. web.xml로 매핑하기

WEB-INF 폴더의 web.xml 파일에 서블릿 클래스로 등록한다. 

    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.test.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/Gateway/test</url-pattern>
    </servlet-mapping>

서블릿을 등록하기 위해 두 가지를 설정해야 한다. 

1. 서블릿으로 사용할 클래스

2. 서블릿과 URL 간의 매핑

 

위 예의 경우 com.test.HelloServlet 클래스를 "HelloServlet" 라는 이름의 서블릿으로 등록하였다. 

결과적으로 /Gateway/test/ 라는 URL을 HelloServlet이 처리하게 된다. 

 

2. 어노테이션으로 매핑하기

서블릿 2.5버전까지는 web.xml 파일에 서블릿으로 등록해야 서블릿 클래스를 사용할 수 있다.

서블릿 3.0 버전부터는 @WebServlet 어노테이션을 사용하면 web.xml 파일에 따로 등록하지 않아도 서블릿으로 등록된다. 

톰캣 7(서블릿3.0)이나 톰캣 8 버전(서블릿 3.1)처럼 서블릿 3.0을 지원하는 웹 컨테이너는 @WebServlet이 적용된 클래스를 검색해서 서블릿으로 자동 등록한다. 

	@WebServlet(urlPatterns = "/hello")
	public class HelloServlet extends HttpServlet{
		@Override
		protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
			// TODO Auto-generated method stub
			
			PrintWriter out = resp.getWriter();
			out.println("HI");
			super.doGet(req, resp);
		}
	}

 

@WebServlet 어노테이션을 사용할 때는 해당 서블릿이 범용적으로 사용되고 있는지 알아야한다. 

서블릿은 단지 다양한 요청 URL을 처리할 수 있도록 구현해놓았을 뿐이다.

 

그렇다면 어노테이션이 적용된 서블릿을 web.xml 에 등록한다면? 

이때는 2 개의 객체가 생성이 된다. 어노테이션이 적용된 클래스의 객체가 생성되고, web.xml 파일에 등록된 클래스의 객체가 생성 된다. 

 

 

3. 서블릿 로딩과 초기화

서블릿 컨테이너는 처음 서블릿을 실행할 때 서블릿 객체를 생성한다. 

이후 요청이 오면 앞서 생성한 서블릿 객체를 그대로 사용한다. 

 

웹 컨테이너가 서블릿 객체를 생성하고 init() 메서드를 호출하는 과정을 '서블릿 로딩' 과정이라고한다. 

init()은 상대적으로 시간이 오래 걸리므로 처음 서블릿을 사용하는 시점보다는 웹 컨테이너를 처음 구동하는 시점에 초기화를 진행하는 것이 좋다. 이를 위한 설정이 <load-on-startup> 태그이다. 

 

 

    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.test.HelloServlet</servlet-class>
        <load-on-startup>1</load-on/startup>
    </servlet>​

해당 태그는 웹 어플리케이션을 시작할 때, 서블릿을 로딩한다. 

태그의 값은 로딩 순서를 의미한다. (오름차순) 

 

4. MVC의 컨트롤러 : 서블릿 (mvc2 기준)

모델 2 구조에서 서블릿은 MVC 패턴의 컨트롤러 역할을 한다. 서블릿은 웹 요청과 응답 등 전체적인 흐름을 제어한다. 

다음 5단계의 과정으로 요청을 처리하게 된다. 

[1] 웹 브라우저가 전송한 HTTP 요청을 받는다. 서블릿의 doGet() 또는 doPost() 호출

[2] 웹 브라우저가 어떤 기능을 요청했는지 분석한다. 

[3] 모델을 사용하여 요청한 기능을 수행한다. 

[4] 모델로부터 전달받은 데이터를 가공한 후 request나 session의 setAttribute() 메서드를 사용하여 결과 값을 저장한다. 이렇게 저장한 결과값은 JSP에서 사용한다.

[5] 웹 브라우저에 결과를 전송할 JSP를 선택한 후 해당 JSP로 포워딩 또는 리다이렉트 한다. 

 

 

 

 

 

참고 : 

JSP2.3 웹프로그래밍 기초부터 중급까지

'Study > Java' 카테고리의 다른 글

[Java] 직렬화(Serialization)  (0) 2021.10.25
[Java] 멀티 쓰레드(Multi Thread)  (0) 2021.09.14
[Java] 파일 입출력 정리  (0) 2021.09.08
자바 2차원 배열 정렬하기  (0) 2020.09.01