Language/Etc.

Servlet 정의 및 기본 구조와 문법

재은초 2024. 6. 1. 14:23
반응형

서블릿(Servlet)이란?

  • 웹을 동적으로 만들기 위해서 옛날에는 자바 애플릿(Applet)을 사용했다. 자바 애플릿은 웹에서 실행되도록 설계된 자바 애플리케이션을 통째로 웹 브라우저로 전송한 후, 자바 가상 머신을 탑재한 웹 브라우저가 이를 실행하는 방식으로 구동된다. 하지만 속도, 보안, 유연성 등에서 한계가 있어서 서버 측에서 실행되는 서블릿(Servlet)이 등장했다.
  • 서블릿이란 클라이언트의 요청을 받으면 서버에서 처리한 후, 응답으로는 결괏값만 보내주는 구조다. 아래 동적 웹페이지의 전처리 부분을 서블릿이 담당하는데, 서블릿은 자바 파일(.java)을 컴파일한 클래스 파일(.class) 형태이며, 이를 실행하고 관리해주는 런타임을 서블릿 컨테이너라고 한다. 대표적인 서블릿 컨테이너가 바로 아파치 톰캣(Apache Tomcat)이다.
  • 서블릿은 JSP가 나오기 전, 자바로 웹 애플리케이션을 개발할 수 있도록 만든 기술이다. 서블릿은 서버 단에서 클라이언트의 요청을 받아 처리한 후 응답하는 역할을 한다.

특징

  • 클라이언트의 요청에 대해 동적으로 작동하는 웹 애플리케이션 컴포넌트다.
  • MVC 모델에서 컨트롤러 역할을 한다.
  • 모든 메서드는 스레드로 동작된다.
  • jakarta.servlet.http 패키지의 HttpServlet 클래스를 상속받는다.

 

서블릿 컨테이너

  • 서블릿을 사용하려면 서블릿을 관리하는 컨테이너가 필요한데, 보통 톰캣(Tomcat)을 많이 사용한다.
  • 서블릿의 수명주기를 관리하고, 요청이 오면 스레드를 생성해 처리해 준다. 또한 클라이언트의 요청을 받아서 응답을 보낼 수 있도록 통신을 지원해준다.

서블릿 동작 방식

  • 서블릿은 MVC 패턴에서 컨트롤러 역할을 한다. 
  • 1. 클라이언트의 요청을 받아서 2. 분석 후 요청을 처리할 서블릿을 찾는다. 3. 그리고 서블릿을 통해 비즈니스 서비스 로직을 호출하고 4. 모델로부터 그 결과값을 받아서 5. request나 session 영역에 저장한 후 결괏값을 출력할 적절한 뷰를 선택한다. 6. 최종적으로 선택된 뷰(JSP) 페이지에 결괏값을 출력한 후 요청한 클라이언트에 응답하게 된다.

서블릿 작성 규칙

  • 기본적으로 jakarta.servlet, jakarta.servlet.http, java.io 패키지를 임포트한다.
  • 서블릿 클래스는 반드시 public으로 선언해야 하고, HttpServlet을 상속받아야 한다.
  • 사용자의 요청을 처리하기 위해 doGet() 메서드나 doPost() 메서드를 반드시 오버라이딩해야 한다.
  • doGet() 또는 doPost() 메서드는 ServletException과 IOException 예외를 던지도록 throws 선언한다.
  • doGet() 또는 doPost() 메서드를 호출할 때의 매개변수는 HttpServletReqquest와 HttpServletResponse를 사용한다.
package 패키지명;

// 기본적으로 필요한 패키지 및 클래스
import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;


// HttpServlet 상속
public class 서블릿클래스명 extends HttpServlet {
	@Override // doGet() 오버라이딩
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
    	throws ServletException, IOException {
        // 메서드 실행부
    }
}

 

서블릿 작성

  • 서블릿 작성은 클라이언트의 요청을 전달할 '요청명'을 결정하는 일부터 시작한다. JSP에서는 클라이언트의 요청을 JSP가 직접 받아서 처리하지만, 서블릿은 요청명을 기준으로 이를 처리할 서블릿을 선택한다.
  • 요청명과 서블릿을 연결해주는 작업을 '매핑(Mapping)'이라고 하며, 1. web.xml에 기술하는 방법과 2. @WebServlet 애너테이션을 사용하여 코드에 직접 명시하는 방법이 있다.

web.xml에 매핑

<!-- 서블릿 등록 -->
<servlet> 
	<servlet-name>서블릿명</servlet-name>
    <servlet-class>패키지를 포함한 서블릿 클래스명</servlet-class>
</servlet>
<!-- 서블릿과 요청명(요청 URL) 매핑 -->
<servlet-mapping>
	<servlet-name>서블릿명</servlet-name>
    <url-pattern>클라이언트 요청 URL</url-pattern>
</servlet-mapping>

@WebServlet 애너테이션으로 매핑

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>AnnoMapping.jsp</title>
</head>
<body>
	<h2>애너테이션으로 매핑하기</h2>
    <p>
    		<strong>${ message }</strong>
            <br />
            <a href="<%= request.getContextPath() %>/12Servlet/AnnoMapping.do">바로가기</a>
    </p>
</body>
</html>

 

Reference

  • Must Have 성낙현의 JSP 자바 웹 프로그래밍
반응형