Develop

25일차_Servlet, JSP(EL, JSTL) 본문

백엔드/KDT_Programmers

25일차_Servlet, JSP(EL, JSTL)

230801 2025. 4. 9. 02:47

안녕하세요 !

오늘은 4/7(월) 데브코스 25일차 입니다.

 

Servlet, JSP에 대해서 배웠고,

수업에서 사용한 서블릿 프로젝트를 기준으로 어떤 역할을 하고, 언제 사용되는지 자세히 알아보겠습니다.

 


 

Servlet 이란?

  • 서버에서 클라이언트의 요청과 응답을 동적으로 처리할 수 있는 JAVA 기반의 API 임
  • 자바코드를 그대로 이용할 수 있음
    • 하지만, HTTP로 전달된 메시지를 구성하는 HTML을 처리할때는 상당히 많은 양의 코드를 작성해야함

특징

  • 서블릿은 자바 클래스 이며, HttpServlet 을 상속하거나 인터페이스를 구현하여 동작함
  • 서블릿은 개발자가 객체를 직접 생성하지 않고, 톰캣과 같은 서블릿 컨테이너에서 객체 생명주기를 관리함
  • 서블릿은 톰캣과 같이 서블릿을 실행할 수 있는 환경(Servlet Container, Servlet Engine)에서 실행 가능

 

Servlet Class 동작 과정

1. 브라우저가 톰캣에 서블릿이 처리해야 하는 특정한 경로를 호출

    (ex. '/hello' 같은 특정 URL 호출)

 

2. 톰캣은 해당 경로에 맞는 서블릿 클래스를 로딩하고 객체를 생성

     (이 과정에서 init() 메서드가 호출되어, 서블릿 초기화 작업 수행)

 

3. 생성된 서블릿 객체는 클라이언트의 요청 정보를 HttpServletRequest 객체로 전달받음

     (응답에 필요한 기능은 HttpServletResponse 타입의 객체로 전달받음)

 

4. 요청방식(GET/POST) 에 따라 doGet()/doPost() 등의 메소드를 실행

    (이 후 동일한 주소의 호출이 있을 때 서블릿은 동일한 객체 하나만을 이용해서 처리함, 싱글톤 처럼 동작함)

 

5. 톰캣이 종료될 때는 서블릿의 destroy() 메서드가 호출되어 자원 정리 수행

 

