서블릿 이란?
학습 목표
서블릿에 대한 개념을 알아보자.
서블릿이 하는 역할에 대해 살펴 봅시다.
주요 코드와 MIME TYPE 에 대한 개념을 알아 보자.
서블릿(Servlet)
자바 언어로 작성된 서버 측 컴포넌트로, 웹 애플리케이션에서 클라이언트의 HTTP 요청을 처리하고 동적인 웹 페이지를 생성하여 응답하는 역할을 합니다. 서블릿은 Java EE (Enterprise Edition) 사양의 일부로, 주로 HTML 페이지를 생성하고 데이터베이스와 연동하여 데이터를 처리하는 데 사용됩니다.
컴포넌트란?
여기서 "컴포넌트"라는 개념은 독립적으로 작동할 수 있는 소프트웨어의 작은 단위입니다.
서블릿은 웹 서버에서 독립적으로 실행되며, 클라이언트의 요청을 처리하고 응답을 생성하는 역할을 합니다.
예를 들어, 데스크톱 프로그램이나 모바일 앱에 사용되는 메뉴바, 툴바, 본문 영역 등이 각각의 컴포넌트로 볼 수 있습니다.
서블릿의 역할
- HTTP 요청 처리
- 서블릿은 클라이언트로부터 들어오는 HTTP 요청을 처리합니다.
이 요청은 웹 브라우저, 모바일 애플리케이션 또는 다른 서버로부터 올 수 있습니다.
- 서블릿은 클라이언트로부터 들어오는 HTTP 요청을 처리합니다.
- 동적 웹 콘텐츠 생성
- 서블릿은 데이터를 처리하여(연산) 동적으로 생성된 HTML, XML, JSON 등의 콘텐츠를 생성합니다.
- 상태 유지
- 서블릿은 세션을 통해 클라이언트와의 상태를 유지할 수 있습니다.
예를 들어, 로그인 상태 유지, 장바구니 기능 등을 구현할 수 있습니다.
- 서블릿은 세션을 통해 클라이언트와의 상태를 유지할 수 있습니다.
- 비즈니스 로직 처리
- 서블릿은 데이터베이스 연동, 파일 처리 등 다양한 서버 측 비즈니스 로직을 수행합니다.
서블릿의 장점
- 플랫폼 독립성: 자바로 작성되어 다양한 운영체제에서 실행될 수 있습니다.
- 안정성: 자바의 강력한 예외 처리와 메모리 관리 기능을 활용할 수 있습니다.
- 재사용성: 서블릿 클래스는 여러 웹 애플리케이션에서 재사용할 수 있습니다.
- 확장성: 서블릿은 다양한 기능을 추가할 수 있는 확장성을 제공합니다.
서블릿의 단점
- 복잡성: 초기 설정과 배포 과정이 복잡할 수 있습니다.
- 학습 곡선: 자바와 서블릿 기술을 이해하고 사용하는 데 시간이 걸릴 수 있습니다.
<aside>
💡 **MIME(Multipurpose Internet Mail Extensions) TYPE 이란?**
인터넷에서 데이터의 유형을 나타내는 표준 방식입니다. MIME TYPE은 주로 웹 브라우저와 웹 서버 간의 통신에서 사용됩니다.
**MIME TYPE은 다음과 같은 형식 - "type/subtype"**
**주요 형식 확인**
**text/plain**: 일반 텍스트 파일
**text/html:** html 형식 ****
**image/jpeg**: JPEG 이미지 파일
**application/pdf**: PDF 문서
**audio/mpeg**: MP3 오디오 파일
**video/mp4:** MP4 동영상 파일
MIME TYPE은 웹 서버와 클라이언트 간의 통신에서 중요한 역할을 합니다. 웹 서버는 요청받은 파일의 MIME TYPE을 알려주고, 클라이언트는 이 정보를 사용하여 파일을 올바르게 처리할 수 있습니다.
</aside>
오버라이드 선택하는 방법

생성자 루트 확인하는 방법

시나리오 코드 1
hello_servlet --> 폴더
HelloServlet.java
package com.tenco;
import jakarta.servlet.ServletConfig;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
/*
* HttpServlet 클래스를 상속 받아서 내가 정의한 클래스가 선언 된다.
* why? --> HTTP 프로토콜을 통한 Request, response 처리를 할 수 있기 때문이다.
*
* URL 매핑에 대한 개념을 알아보자.
* 클라이언트가 특정 URL을 요청했을 때 해당 URL에 대응하는 서블릿을
* 실행하도록 설정하는 것을 의미한다.
*
* URL 매핑 방법 - 2가지 방법을 알아보았다.
* 1. @WebServlet("/hello-servlet2")
* 2. web.xml 파일의 url-pattern 으로 쓸수있다.
*/
// @WebServlet("/hello-servlet2")
@WebServlet(urlPatterns = "/example", loadOnStartup = 1)
// loadOnStartup : web.xml에서 <load-on-startup>1</load-on-startup> 으로 되며
// loadOnStartup : 컨테이너 실행 시 서블릿이 로드되는 순서 지정
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
// 생성자
public HelloServlet() {
super();
System.out.println("생성자가 호출 됨");
} // 필요없으면 지워도 된다.
// 해당 서블릿 클래스가 인스턴스가 될 때 단 한번 실행 하는 메서드이다.
public void init(ServletConfig config) throws ServletException {
System.out.println("init() 메서드가 호출 됨");
}
// 메모리에서 내려가기 직전에 호출 되는 메서드이다.
public void destroy() {
System.out.println("destory : 호출");
}
// GET 요청으로 들어 올 때 동작 된다.
// 주소 설계 - http://localhost:8080/hello/hello-servlet
// /루트/url-mapping 이런 느낌?
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// MIME TYPE - 인터넷 세상에서 데이터의 유형을 나타내는 표준 방식
// 내가 던지는 컨텐트 타입은 텍스트 형식이고 html 형식이야
response.setContentType("text/html");
// 내가 던지는 인코딩은 UTF-8 이야
response.setCharacterEncoding("UTF-8");
// 스트림을 어디에서 뽑아야 될까?
// 문자열 형식으로 데이터를 출력한다.
response.getWriter().write("<html> <body> <h1>HELLO</h1> </body> </html>");
}
// POST 요청으로 들어 올 때 동작 된다.
// 주소 설계 - http://localhost:8080/hello/hello-servlet
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 문제 --> POST 요청이 들어오는 것을 확인하고
// 응용해서 데이터 또는 html 형식으로 응답처리 하세요.
System.out.println("post 되나?");
// super.doPost(request, response);
}
}
get 해보기
홈페이지에서 http://localhost:8080/hello/hello-servlet 으로 실행
post 해보기
Talent API Tester 에서 post 형식으로 한다.
headers 의 형식
Content-Type : text/html


'Java' 카테고리의 다른 글
| 2024.06.28 JSP 프로그래밍 기본 서블릿 작성, 배포, web.xml 설정에 이해 (0) | 2024.06.28 |
|---|---|
| 2024.06.28 JSP 프로그래밍 기본 서블릿 Life Cycle 이란? (0) | 2024.06.28 |
| 2024.06.27 JSP 프로그래밍 아파치 톰캣 시작과 폴더 구조 확인 (0) | 2024.06.27 |
| 2024.06.27 JSP 프로그래밍 기본 아파치 톰캣 설치하기 (0) | 2024.06.27 |
| 2024.06.27 JSP 프로그래밍 기본 WAS와 웹 컨테이너의 역할 (0) | 2024.06.27 |