Servlet이란?
Servlet은 자바 기반 웹 애플리케이션의 핵심 구성 요소 중 하나로, 클라이언트의 요청(request)을 처리하고 응답(response)을 생성하는 역할을 합니다.
Servlet의 주요 특징
- Java 클래스 기반: HttpServlet 클래스를 상속받아 동작.
- 동적 콘텐츠 생성: HTML, JSON 등 다양한 콘텐츠 타입 생성 가능.
- 서블릿 컨테이너: Tomcat과 같은 컨테이너에서 실행.
Servlet 동작 흐름
- 클라이언트 요청: 사용자가 웹 브라우저에서 URL 입력.
- 요청 처리: 서블릿 컨테이너가 요청을 Servlet으로 전달.
- 응답 반환: Servlet이 응답 데이터를 생성하여 클라이언트로 반환.
간단한 Servlet 코드 예시
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<h1>Hello, Servlet!</h1>");
}
}
위 코드는 "Hello, Servlet!" 메시지를 브라우저에 출력하는 간단한 Servlet입니다.
Dispatcher Servlet이란?
Dispatcher Servlet은 Spring Framework에서 사용되는 서블릿으로, Front Controller 패턴을 구현한 것입니다. 이 서블릿은 애플리케이션 전반에 걸친 요청을 중앙에서 처리하고, 적절한 컨트롤러로 전달하는 역할을 합니다.
Dispatcher Servlet의 주요 역할
- 요청 분배: 클라이언트 요청을 분석하여 적절한 핸들러(Controller)로 전달.
- 뷰 처리: 컨트롤러가 반환한 데이터를 기반으로 뷰(View) 렌더링.
- 유연성 제공: 다양한 요청/응답 처리 로직을 추가로 설정 가능.
Dispatcher Servlet 동작 흐름
- 클라이언트 요청: URL로 요청이 들어옴.
- Handler Mapping: 어떤 컨트롤러가 요청을 처리할지 매핑.
- 컨트롤러 실행: 매핑된 컨트롤러의 메서드 호출.
- 모델 반환: 컨트롤러에서 비즈니스 로직 수행 후 데이터 반환.
- 뷰 렌더링: 반환된 데이터를 기반으로 뷰 생성.
Dispatcher Servlet 구성 예시
Controller 코드
@Controller
public class HelloController {
@GetMapping("/hello")
public String sayHello(Model model) {
model.addAttribute("message", "Hello, Dispatcher Servlet!");
return "hello"; // hello.jsp 뷰로 매핑
}
}
hello.jsp 뷰 파일
<html>
<body>
<h1>${message}</h1>
</body>
</html>
Dispatcher Servlet이 "hello" 뷰를 렌더링하고, 컨트롤러에서 전달한 메시지를 화면에 표시합니다.
Servlet과 Dispatcher Servlet 비교
특징 | ServletDispatcher | Servlet |
프레임워크 지원 여부 | 독립적 (Spring에 종속되지 않음) | Spring Framework의 일부 |
요청 처리 | 요청 직접 처리 | 요청 분배 및 컨트롤러 호출 |
뷰 처리 | 직접 HTML 작성 또는 외부 템플릿 사용 | Spring MVC와 연계하여 뷰 렌더링 처리 |
적용 가능한 패턴 | 단순 요청/응답 처리 | MVC 패턴 기반 애플리케이션 |

'Back_End > JAVA' 카테고리의 다른 글
자바에서 동적 바인딩과 정적 바인딩 (0) | 2024.12.03 |
---|---|
Feign Client란? (0) | 2024.12.03 |
스프링(Spring) 필드 주입과 생성자 주입 – 무엇이 더 나은 선택일까? (1) | 2024.12.02 |
Web Application Server (WAS) (0) | 2024.11.28 |
자바 리플렉션(Reflection)이란? (1) | 2024.11.26 |