백엔드 쪽을 개발하게 되면 서블릿이라는 단어를 많이 듣게 되는데 사실 지금 이 순간 서블릿!? 하면 떠오르는 것은 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 파일을 통해 정의 한다.
<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간의 간단한 연동 예제를 실습해본다.
'개발 지식 > JSP & Servlet' 카테고리의 다른 글
[JSP & Servlet] 서블릿 요청 처리 (0) | 2020.08.09 |
---|---|
[JSP & Servlet] 서블릿 스코프(Scope) : Page, Request, Session, Application (0) | 2020.08.07 |
[JSP & Servlet] 서블릿 파라미터(init-Param, context-param) (0) | 2020.08.07 |
[JSP & Servlet] doGet, doPost 그리고 기타 메소드의 lifeCycle (0) | 2020.08.04 |
댓글