Servlet Project 구조

  • Base (기본 서블릿 동작)
    • 역할: 서블릿의 기본 동작을 이해하고, HTTP 요청(GET/POST)을 처리하는 구조를 학습.
    • 언제 사용되는가:
      • 서블릿의 기초를 배우거나, URL 패턴에 따라 요청을 분기 처리해야 할 때.
      • 예: /request/get 요청 시 특정 동작을 수행하는 API 설계.
    1.	`HttpServlet` 상속 및 `@WebServlet` 매핑 : 서블릿 클래스 작성 및 URL 패턴 처리
    2.	`doGet`, `doPost` 메서드 오버라이드 : HTTP 메서드별 동작 구현
    3.	`req.getRequestURI()`와 URL 분리 : URL 분석 및 동작 분기
    4.	`req.getParameter("name")` 사용 : 요청 파라미터 읽기
    5.	`resp.setStatus(404)` 호출 : HTTP 상태 코드 설정
    6.	정적 메서드(`testGet`) 사용 : 클래스 레벨 동작 구현
    7.	`PrintWriter`로 HTML 응답 작성 : 출력 스트림을 통한 데이터 반환
    

 

  • Forward (Request Forwarding)
    • 역할: 클라이언트 요청을 다른 서블릿이나 JSP로 전달(Forward)하는 방법을 학습.
    • 언제 사용되는가:
      • 클라이언트에게 URL을 변경하지 않고 내부적으로 요청을 다른 리소스로 전달해야 할 때.
      • 예: 데이터 처리 후 결과 페이지(JSP)로 이동.
    1.	`HttpServlet` 상속 및 `@WebServlet` 매핑 : 서블릿 클래스 작성 및 URL 패턴 처리
    2.	`doGet` 메서드에서 URL 분석 : URL 경로를 기반으로 동작 분기
    3.	`req.setAttribute("score", 100)` 사용 : 요청 객체에 데이터 저장
    4.	`RequestDispatcher.forward()` 호출 : 다른 서블릿 또는 JSP로 요청 전달
    5.	404 상태 코드 설정 (`resp.setStatus(404)`) : 잘못된 요청 처리
    
    

 

  • Forward_JS(Forward된 요청 처리)
    • 역할: Forward된 요청을 받아 데이터를 처리하거나 화면(JSP)을 렌더링.
    • 언제 사용되는가:
      • 다른 서블릿에서 전달된 데이터를 기반으로 최종 응답 화면을 구성해야 할 때.
      • 예: /jsp/forward로 전달된 데이터를 JSP에서 출력.
	1.	클라이언트 요청: 사용자가 URL로 요청을 보냄.
	2.	요청 분석: Servlet Container가 `HttpServletRequest`와 `HttpServletResponse` 객체를 생성하고, 요청을 분석하여 해당 서블릿을 찾음.
	3.	서블릿 호출: `service()` 메서드가 호출되고, 요청 방식에 따라 `doGet()` 또는 `doPost()` 실행.
	4.	응답 생성: 동적 페이지를 생성하여 클라이언트에게 응답 전달.
	5.	자원 정리: 요청 처리 완료 후, `HttpServletRequest`와 `HttpServletResponse` 객체가 소멸됨.

 

  • Redirect (Redirect)
    • 역할: 클라이언트를 다른 URL로 리다이렉트(Redirect)하는 방법을 학습.
    • 언제 사용되는가:
      • 클라이언트가 URL을 변경하여 새로운 요청을 보내도록 해야 할 때.
      • 예: 회원가입 완료 후 /welcome 페이지로 이동.
    1.	`HttpServlet` 상속 및 `@WebServlet` 매핑 : 서블릿 클래스 작성 및 URL 패턴 처리
    2.	`doGet` 메서드에서 URL 분석 : 요청 경로를 기반으로 동작 분기
    3.	`resp.sendRedirect()` 사용 : 클라이언트를 다른 URL로 리다이렉트
    4.	`RequestDispatcher.forward()` 호출 : JSP로 요청 전달
    5.	`doPost`에서 `doGet` 호출 : POST 요청을 GET 요청으로 처리
    
    

 

  • Cookie (쿠키 관리)
    • 역할: 클라이언트의 쿠키를 읽고, 새로운 쿠키를 설정하는 방법을 학습.
    • 언제 사용되는가:
      • 클라이언트 상태(예: 최근 검색어)를 저장하거나, 사용자 맞춤형 데이터를 제공할 때.
      • 예: “최근 검색어”를 쿠키에 저장하고 화면에 표시.
  • 1.	`HttpServlet` 상속 및 `@WebServlet` 매핑 : 서블릿 클래스 작성 및 URL 패턴 처리
    2.	`doGet` 메서드에서 URL 분석 : 요청 경로를 기반으로 동작 분기
    3.	`req.getCookies()` 사용 : 클라이언트가 보낸 쿠키 읽기
    4.	`resp.setHeader("set-cookie", ...)` 사용 : 클라이언트에 새로운 쿠키 설정
    5.	`req.setAttribute()` 사용 : JSP로 전달할 데이터 설정
    6.	`RequestDispatcher.forward()` 호출 : JSP로 요청 전달
    

 

  • Session (세션 관리)
    • 역할: 서버에서 세션 객체를 생성하고, 사용자 정보를 세션에 저장 및 관리하는 방법을 학습.
    • 언제 사용되는가:
      • 로그인 상태를 유지하거나, 사용자별 데이터를 서버에서 관리해야 할 때.
      • 예: 로그인 후 사용자 정보를 세션에 저장하여 인증 및 권한 관리.
  • 1.	`HttpServlet` 상속 및 `@WebServlet` 매핑 : 서블릿 클래스 작성 및 URL 패턴 처리
    2.	`doGet`과 `doPost` 메서드에서 URL 분석 : 요청 경로를 기반으로 동작 분기
    3.	`req.getSession()` 사용 : 세션 객체 생성 및 관리
    4.	`session.setAttribute()` 사용 : 세션에 사용자 정보 저장
    5.	`resp.setHeader("set-cookie", ...)` 사용 : 클라이언트에 세션 쿠키 설정
    6.	`RequestDispatcher.forward()` 호출 : JSP로 요청 전달
    7.	`resp.sendRedirect("/")` 사용 : 로그인 성공 후 리다이렉트
    

 

  • Filter (필터와 예외처리)
    • 역할 : 필터를 사용하여 요청 및 응답 데이터를 전/후처리 수행 및 커스텀 예외 발생 시키기 학습 예를 들어:
      • EncodingFilter: 요청/응답의 문자 인코딩 설정
      • ExceptionFilter: 예외 처리 및 로깅
    • 언제 사용되는가:
      • 특정 조건에서 요청/응답을 사전 처리하거나, 에러 상황에서 적절한 예외 처리를 해야 할 때
      • 예: 잘못된 URL 요청 시 CommonException 발생.
    1.	`HttpServlet` 상속 및 `@WebServlet` 매핑 : 서블릿 클래스 작성 및 URL 패턴 처리
    2.	`doGet` 메서드에서 URL 분석 : 요청 경로를 기반으로 동작 분기
    3.	커스텀 예외(`CommonException`) 발생 : 에러 상황을 처리하기 위한 예외 처리 학습
    4.	`RequestDispatcher.forward()` 호출 : 다른 서블릿으로 요청 전달
    5.	404 상태 코드 설정 (`resp.setStatus(404)`) : 잘못된 요청 처리
    

 

  • Listener (리스너와 이벤트 감지)
    • 역할: 리스너를 통해 특정 이벤트(예: 사용자 액션)를 감지하고 처리하는 방법을 학습.
    • 언제 사용되는가:
      • 애플리케이션, 세션, 또는 요청 수준의 이벤트(예: 세션 생성/소멸)를 감지해야 할 때.
      • 예: 사용자 액션 기록이나 리소스 초기화 작업.
    1.	`HttpServlet` 상속 및 `@WebServlet` 매핑 : 서블릿 클래스 작성 및 URL 패턴 처리
    2.	`doGet` 메서드에서 요청 처리 : GET 요청에 대한 동작 구현
    3.	`RequestDispatcher.forward()` 호출 : JSP로 요청 전달
    

 

