본문 바로가기
개발 지식/JSP & Servlet

[JSP & Servlet] Servlet 이란 무엇일까?

by 에르주 2020. 8. 4.
반응형

백엔드 쪽을 개발하게 되면 서블릿이라는 단어를 많이 듣게 되는데 사실 지금 이 순간 서블릿!? 하면 떠오르는 것은 Servlet == Java이라는 생각만 떠올라 다시 한번 정의해 보는 것이 필요할 것 같아 해당 내용을 적어본다.

 

Spring Framework 또는 Java 언어를 활용한 백엔드를 개발하다보면 DispatchServlet, HttpServlet과 같은 단어를 많이 보게 되는데 서블릿 개념은 이렇다

 

더보기

"서블릿" 은 웹 컨테이너에 의해서 관리되며, 다양한 클라이언트 요청에 의해서 동적인 컨텐츠(content)로 응답 가능한 자바 기반의 웹 컴포넌트이다.

 

단순한 기능은 안의 동적 컨텐츠 즉 내부 동적 어플리케이션과 연결 해준다고 생각하면 될 것 같다.

외부 요청을 받아 내부 처리 후 클라이언트(브라우저)에게 다시 전달 해주는 Agent 역할, 연결자 역할로 생각하면 될 것 같다. 또 서블릿은 웹 컨테이너 (Tomcat, Jesus 등) 의해 관리 된다.

 

음.. 예를 들어 축구로 비유하자면 

 

구단(클라이언트) -> 선수(웹 컨테이너)에게 이적 제안을 한다고 생각해보면 선수는 보통 계약 대리인으로 에이전트(서블릿)를 고용하곤 하는데 이 에이전트 역할이 서블릿 역할을 한다고 생각하면 될 것 같다.

에이전트(서블릿)는 선수(웹 컨테이너)에 의해 관리되고 있으며 구단(클라이언트)로 부터 받은 요청들을 내부 선수와의 협의 그리고 기타 정보(DB등)에 의한 동적 응답을 다시 밖으로 제공해주는 역할이라고 생각하면 될 것 같다.

 

보통 Servlet 경우 HttpServlet API를 상속받아 사용하게 되는데 HttpServlet은  일반 클래스가 아니라 추상 클래스를 제공한다. 즉 @override를 통해 재정의를 해야한다.

 

그리고 서블릿 선언은 두가지로 표현할 수 있는데 Annotation을 활용과 web.xml을 활용하는 방법이다

 

1) Annotation 

 

간단한 예를 들자면

package com.controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Exam2Servlet
 * @WebServlet("/Exam2Servlet")

 */
public class Exam2Servlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("erjuer01@gmail.com");
	}

}

 

위의 코드 같이 

더보기

@WebServlet("/{{path}}")

 

이라는 것을 활용하면 해당 Path 서블릿에 대한 요청과 반응에 관련한 기능들을 정의 할 수 있다.

 

 

2) web.xml

대부분 코드를 보면 WebContent 디렉토리 안의 web.xml 파일을 통해 정의 한다.

 

xml

<servlet> 태그의 내용은

<servlet-name>은 밑의 <servlet-mapping>에서 매핑을 위한 설정하며 

<servlet-class>는 서블릿에 해당하는 파일을 지정한다. (패키지 포함)

 

<servlet-mapping> 태그의 내용은

<serlvlet-name>은 위에 <servlet> 태그에서 설정된 이름이며

<url-pattern>은 해당 URL 연결 시 위에 설정한 서블릿 클래스로 이동한다.

 

 

1번 또는 2번의 설정을 통해 서블릿 설정을 완료하고

HttpServlet의 메소드를 @override하여 사용하면 된다.

 

위에 설정된 servlet-name, class, mapping과 url patter를 활용하면 다음과 깉은 URL을 작성할 수 있다.

 

http://서버 IP:Port/컨텍스트명/servlet/패키지 포함한 서블릿명

[예 http://localhost:8090/ServletTest/servlet/com.controller.loginServlet]

 

URL Mapping을 사용하면

http://서버 IP:Port/컨텍스트명/URL 매핑명으로 바꿀 수 있다.

[예, http://localhost:8090/ServletTest/Login.do]

 

 

다음 포스팅은 HttpServlet의 메소드를 한번 정의하고 간단한 로그인 폼을 통해 html과 servlet간의 간단한 연동 예제를 실습해본다.

 

 

 

 

 

 

반응형

댓글