JSP (Java Server Pages)

: JAVA 기반의 동적 웹 페이지를 생성하기 위한 기술

 

특징

• HTML, XML과 Java 코드를 혼합하여 동적 콘텐츠를 생성.
• 서버에서 실행되어 클라이언트에 결과를 전달.
• 서블릿의 상위 레벨 추상화로, JSP는 내부적으로 서블릿으로 변환됩니다.

 

 

JSP 의 구성 요소

1. EL(Expression Language)

  • 데이터를 간단히 출력하거나 접근하기 위한 표현식
  • 예: `${param.name}`, `${session.user}`
  • EL Literal 표현식 : 문자, 정수, 실수, blooean, null
  • EL 연산자 : 산술연산자, 비교연산자, 논리연산자, 삼항연산자, empty연산자
  • EL 로 데이터 접근
    • map, list 데이터 구조에서 값 추출
    • 쿠키(cookie)와 세션(session) 값 접근

 

2. JSTL(JavaServer Pages Standard Tag Library)

  • 반복, 조건문 등 자주 사용하는 기능을 태그로 제공
  • 기본 태그(Core):
    • 변수 선언/초기화: `<c:set>` 사용
    • 출력: `<c:out>` 사용
  • 예: `<c:forEach>`, `<c:if>`

 

오늘도 수고하셨습니다.